@coco-vexel/coco-office 0.0.0-stage → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +120 -2
  3. package/THIRD_PARTY_NOTICES.md +1188 -0
  4. package/dist/excel-worker-browser.cjs +6544 -0
  5. package/dist/excel-worker-browser.cjs.map +1 -0
  6. package/dist/excel-worker-browser.d.cts +2 -0
  7. package/dist/excel-worker-browser.d.ts +2 -0
  8. package/dist/excel-worker-browser.js +6523 -0
  9. package/dist/excel-worker-browser.js.map +1 -0
  10. package/dist/excel-worker.cjs +6547 -0
  11. package/dist/excel-worker.cjs.map +1 -0
  12. package/dist/excel-worker.d.cts +2 -0
  13. package/dist/excel-worker.d.ts +2 -0
  14. package/dist/excel-worker.js +6526 -0
  15. package/dist/excel-worker.js.map +1 -0
  16. package/dist/excel.cjs +12523 -0
  17. package/dist/excel.cjs.map +1 -0
  18. package/dist/excel.d.cts +2252 -0
  19. package/dist/excel.d.ts +2252 -0
  20. package/dist/excel.js +12368 -0
  21. package/dist/excel.js.map +1 -0
  22. package/dist/index.cjs +19 -0
  23. package/dist/index.cjs.map +1 -0
  24. package/dist/index.d.cts +2 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.js +1 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/kernel-worker-browser.cjs +12304 -0
  29. package/dist/kernel-worker-browser.cjs.map +1 -0
  30. package/dist/kernel-worker-browser.d.cts +2 -0
  31. package/dist/kernel-worker-browser.d.ts +2 -0
  32. package/dist/kernel-worker-browser.js +12283 -0
  33. package/dist/kernel-worker-browser.js.map +1 -0
  34. package/dist/kernel-worker.cjs +12309 -0
  35. package/dist/kernel-worker.cjs.map +1 -0
  36. package/dist/kernel-worker.d.cts +2 -0
  37. package/dist/kernel-worker.d.ts +2 -0
  38. package/dist/kernel-worker.js +12288 -0
  39. package/dist/kernel-worker.js.map +1 -0
  40. package/dist/pack.cjs +459 -0
  41. package/dist/pack.cjs.map +1 -0
  42. package/dist/pack.d.cts +119 -0
  43. package/dist/pack.d.ts +119 -0
  44. package/dist/pack.js +408 -0
  45. package/dist/pack.js.map +1 -0
  46. package/dist/ppt.cjs +7427 -0
  47. package/dist/ppt.cjs.map +1 -0
  48. package/dist/ppt.d.cts +1432 -0
  49. package/dist/ppt.d.ts +1432 -0
  50. package/dist/ppt.js +7355 -0
  51. package/dist/ppt.js.map +1 -0
  52. package/dist/shared.cjs +105 -0
  53. package/dist/shared.cjs.map +1 -0
  54. package/dist/shared.d.cts +31 -0
  55. package/dist/shared.d.ts +31 -0
  56. package/dist/shared.js +81 -0
  57. package/dist/shared.js.map +1 -0
  58. package/dist/types-BVkkdcfh.d.cts +54 -0
  59. package/dist/types-BVkkdcfh.d.ts +54 -0
  60. package/dist/types-C2vQfM-b.d.cts +102 -0
  61. package/dist/types-C2vQfM-b.d.ts +102 -0
  62. package/dist/view-DAkeR0RW.d.ts +1199 -0
  63. package/dist/view-DX2YAG5A.d.cts +1199 -0
  64. package/dist/word-view.cjs +1824 -0
  65. package/dist/word-view.cjs.map +1 -0
  66. package/dist/word-view.d.cts +2 -0
  67. package/dist/word-view.d.ts +2 -0
  68. package/dist/word-view.js +1791 -0
  69. package/dist/word-view.js.map +1 -0
  70. package/dist/word.cjs +14111 -0
  71. package/dist/word.cjs.map +1 -0
  72. package/dist/word.d.cts +3042 -0
  73. package/dist/word.d.ts +3042 -0
  74. package/dist/word.js +14016 -0
  75. package/dist/word.js.map +1 -0
  76. package/package.json +103 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pack/part.ts","../src/pack/package.ts","../src/pack/zip.ts","../src/pack/content-types.ts","../src/excel/namespaces.ts","../src/excel/address.ts","../src/excel/color.ts","../src/excel/styles-reader.ts","../src/excel/workbook-reader.ts","../src/excel/xlsx-reader.ts","../src/excel/xlsx-writer.ts","../src/excel/names.ts","../src/excel/range.ts","../src/excel/objects.ts","../src/excel/reference-rewriter.ts","../src/excel/worksheet.ts","../src/excel/mutations.ts","../src/excel/excel-workbook.ts","../src/excel/runtime-rpc.ts","../src/excel/runtime-script.ts","../src/excel/runtime-worker-shared.ts","../src/excel/runtime-worker-browser-entry.ts"],"sourcesContent":["/**\n * Part 构造 / 变更 / 查询 的辅助函数。\n *\n * 所有 Part 的\"创建\"都走这里(而非直接字面量),以便:\n * - 守住 path 格式(无前导斜杠)\n * - 守住 XML / 二进制 互斥\n * - 统一 `_dirty` / `_originalBytes` 初始化语义\n */\nimport type { Part } from './types.js';\n\nexport interface CreateXmlPartSpec {\n /** Part 路径,无前导斜杠,如 'word/document.xml' */\n path: string;\n /** MIME content type */\n contentType: string;\n /** 已解析好的 XML DOM(slimdom Document) */\n xmlDom: Document;\n /**\n * 装载时的原始字节。\n * - 传入(来自装载路径):`_dirty` 初始为 `false`,可在 `toZip` 时零 serialize 复用\n * - 省略(新建 part 的场景,后续 #9/#10 的插入新 XML part):`_dirty` 初始为 `true`\n */\n originalBytes?: Uint8Array;\n}\n\nexport interface CreateBinaryPartSpec {\n /** Part 路径,无前导斜杠,如 'word/media/image1.png' */\n path: string;\n /** MIME content type,如 'image/png' */\n contentType: string;\n /** 二进制载荷 */\n bytes: Uint8Array;\n /**\n * 装载时的原始字节;二进制通常装载即最终态,省略时默认 = `bytes`。\n * 二进制 part 初始 `_dirty` 恒为 `false`。\n */\n originalBytes?: Uint8Array;\n}\n\nfunction assertPath(path: string): void {\n if (typeof path !== 'string' || path.length === 0) {\n throw new Error(`invalid part path: must be non-empty string, got: ${JSON.stringify(path)}`);\n }\n if (path.startsWith('/')) {\n throw new Error(`invalid part path: must not start with '/', got: ${path}`);\n }\n}\n\nfunction assertContentType(contentType: string): void {\n if (typeof contentType !== 'string' || contentType.length === 0) {\n throw new Error(`invalid contentType: must be non-empty string`);\n }\n}\n\n/** 从已解析的 XML DOM 创建 XML part。`originalBytes` 传入 → dirty=false;否则 dirty=true(新建场景) */\nexport function createXmlPart(spec: CreateXmlPartSpec): Part {\n assertPath(spec.path);\n assertContentType(spec.contentType);\n if (!spec.xmlDom) {\n throw new Error(`createXmlPart: xmlDom required for ${spec.path}`);\n }\n return {\n path: spec.path,\n contentType: spec.contentType,\n xmlDom: spec.xmlDom,\n _originalBytes: spec.originalBytes,\n _dirty: spec.originalBytes === undefined,\n };\n}\n\n/** 从二进制字节创建 binary part。`originalBytes` 省略时默认 = `bytes`。dirty 恒为 false */\nexport function createBinaryPart(spec: CreateBinaryPartSpec): Part {\n assertPath(spec.path);\n assertContentType(spec.contentType);\n if (!spec.bytes) {\n throw new Error(`createBinaryPart: bytes required for ${spec.path}`);\n }\n return {\n path: spec.path,\n contentType: spec.contentType,\n bytes: spec.bytes,\n _originalBytes: spec.originalBytes ?? spec.bytes,\n _dirty: false,\n };\n}\n\n/** 标记 part 被改动过。toZip / toFlatOpc 会重 serialize 此 part */\nexport function markDirty(part: Part): void {\n part._dirty = true;\n}\n\n/** 查询 part 是否被改动(read-only;读操作不改 part) */\nexport function isDirty(part: Part): boolean {\n return part._dirty;\n}\n\n/** XML part 判定(拥有 xmlDom) */\nexport function isXmlPart(part: Part): boolean {\n return part.xmlDom !== undefined;\n}\n\n/** 二进制 part 判定(拥有 bytes 但无 xmlDom) */\nexport function isBinaryPart(part: Part): boolean {\n return part.bytes !== undefined && part.xmlDom === undefined;\n}\n","/**\n * Package 集合层:create / set / get / has / delete / list\n *\n * Package 只是 path→Part 的 Map 容器;零业务语义,存储格式由 adapter 层(#9 zip / #10 Flat OPC)决定。\n */\nimport type { Package, Part } from './types.js';\n\n/** 空包。后续由 adapter 层填充 parts */\nexport function createPackage(): Package {\n return { parts: new Map() };\n}\n\n/** 以 part.path 为 key 放入 pkg。已存在同 path 时覆盖 */\nexport function setPart(pkg: Package, part: Part): void {\n pkg.parts.set(part.path, part);\n}\n\n/** 按 path 取回 part;不存在返 undefined */\nexport function getPart(pkg: Package, path: string): Part | undefined {\n return pkg.parts.get(path);\n}\n\n/** 按 path 判断存在 */\nexport function hasPart(pkg: Package, path: string): boolean {\n return pkg.parts.has(path);\n}\n\n/** 删除 part,返回是否删除成功(存在即删、不存在返 false) */\nexport function deletePart(pkg: Package, path: string): boolean {\n return pkg.parts.delete(path);\n}\n\n/** 所有 parts 快照数组(稳定遍历顺序 = Map 插入顺序) */\nexport function listParts(pkg: Package): Part[] {\n return Array.from(pkg.parts.values());\n}\n","/**\n * zip ↔ Package 互转(docs/01 §3.2)。\n *\n * - `fromZip(buf)` 解压 .docx,按 `[Content_Types].xml` 恢复每个 part 的 contentType\n * - `toZip(pkg)` 反向:dirty=false 的 part 复用 `_originalBytes`,dirty=true 的按 XML / 二进制重序列化\n *\n * 本实现目标:小文档正确性。极大档性能调优(lazy parse 等)归后续 issue。\n */\nimport JSZip from 'jszip';\nimport { parseXmlDocument, serializeToWellFormedString } from 'slimdom';\nimport type { Package, Part } from './types.js';\nimport { createBinaryPart, createXmlPart, isXmlPart } from './part.js';\nimport { createPackage, setPart } from './package.js';\nimport { ensureContentTypes } from './content-types.js';\n\n/** Content Types 子集 */\nconst CONTENT_TYPES_PATH = '[Content_Types].xml';\nconst CONTENT_TYPES_NS = 'http://schemas.openxmlformats.org/package/2006/content-types';\nconst CONTENT_TYPES_CTYPE = 'application/vnd.openxmlformats-package.content-types+xml';\n\n/**\n * 判断 contentType 是否为 XML 类(决定走 parseXmlDocument 还是保留字节):\n * - 以 `+xml` 结尾(OOXML 所有子 part 的惯例)\n * - 或完全等于 `application/xml` / `text/xml`\n */\nfunction isXmlContentType(ct: string): boolean {\n const normalized = ct.toLowerCase();\n if (\n normalized.startsWith('image/') ||\n normalized.startsWith('audio/') ||\n normalized.startsWith('video/') ||\n normalized === 'application/octet-stream' ||\n normalized === 'application/vnd.openxmlformats-officedocument.oleobject' ||\n normalized.startsWith('application/vnd.ms-office.')\n ) {\n return false;\n }\n return normalized.endsWith('+xml') || normalized === 'application/xml' || normalized === 'text/xml';\n}\n\n/** 解析 [Content_Types].xml 构建 partName → contentType 的查找器 */\ninterface ContentTypeResolver {\n /** partName 无前导 `/`,如 'word/document.xml' */\n resolve(partName: string): string | undefined;\n}\n\nfunction parseContentTypes(xml: string): ContentTypeResolver {\n const doc = parseXmlDocument(xml) as unknown as Document;\n const defaults = new Map<string, string>(); // extension(小写) → contentType\n const overrides = new Map<string, string>(); // partName(无 /)→ contentType\n\n const defaultEls = doc.getElementsByTagNameNS(CONTENT_TYPES_NS, 'Default');\n for (let i = 0; i < defaultEls.length; i++) {\n const el = defaultEls[i];\n if (!el) continue;\n const ext = el.getAttribute('Extension');\n const ct = el.getAttribute('ContentType');\n if (ext && ct) defaults.set(ext.toLowerCase(), ct);\n }\n\n const overrideEls = doc.getElementsByTagNameNS(CONTENT_TYPES_NS, 'Override');\n for (let i = 0; i < overrideEls.length; i++) {\n const el = overrideEls[i];\n if (!el) continue;\n const partName = el.getAttribute('PartName');\n const ct = el.getAttribute('ContentType');\n if (partName && ct) {\n // PartName 以 `/` 开头,剥掉前导斜杠与 Package 内部 path 对齐\n overrides.set(partName.replace(/^\\//, ''), ct);\n }\n }\n\n return {\n resolve(partName: string): string | undefined {\n const override = overrides.get(partName);\n if (override) return override;\n const dot = partName.lastIndexOf('.');\n if (dot === -1) return undefined;\n return defaults.get(partName.slice(dot + 1).toLowerCase());\n },\n };\n}\n\n/**\n * 从 zip 字节重建 Package。\n *\n * 行为:\n * - 先读 `[Content_Types].xml`,构建 contentType 查找器\n * - 遍历 zip entries,跳过目录\n * - 每个 entry 按 contentType 决定 XML / 二进制,创建对应 Part\n * - `[Content_Types].xml` 也作为 XML part 存入 Package\n */\nexport async function fromZip(buf: Uint8Array | ArrayBuffer): Promise<Package> {\n const bytes = buf instanceof Uint8Array ? buf : new Uint8Array(buf);\n const zip = await JSZip.loadAsync(bytes);\n const pkg = createPackage();\n\n const ctFile = zip.file(CONTENT_TYPES_PATH);\n if (!ctFile) {\n throw new Error(`fromZip: missing ${CONTENT_TYPES_PATH}; not a valid OOXML package`);\n }\n const ctXml = await ctFile.async('string');\n const resolver = parseContentTypes(ctXml);\n const ctBytes = await ctFile.async('uint8array');\n setPart(\n pkg,\n createXmlPart({\n path: CONTENT_TYPES_PATH,\n contentType: CONTENT_TYPES_CTYPE,\n xmlDom: parseXmlDocument(ctXml) as unknown as Document,\n originalBytes: ctBytes,\n }),\n );\n\n // 遍历非 [Content_Types].xml 的 entry\n const entryPaths: string[] = [];\n zip.forEach((relativePath, entry) => {\n if (entry.dir) return;\n if (relativePath === CONTENT_TYPES_PATH) return;\n entryPaths.push(relativePath);\n });\n\n for (const path of entryPaths) {\n const entry = zip.file(path);\n if (!entry) continue;\n const contentType = resolver.resolve(path);\n if (!contentType) {\n throw new Error(\n `fromZip: no ContentType for part '${path}' (not in Default by extension, not in Override by partName)`,\n );\n }\n const entryBytes = await entry.async('uint8array');\n\n if (isXmlContentType(contentType)) {\n const xmlText = await entry.async('string');\n const xmlDom = parseXmlDocument(xmlText) as unknown as Document;\n setPart(pkg, createXmlPart({ path, contentType, xmlDom, originalBytes: entryBytes }));\n } else {\n setPart(pkg, createBinaryPart({ path, contentType, bytes: entryBytes }));\n }\n }\n\n return pkg;\n}\n\n/**\n * 将 Package 序列化回 zip 字节。\n *\n * 行为:\n * - `_dirty === false` 且持有 `_originalBytes` → 直接复用字节(零 serialize)\n * - `_dirty === true` 的 XML part → slimdom serialize\n * - `_dirty === true` 的二进制 part → 使用 `bytes`\n */\nexport async function toZip(pkg: Package): Promise<Uint8Array> {\n // Flat OPC → Package 的路径不会产生 [Content_Types].xml;此处补齐以保证产出的 zip 合法。\n // 对 fromZip 出来的 Package 无副作用(CT 已在)。\n ensureContentTypes(pkg);\n\n const zip = new JSZip();\n\n for (const part of pkg.parts.values()) {\n const bytes = partToBytes(part);\n // createFolders=false 显式禁止 JSZip 为含 '/' 的 path 自动创建中间目录 entry——\n // OOXML 规范不允许 zip 包内有空目录 entry,Word 见到会判\"文档已损坏\"拒打开\n // (WPS 宽松能开但产物不合规)。JSZip 3.x 默认 true,必须显式关。\n zip.file(part.path, bytes, { createFolders: false });\n }\n\n // OOXML 主体是高度可压缩的 XML;默认 STORE 会让产物比 Word 原生输出大 10-18×。\n return await zip.generateAsync({\n type: 'uint8array',\n compression: 'DEFLATE',\n compressionOptions: { level: 6 },\n });\n}\n\nfunction partToBytes(part: Part): Uint8Array {\n // dirty=false 且有原始字节:零 serialize\n if (!part._dirty && part._originalBytes) {\n return part._originalBytes;\n }\n\n if (isXmlPart(part)) {\n if (!part.xmlDom) {\n throw new Error(`toZip: XML part '${part.path}' missing xmlDom`);\n }\n // xmlDom 在我们的类型里是 lib.dom 的 Document(消费方友好),slimdom 的 Node 结构兼容但 TS\n // 类型不同;通过 `as never` 绕开 dts 检查,运行时正常。\n const text = serializeToWellFormedString(part.xmlDom as never);\n return new TextEncoder().encode(text);\n }\n\n // 二进制\n if (part.bytes) return part.bytes;\n if (part._originalBytes) return part._originalBytes;\n throw new Error(`toZip: binary part '${part.path}' has no bytes`);\n}\n","/**\n * [Content_Types].xml 的合成与维护。\n *\n * 为什么单列一个模块:\n * - zip 形态要求 [Content_Types].xml 存在(否则 Word/WPS 打不开)\n * - Flat OPC 形态里 contentType 已内联在 <pkg:part> 上,不含 CT 文件\n * - 因此 `fromFlatOpc` 出来的 Package 缺 CT;直接 `toZip` 会产出坏 docx\n *\n * 本模块提供 `ensureContentTypes(pkg)`:若 CT part 缺失,按当前 parts 的\n * (path → contentType)合成一份最小 CT XML 并加入 Package。\n *\n * `toZip` 会在打包前自动调一次,确保产出的 zip 始终可打开。\n */\nimport { parseXmlDocument } from 'slimdom';\nimport { createXmlPart } from './part.js';\nimport { getPart, setPart } from './package.js';\nimport type { Package } from './types.js';\n\nconst CONTENT_TYPES_PATH = '[Content_Types].xml';\nconst CONTENT_TYPES_NS = 'http://schemas.openxmlformats.org/package/2006/content-types';\nconst CONTENT_TYPES_CTYPE = 'application/vnd.openxmlformats-package.content-types+xml';\n\n/** XML 属性值转义(Content Type 里可能含 `+`,但没有 `<` `&` 等需要转义的字符;仍做一遍以防) */\nfunction xmlAttr(v: string): string {\n return v\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\n/**\n * 如果 Package 里已有 `[Content_Types].xml` part,返回 false,不做改动。\n * 否则,按当前 parts 的 contentType 合成一份最小 CT XML 并加入 Package,返回 true。\n *\n * 合成策略:每个非 CT part 产生一个 `<Override PartName=\"/path\" ContentType=\"...\"/>`。\n * 不尝试推导 Default 扩展名(正确性优先,简洁性次之)。\n */\nexport function ensureContentTypes(pkg: Package): boolean {\n if (getPart(pkg, CONTENT_TYPES_PATH)) return false;\n\n const overrides: string[] = [];\n for (const part of pkg.parts.values()) {\n if (part.path === CONTENT_TYPES_PATH) continue;\n overrides.push(\n ` <Override PartName=\"/${xmlAttr(part.path)}\" ContentType=\"${xmlAttr(part.contentType)}\"/>`,\n );\n }\n\n const xml =\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n` +\n `<Types xmlns=\"${CONTENT_TYPES_NS}\">\\n` +\n overrides.join('\\n') +\n (overrides.length > 0 ? '\\n' : '') +\n `</Types>`;\n\n setPart(\n pkg,\n createXmlPart({\n path: CONTENT_TYPES_PATH,\n contentType: CONTENT_TYPES_CTYPE,\n xmlDom: parseXmlDocument(xml) as unknown as Document,\n originalBytes: new TextEncoder().encode(xml),\n }),\n );\n\n return true;\n}\n","export const SS_NS = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main';\nexport const REL_NS = 'http://schemas.openxmlformats.org/package/2006/relationships';\nexport const OFFICE_REL_NS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n","export interface CellAddress {\n address: string;\n row: number;\n column: number;\n}\n\nexport interface RangeAddress {\n address: string;\n sheetName?: string;\n startRow: number;\n startColumn: number;\n rowCount: number;\n columnCount: number;\n}\n\nexport interface SheetQualifiedAddress {\n sheetName?: string;\n address: string;\n}\n\nexport const EXCEL_MAX_ROW = 1_048_576;\nexport const EXCEL_MAX_COLUMN = 16_384;\n\nexport function columnNameToIndex(columnName: string): number {\n let value = 0;\n for (const ch of columnName.toUpperCase()) {\n const code = ch.charCodeAt(0);\n if (code < 65 || code > 90) continue;\n value = value * 26 + (code - 64);\n }\n if (value <= 0) {\n throw new Error(`ExcelWorkbook: invalid column name ${columnName}`);\n }\n return value;\n}\n\nexport function columnIndexToName(column: number): string {\n if (!Number.isInteger(column) || column < 1) {\n throw new Error(`ExcelWorkbook: invalid column index ${column}`);\n }\n let value = column;\n let name = '';\n while (value > 0) {\n const rem = (value - 1) % 26;\n name = String.fromCharCode(65 + rem) + name;\n value = Math.floor((value - 1) / 26);\n }\n return name;\n}\n\nexport function parseCellAddress(address: string): CellAddress {\n const qualified = splitSheetQualifiedAddress(address);\n const normalized = qualified.address.replace(/\\$/g, '').trim();\n const match = /^([A-Za-z]+)(\\d+)$/.exec(normalized);\n if (!match) {\n throw new Error(`ExcelWorkbook: invalid cell address ${address}`);\n }\n const column = columnNameToIndex(match[1]!);\n const row = Number(match[2]);\n if (!Number.isInteger(row) || row < 1) {\n throw new Error(`ExcelWorkbook: invalid cell address ${address}`);\n }\n return {\n address: `${columnIndexToName(column)}${row}`,\n column,\n row,\n };\n}\n\nexport function formatCellAddress(row: number, column: number): string {\n if (!Number.isInteger(row) || row < 1) {\n throw new Error(`ExcelWorkbook: invalid row index ${row}`);\n }\n return `${columnIndexToName(column)}${row}`;\n}\n\nexport function parseRangeAddress(address: string): RangeAddress {\n const qualified = splitSheetQualifiedAddress(address);\n const parts = qualified.address.split(':');\n if (parts.length > 2) {\n throw new Error(`ExcelWorkbook: invalid range address ${address}`);\n }\n const [startRaw, endRaw] = parts;\n if (!startRaw) {\n throw new Error(`ExcelWorkbook: invalid range address ${address}`);\n }\n const wholeColumn = parseWholeColumnRange(parts, address);\n if (wholeColumn) {\n return { ...wholeColumn, sheetName: qualified.sheetName };\n }\n const wholeRow = parseWholeRowRange(parts, address);\n if (wholeRow) {\n return { ...wholeRow, sheetName: qualified.sheetName };\n }\n const start = parseCellAddress(startRaw);\n const end = endRaw ? parseCellAddress(endRaw) : start;\n const startRow = Math.min(start.row, end.row);\n const endRow = Math.max(start.row, end.row);\n const startColumn = Math.min(start.column, end.column);\n const endColumn = Math.max(start.column, end.column);\n const first = formatCellAddress(startRow, startColumn);\n const last = formatCellAddress(endRow, endColumn);\n return {\n address: first === last ? first : `${first}:${last}`,\n sheetName: qualified.sheetName,\n startRow,\n startColumn,\n rowCount: endRow - startRow + 1,\n columnCount: endColumn - startColumn + 1,\n };\n}\n\nfunction parseWholeColumnRange(\n parts: string[],\n originalAddress: string,\n): Omit<RangeAddress, 'sheetName'> | null {\n if (parts.length !== 2) return null;\n const [startRaw, endRaw] = parts;\n const startColumn = parseColumnReference(startRaw);\n const endColumn = endRaw ? parseColumnReference(endRaw) : startColumn;\n if (startColumn === null && endColumn === null) return null;\n if (startColumn === null || endColumn === null) {\n throw new Error(`ExcelWorkbook: invalid range address ${originalAddress}`);\n }\n const firstColumn = Math.min(startColumn, endColumn);\n const lastColumn = Math.max(startColumn, endColumn);\n return {\n address: formatRangeAddress(\n 1,\n firstColumn,\n EXCEL_MAX_ROW,\n lastColumn - firstColumn + 1,\n ),\n startRow: 1,\n startColumn: firstColumn,\n rowCount: EXCEL_MAX_ROW,\n columnCount: lastColumn - firstColumn + 1,\n };\n}\n\nfunction parseWholeRowRange(\n parts: string[],\n originalAddress: string,\n): Omit<RangeAddress, 'sheetName'> | null {\n if (parts.length !== 2) return null;\n const [startRaw, endRaw] = parts;\n const startRow = parseRowReference(startRaw);\n const endRow = endRaw ? parseRowReference(endRaw) : startRow;\n if (startRow === null && endRow === null) return null;\n if (startRow === null || endRow === null) {\n throw new Error(`ExcelWorkbook: invalid range address ${originalAddress}`);\n }\n const firstRow = Math.min(startRow, endRow);\n const lastRow = Math.max(startRow, endRow);\n return {\n address: formatRangeAddress(\n firstRow,\n 1,\n lastRow - firstRow + 1,\n EXCEL_MAX_COLUMN,\n ),\n startRow: firstRow,\n startColumn: 1,\n rowCount: lastRow - firstRow + 1,\n columnCount: EXCEL_MAX_COLUMN,\n };\n}\n\nfunction parseColumnReference(value: string | undefined): number | null {\n const normalized = value?.replace(/\\$/g, '').trim();\n if (!normalized || !/^[A-Za-z]+$/.test(normalized)) return null;\n return columnNameToIndex(normalized);\n}\n\nfunction parseRowReference(value: string | undefined): number | null {\n const normalized = value?.replace(/\\$/g, '').trim();\n if (!normalized || !/^\\d+$/.test(normalized)) return null;\n const row = Number(normalized);\n if (!Number.isInteger(row) || row < 1) {\n throw new Error(`ExcelWorkbook: invalid row reference ${value}`);\n }\n return row;\n}\n\nexport function splitSheetQualifiedAddress(input: string): SheetQualifiedAddress {\n const trimmed = input.trim();\n if (!trimmed) {\n throw new Error(`ExcelWorkbook: invalid address ${input}`);\n }\n\n let inQuote = false;\n for (let i = 0; i < trimmed.length; i++) {\n const ch = trimmed[i];\n if (ch === \"'\") {\n if (inQuote && trimmed[i + 1] === \"'\") {\n i += 1;\n } else {\n inQuote = !inQuote;\n }\n continue;\n }\n if (ch === '!' && !inQuote) {\n const rawSheet = trimmed.slice(0, i).trim();\n const address = trimmed.slice(i + 1).trim();\n if (!rawSheet || !address) {\n throw new Error(`ExcelWorkbook: invalid sheet-qualified address ${input}`);\n }\n return { sheetName: unquoteSheetName(rawSheet), address };\n }\n }\n\n return { address: trimmed };\n}\n\nexport function formatRangeAddress(\n startRow: number,\n startColumn: number,\n rowCount: number,\n columnCount: number,\n): string {\n if (!Number.isInteger(rowCount) || rowCount < 1) {\n throw new Error(`ExcelWorkbook: invalid row count ${rowCount}`);\n }\n if (!Number.isInteger(columnCount) || columnCount < 1) {\n throw new Error(`ExcelWorkbook: invalid column count ${columnCount}`);\n }\n const first = formatCellAddress(startRow, startColumn);\n const last = formatCellAddress(startRow + rowCount - 1, startColumn + columnCount - 1);\n return first === last ? first : `${first}:${last}`;\n}\n\nfunction unquoteSheetName(raw: string): string {\n if (!raw.startsWith(\"'\")) return raw;\n if (!raw.endsWith(\"'\") || raw.length < 2) {\n throw new Error(`ExcelWorkbook: invalid quoted sheet name ${raw}`);\n }\n return raw.slice(1, -1).replace(/''/g, \"'\");\n}\n","import type { ExcelColorModel } from './model.js';\n\nconst RGB_PATTERN = /^#[0-9A-Fa-f]{6}$/;\n\nexport function normalizeExcelColor(\n color: ExcelColorModel | undefined,\n context = 'Excel color',\n): ExcelColorModel | undefined {\n if (color === undefined) return undefined;\n if (!color || typeof color !== 'object' || !RGB_PATTERN.test(color.rgb)) {\n throw new Error(`${context}: color must use { rgb: \"#RRGGBB\" }`);\n }\n if (Object.keys(color).some((key) => key !== 'rgb')) {\n throw new Error(`${context}: only the rgb field is supported`);\n }\n return { rgb: color.rgb.toUpperCase() };\n}\n\nexport function ooxmlArgbToExcelColor(value: string | undefined): ExcelColorModel | undefined {\n if (!value) return undefined;\n const normalized = value.trim().replace(/^#/, '');\n if (/^[0-9A-Fa-f]{8}$/.test(normalized)) {\n return { rgb: `#${normalized.slice(2).toUpperCase()}` };\n }\n if (/^[0-9A-Fa-f]{6}$/.test(normalized)) {\n return { rgb: `#${normalized.toUpperCase()}` };\n }\n return undefined;\n}\n\nexport function excelColorToOoxmlArgb(color: ExcelColorModel, context = 'Excel color'): string {\n const normalized = normalizeExcelColor(color, context)!;\n return `FF${normalized.rgb.slice(1)}`;\n}\n\nexport function applyExcelTint(color: ExcelColorModel, tint: number | undefined): ExcelColorModel {\n if (tint === undefined || tint === 0 || !Number.isFinite(tint)) return color;\n const ratio = Math.max(-1, Math.min(1, tint));\n const channels = [1, 3, 5].map((offset) =>\n Number.parseInt(color.rgb.slice(offset, offset + 2), 16),\n );\n const adjusted = channels.map((channel) =>\n Math.round(ratio < 0 ? channel * (1 + ratio) : channel + (255 - channel) * ratio),\n );\n return {\n rgb: `#${adjusted\n .map((channel) => channel.toString(16).padStart(2, '0'))\n .join('')\n .toUpperCase()}`,\n };\n}\n","import type { Package } from '../pack/index.js';\nimport type {\n ExcelAlignmentModel,\n ExcelBorderModel,\n ExcelBorderSideModel,\n ExcelCellFormatModel,\n ExcelColorModel,\n ExcelFillModel,\n ExcelFontModel,\n ExcelNumberFormatModel,\n ExcelStylesModel,\n} from './model.js';\nimport { SS_NS } from './namespaces.js';\nimport { getPart } from '../pack/index.js';\nimport { applyExcelTint, ooxmlArgbToExcelColor } from './color.js';\n\nconst DRAWING_NS = 'http://schemas.openxmlformats.org/drawingml/2006/main';\nconst THEME_COLOR_ORDER = [\n 'lt1',\n 'dk1',\n 'lt2',\n 'dk2',\n 'accent1',\n 'accent2',\n 'accent3',\n 'accent4',\n 'accent5',\n 'accent6',\n 'hlink',\n 'folHlink',\n] as const;\nconst INDEXED_COLORS = [\n '000000',\n 'FFFFFF',\n 'FF0000',\n '00FF00',\n '0000FF',\n 'FFFF00',\n 'FF00FF',\n '00FFFF',\n '000000',\n 'FFFFFF',\n 'FF0000',\n '00FF00',\n '0000FF',\n 'FFFF00',\n 'FF00FF',\n '00FFFF',\n '800000',\n '008000',\n '000080',\n '808000',\n '800080',\n '008080',\n 'C0C0C0',\n '808080',\n '9999FF',\n '993366',\n 'FFFFCC',\n 'CCFFFF',\n '660066',\n 'FF8080',\n '0066CC',\n 'CCCCFF',\n '000080',\n 'FF00FF',\n 'FFFF00',\n '00FFFF',\n '800080',\n '800000',\n '008080',\n '0000FF',\n '00CCFF',\n 'CCFFFF',\n 'CCFFCC',\n 'FFFF99',\n '99CCFF',\n 'FF99CC',\n 'CC99FF',\n 'FFCC99',\n '3366FF',\n '33CCCC',\n '99CC00',\n 'FFCC00',\n 'FF9900',\n 'FF6600',\n '666699',\n '969696',\n '003366',\n '339966',\n '003300',\n '333300',\n '993300',\n '993366',\n '333399',\n '333333',\n] as const;\n\ntype ThemeColors = Map<number, ExcelColorModel>;\n\nfunction firstChildNs(parent: Element, ns: string, localName: string): Element | null {\n return parent.getElementsByTagNameNS(ns, localName)[0] ?? null;\n}\n\nfunction childElementsNs(parent: Element, ns: string, localName: string): Element[] {\n const elements = parent.getElementsByTagNameNS(ns, localName);\n return Array.from(elements).filter((el) => el.parentElement === parent);\n}\n\nfunction parseOptionalNumber(raw: string | null): number | undefined {\n if (raw === null || raw === '') return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction parseBooleanAttr(raw: string | null): boolean | undefined {\n if (raw === null) return undefined;\n return raw === '1' || raw === 'true';\n}\n\nfunction setIfDefined<T extends object, K extends keyof T>(\n target: T,\n key: K,\n value: T[K] | undefined,\n): void {\n if (value !== undefined) target[key] = value;\n}\n\nfunction parseColor(\n el: Element | null | undefined,\n themeColors: ThemeColors,\n): ExcelColorModel | undefined {\n if (!el) return undefined;\n let color = ooxmlArgbToExcelColor(el.getAttribute('rgb') ?? undefined);\n const theme = parseOptionalNumber(el.getAttribute('theme'));\n if (!color && theme !== undefined) color = themeColors.get(theme);\n const indexed = parseOptionalNumber(el.getAttribute('indexed'));\n if (!color && indexed !== undefined) {\n const rgb =\n INDEXED_COLORS[indexed] ??\n (indexed === 64 ? '000000' : indexed === 65 ? 'FFFFFF' : undefined);\n if (rgb) color = { rgb: `#${rgb}` };\n }\n if (!color && parseBooleanAttr(el.getAttribute('auto'))) color = { rgb: '#000000' };\n return color ? applyExcelTint(color, parseOptionalNumber(el.getAttribute('tint'))) : undefined;\n}\n\nfunction parseThemeColors(pkg: Package): ThemeColors {\n const themeColors: ThemeColors = new Map();\n const themeDom = getPart(pkg, 'xl/theme/theme1.xml')?.xmlDom;\n if (!themeDom) return themeColors;\n const scheme = themeDom.getElementsByTagNameNS(DRAWING_NS, 'clrScheme')[0];\n if (!scheme) return themeColors;\n THEME_COLOR_ORDER.forEach((name, index) => {\n const slot = Array.from(scheme.getElementsByTagNameNS(DRAWING_NS, name)).find(\n (element) => element.parentElement === scheme,\n );\n const source = slot?.firstElementChild;\n const raw = source?.getAttribute('val') ?? source?.getAttribute('lastClr') ?? undefined;\n const color = ooxmlArgbToExcelColor(raw);\n if (color) themeColors.set(index, color);\n });\n return themeColors;\n}\n\nfunction parseValNumber(parent: Element, name: string): number | undefined {\n return parseOptionalNumber(firstChildNs(parent, SS_NS, name)?.getAttribute('val') ?? null);\n}\n\nfunction parseValString(parent: Element, name: string): string | undefined {\n return firstChildNs(parent, SS_NS, name)?.getAttribute('val') ?? undefined;\n}\n\nfunction emptyStyles(): ExcelStylesModel {\n return {\n numberFormats: [],\n fonts: [],\n fills: [],\n borders: [],\n cellFormats: [],\n };\n}\n\nfunction parseNumberFormats(stylesDom: Document): {\n list: ExcelNumberFormatModel[];\n byId: Map<number, string>;\n} {\n const list: ExcelNumberFormatModel[] = [];\n const byId = new Map<number, string>();\n const numFmtEls = stylesDom.getElementsByTagNameNS(SS_NS, 'numFmt');\n for (let i = 0; i < numFmtEls.length; i++) {\n const el = numFmtEls[i];\n if (!el) continue;\n const id = parseOptionalNumber(el.getAttribute('numFmtId'));\n const code = el.getAttribute('formatCode');\n if (id === undefined || code === null) continue;\n list.push({ id, code });\n byId.set(id, code);\n }\n return { list, byId };\n}\n\nfunction parseFonts(stylesDom: Document, themeColors: ThemeColors): ExcelFontModel[] {\n const fontsEl = stylesDom.getElementsByTagNameNS(SS_NS, 'fonts')[0];\n if (!fontsEl) return [];\n return childElementsNs(fontsEl, SS_NS, 'font').map((fontEl) => {\n const font: ExcelFontModel = {};\n setIfDefined(font, 'name', parseValString(fontEl, 'name'));\n setIfDefined(font, 'size', parseValNumber(fontEl, 'sz'));\n setIfDefined(font, 'family', parseValNumber(fontEl, 'family'));\n setIfDefined(font, 'charset', parseValNumber(fontEl, 'charset'));\n setIfDefined(font, 'scheme', parseValString(fontEl, 'scheme'));\n setIfDefined(font, 'bold', firstChildNs(fontEl, SS_NS, 'b') ? true : undefined);\n setIfDefined(font, 'italic', firstChildNs(fontEl, SS_NS, 'i') ? true : undefined);\n setIfDefined(font, 'underline', firstChildNs(fontEl, SS_NS, 'u') ? true : undefined);\n setIfDefined(font, 'color', parseColor(firstChildNs(fontEl, SS_NS, 'color'), themeColors));\n return font;\n });\n}\n\nfunction parseFills(stylesDom: Document, themeColors: ThemeColors): ExcelFillModel[] {\n const fillsEl = stylesDom.getElementsByTagNameNS(SS_NS, 'fills')[0];\n if (!fillsEl) return [];\n return childElementsNs(fillsEl, SS_NS, 'fill').map((fillEl) => {\n const pattern = firstChildNs(fillEl, SS_NS, 'patternFill');\n const fill: ExcelFillModel = {};\n if (!pattern) return fill;\n setIfDefined(fill, 'patternType', pattern.getAttribute('patternType') ?? undefined);\n setIfDefined(\n fill,\n 'foregroundColor',\n parseColor(firstChildNs(pattern, SS_NS, 'fgColor'), themeColors),\n );\n setIfDefined(\n fill,\n 'backgroundColor',\n parseColor(firstChildNs(pattern, SS_NS, 'bgColor'), themeColors),\n );\n return fill;\n });\n}\n\nfunction parseBorderSide(\n borderEl: Element,\n name: string,\n themeColors: ThemeColors,\n): ExcelBorderSideModel | undefined {\n const sideEl = firstChildNs(borderEl, SS_NS, name);\n if (!sideEl) return undefined;\n const side: ExcelBorderSideModel = {};\n setIfDefined(side, 'style', sideEl.getAttribute('style') ?? undefined);\n setIfDefined(side, 'color', parseColor(firstChildNs(sideEl, SS_NS, 'color'), themeColors));\n return Object.keys(side).length ? side : undefined;\n}\n\nfunction parseBorders(stylesDom: Document, themeColors: ThemeColors): ExcelBorderModel[] {\n const bordersEl = stylesDom.getElementsByTagNameNS(SS_NS, 'borders')[0];\n if (!bordersEl) return [];\n return childElementsNs(bordersEl, SS_NS, 'border').map((borderEl) => {\n const border: ExcelBorderModel = {};\n setIfDefined(border, 'left', parseBorderSide(borderEl, 'left', themeColors));\n setIfDefined(border, 'right', parseBorderSide(borderEl, 'right', themeColors));\n setIfDefined(border, 'top', parseBorderSide(borderEl, 'top', themeColors));\n setIfDefined(border, 'bottom', parseBorderSide(borderEl, 'bottom', themeColors));\n setIfDefined(border, 'diagonal', parseBorderSide(borderEl, 'diagonal', themeColors));\n return border;\n });\n}\n\nfunction parseAlignment(xfEl: Element): ExcelAlignmentModel | undefined {\n const alignmentEl = firstChildNs(xfEl, SS_NS, 'alignment');\n if (!alignmentEl) return undefined;\n const alignment: ExcelAlignmentModel = {};\n setIfDefined(alignment, 'horizontal', alignmentEl.getAttribute('horizontal') ?? undefined);\n setIfDefined(alignment, 'vertical', alignmentEl.getAttribute('vertical') ?? undefined);\n setIfDefined(\n alignment,\n 'textRotation',\n parseOptionalNumber(alignmentEl.getAttribute('textRotation')),\n );\n setIfDefined(alignment, 'wrapText', parseBooleanAttr(alignmentEl.getAttribute('wrapText')));\n setIfDefined(alignment, 'shrinkToFit', parseBooleanAttr(alignmentEl.getAttribute('shrinkToFit')));\n setIfDefined(alignment, 'indent', parseOptionalNumber(alignmentEl.getAttribute('indent')));\n return Object.keys(alignment).length ? alignment : undefined;\n}\n\nfunction parseCellFormats(\n stylesDom: Document,\n numberFormatsById: Map<number, string>,\n): ExcelCellFormatModel[] {\n const cellXfsEl = stylesDom.getElementsByTagNameNS(SS_NS, 'cellXfs')[0];\n if (!cellXfsEl) return [];\n return childElementsNs(cellXfsEl, SS_NS, 'xf').map((xfEl) => {\n const numberFormatId = parseOptionalNumber(xfEl.getAttribute('numFmtId'));\n const format: ExcelCellFormatModel = {};\n setIfDefined(format, 'numberFormatId', numberFormatId);\n setIfDefined(\n format,\n 'numberFormatCode',\n numberFormatId === undefined\n ? undefined\n : (numberFormatsById.get(numberFormatId) ?? builtInNumberFormatCode(numberFormatId)),\n );\n setIfDefined(format, 'fontId', parseOptionalNumber(xfEl.getAttribute('fontId')));\n setIfDefined(format, 'fillId', parseOptionalNumber(xfEl.getAttribute('fillId')));\n setIfDefined(format, 'borderId', parseOptionalNumber(xfEl.getAttribute('borderId')));\n setIfDefined(format, 'xfId', parseOptionalNumber(xfEl.getAttribute('xfId')));\n setIfDefined(\n format,\n 'applyNumberFormat',\n parseBooleanAttr(xfEl.getAttribute('applyNumberFormat')),\n );\n setIfDefined(format, 'applyFont', parseBooleanAttr(xfEl.getAttribute('applyFont')));\n setIfDefined(format, 'applyFill', parseBooleanAttr(xfEl.getAttribute('applyFill')));\n setIfDefined(format, 'applyBorder', parseBooleanAttr(xfEl.getAttribute('applyBorder')));\n setIfDefined(format, 'applyAlignment', parseBooleanAttr(xfEl.getAttribute('applyAlignment')));\n setIfDefined(format, 'alignment', parseAlignment(xfEl));\n return format;\n });\n}\n\nfunction builtInNumberFormatCode(id: number): string | undefined {\n const builtIns: Record<number, string> = {\n 0: 'General',\n 1: '0',\n 2: '0.00',\n 3: '#,##0',\n 4: '#,##0.00',\n 9: '0%',\n 10: '0.00%',\n };\n return builtIns[id];\n}\n\nexport function parseStyles(pkg: Package): ExcelStylesModel {\n const part = getPart(pkg, 'xl/styles.xml');\n if (!part?.xmlDom) return emptyStyles();\n const numberFormats = parseNumberFormats(part.xmlDom);\n const themeColors = parseThemeColors(pkg);\n return {\n numberFormats: numberFormats.list,\n fonts: parseFonts(part.xmlDom, themeColors),\n fills: parseFills(part.xmlDom, themeColors),\n borders: parseBorders(part.xmlDom, themeColors),\n cellFormats: parseCellFormats(part.xmlDom, numberFormats.byId),\n };\n}\n","import type { Package, Part } from '../pack/index.js';\nimport { getPart } from '../pack/index.js';\nimport type { ExcelDefinedNameModel } from './model.js';\nimport { OFFICE_REL_NS, REL_NS, SS_NS } from './namespaces.js';\n\ninterface Relationship {\n id: string;\n type: string;\n target: string;\n targetMode?: string;\n}\n\nexport interface WorkbookSheetRef {\n id: string;\n name: string;\n visibility?: string;\n relationshipId?: string;\n path?: string;\n}\n\nfunction requireXmlPart(pkg: Package, path: string): Part {\n const part = getPart(pkg, path);\n if (!part?.xmlDom) {\n throw new Error(`ExcelWorkbook: missing XML part ${path}`);\n }\n return part;\n}\n\nfunction optionalXmlPart(pkg: Package, path: string): Part | undefined {\n const part = getPart(pkg, path);\n return part?.xmlDom ? part : undefined;\n}\n\nfunction textOf(el: Element | null | undefined): string {\n if (!el) return '';\n return el.textContent ?? '';\n}\n\nfunction firstChildNs(parent: Element, ns: string, localName: string): Element | null {\n return parent.getElementsByTagNameNS(ns, localName)[0] ?? null;\n}\n\nfunction childElementsNs(parent: Element, ns: string, localName: string): Element[] {\n const elements = parent.getElementsByTagNameNS(ns, localName);\n return Array.from(elements).filter((el) => el.parentElement === parent);\n}\n\nfunction parseRelationships(part?: Part): Map<string, Relationship> {\n const rels = new Map<string, Relationship>();\n if (!part?.xmlDom) return rels;\n const relEls = part.xmlDom.getElementsByTagNameNS(REL_NS, 'Relationship');\n for (let i = 0; i < relEls.length; i++) {\n const rel = relEls[i];\n if (!rel) continue;\n const id = rel.getAttribute('Id');\n const type = rel.getAttribute('Type');\n const target = rel.getAttribute('Target');\n if (!id || !type || !target) continue;\n const model: Relationship = { id, type, target };\n const targetMode = rel.getAttribute('TargetMode');\n if (targetMode) model.targetMode = targetMode;\n rels.set(id, model);\n }\n return rels;\n}\n\nfunction dirname(path: string): string {\n const index = path.lastIndexOf('/');\n return index === -1 ? '' : path.slice(0, index);\n}\n\nfunction normalizePath(path: string): string {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (!part || part === '.') continue;\n if (part === '..') {\n parts.pop();\n continue;\n }\n parts.push(part);\n }\n return parts.join('/');\n}\n\nfunction resolveRelationshipTarget(sourcePartPath: string, target: string): string {\n if (target.startsWith('/')) return normalizePath(target.slice(1));\n return normalizePath(`${dirname(sourcePartPath)}/${target}`);\n}\n\nexport function parseWorkbookSheets(pkg: Package): WorkbookSheetRef[] {\n const workbook = requireXmlPart(pkg, 'xl/workbook.xml');\n const rels = parseRelationships(optionalXmlPart(pkg, 'xl/_rels/workbook.xml.rels'));\n const sheetsEl = firstChildNs(workbook.xmlDom!.documentElement, SS_NS, 'sheets');\n if (!sheetsEl) return [];\n\n return childElementsNs(sheetsEl, SS_NS, 'sheet').map((sheetEl, index) => {\n const relationshipId = sheetEl.getAttributeNS(OFFICE_REL_NS, 'id') ?? undefined;\n const rel = relationshipId ? rels.get(relationshipId) : undefined;\n const path = rel ? resolveRelationshipTarget('xl/workbook.xml', rel.target) : undefined;\n const name = sheetEl.getAttribute('name') ?? `Sheet${index + 1}`;\n const id = sheetEl.getAttribute('sheetId') ?? String(index + 1);\n const visibility = sheetEl.getAttribute('state') ?? undefined;\n return { id, name, visibility, relationshipId, path };\n });\n}\n\nexport function parseDefinedNames(pkg: Package): ExcelDefinedNameModel[] {\n const workbookPart = requireXmlPart(pkg, 'xl/workbook.xml');\n const definedNameEls = workbookPart.xmlDom!.getElementsByTagNameNS(SS_NS, 'definedName');\n const result: ExcelDefinedNameModel[] = [];\n for (let i = 0; i < definedNameEls.length; i++) {\n const el = definedNameEls[i];\n if (!el) continue;\n const name = el.getAttribute('name');\n if (!name) continue;\n const model: ExcelDefinedNameModel = {\n name,\n text: textOf(el),\n };\n const localSheetId = el.getAttribute('localSheetId');\n if (localSheetId !== null && localSheetId !== '') {\n const value = Number(localSheetId);\n if (Number.isFinite(value)) model.localSheetId = value;\n }\n result.push(model);\n }\n return result;\n}\n\nexport function parseSharedStrings(pkg: Package): string[] {\n const part = optionalXmlPart(pkg, 'xl/sharedStrings.xml');\n if (!part?.xmlDom) return [];\n const strings: string[] = [];\n const siEls = part.xmlDom.getElementsByTagNameNS(SS_NS, 'si');\n for (let i = 0; i < siEls.length; i++) {\n const si = siEls[i];\n if (!si) continue;\n const tEls = si.getElementsByTagNameNS(SS_NS, 't');\n let text = '';\n for (let j = 0; j < tEls.length; j++) {\n text += textOf(tEls[j]);\n }\n strings.push(text);\n }\n return strings;\n}\n","import type { Package, Part } from '../pack/index.js';\nimport { getPart } from '../pack/index.js';\nimport { OFFICE_REL_NS, REL_NS, SS_NS } from './namespaces.js';\nimport type {\n ExcelCellKind,\n ExcelCellModel,\n ExcelCommentModel,\n ExcelConditionalFormatModel,\n ExcelConditionalFormatRuleModel,\n ExcelDataValidationModel,\n ExcelChartModel,\n ExcelDrawingAnchorModel,\n ExcelDrawingMarkerModel,\n ExcelDrawingModel,\n ExcelDrawingObjectModel,\n ExcelImageModel,\n ExcelColumnModel,\n ExcelHyperlinkModel,\n ExcelMergedRangeModel,\n ExcelRowModel,\n ExcelSheetModel,\n ExcelSheetViewModel,\n ExcelPaneModel,\n ExcelSelectionModel,\n ExcelTableColumnModel,\n ExcelTableAutoFilterModel,\n ExcelTableFilterColumnModel,\n ExcelTableSortConditionModel,\n ExcelTableSortStateModel,\n ExcelTableModel,\n ExcelTableStyleModel,\n ExcelThreadedCommentModel,\n ExcelWorkbookModel,\n} from './model.js';\nimport { parseCellAddress } from './address.js';\nimport { parseStyles } from './styles-reader.js';\nimport type { WorkbookSheetRef } from './workbook-reader.js';\nimport { parseDefinedNames, parseSharedStrings, parseWorkbookSheets } from './workbook-reader.js';\n\ninterface Relationship {\n id: string;\n type: string;\n target: string;\n targetMode?: string;\n}\n\nfunction requireXmlPart(pkg: Package, path: string): Part {\n const part = getPart(pkg, path);\n if (!part?.xmlDom) {\n throw new Error(`ExcelWorkbook: missing XML part ${path}`);\n }\n return part;\n}\n\nfunction optionalXmlPart(pkg: Package, path: string): Part | undefined {\n const part = getPart(pkg, path);\n return part?.xmlDom ? part : undefined;\n}\n\nfunction textOf(el: Element | null | undefined): string {\n if (!el) return '';\n return el.textContent ?? '';\n}\n\nfunction firstChildNs(parent: Element, ns: string, localName: string): Element | null {\n return parent.getElementsByTagNameNS(ns, localName)[0] ?? null;\n}\n\nfunction childElementsNs(parent: Element, ns: string, localName: string): Element[] {\n const result: Element[] = [];\n for (let i = 0; i < parent.childNodes.length; i++) {\n const child = parent.childNodes[i];\n if (child?.nodeType !== 1) continue;\n const el = child as Element;\n if (el.namespaceURI === ns && el.localName === localName) {\n result.push(el);\n }\n }\n return result;\n}\n\nfunction parseRelationships(part?: Part): Map<string, Relationship> {\n const result = new Map<string, Relationship>();\n if (!part?.xmlDom) return result;\n\n const rels = part.xmlDom.getElementsByTagNameNS(REL_NS, 'Relationship');\n for (let i = 0; i < rels.length; i++) {\n const rel = rels[i];\n if (!rel) continue;\n const id = rel.getAttribute('Id');\n const type = rel.getAttribute('Type');\n const target = rel.getAttribute('Target');\n if (!id || !type || !target) continue;\n result.set(id, {\n id,\n type,\n target,\n targetMode: rel.getAttribute('TargetMode') ?? undefined,\n });\n }\n return result;\n}\n\nfunction dirname(path: string): string {\n const idx = path.lastIndexOf('/');\n return idx === -1 ? '' : path.slice(0, idx);\n}\n\nfunction normalizePath(path: string): string {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (!part || part === '.') continue;\n if (part === '..') parts.pop();\n else parts.push(part);\n }\n return parts.join('/');\n}\n\nfunction resolveRelationshipTarget(sourcePartPath: string, target: string): string {\n if (target.startsWith('/')) return normalizePath(target.slice(1));\n const base = dirname(sourcePartPath);\n return normalizePath(base ? `${base}/${target}` : target);\n}\n\nfunction parseNumber(raw: string | undefined): number | null {\n if (raw === undefined || raw === '') return null;\n const value = Number(raw);\n return Number.isFinite(value) ? value : null;\n}\n\nfunction parseOptionalNumber(raw: string | null): number | undefined {\n if (raw === null || raw === '') return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction parseBooleanAttr(raw: string | null): boolean | undefined {\n if (raw === null) return undefined;\n return raw === '1' || raw === 'true';\n}\n\nfunction setIfDefined<T extends object, K extends keyof T>(target: T, key: K, value: T[K] | undefined): void {\n if (value !== undefined) target[key] = value;\n}\n\nfunction parseCell(cell: Element, sharedStrings: string[]): ExcelCellModel | null {\n const address = cell.getAttribute('r');\n if (!address) return null;\n const { row, column } = parseCellAddress(address);\n const dataType = cell.getAttribute('t') ?? undefined;\n const styleIdRaw = cell.getAttribute('s');\n const formula = textOf(firstChildNs(cell, SS_NS, 'f')) || undefined;\n const rawValue = textOf(firstChildNs(cell, SS_NS, 'v')) || undefined;\n let kind: ExcelCellKind = formula ? 'formula' : 'blank';\n let value: string | number | boolean | null = null;\n let sharedStringIndex: number | undefined;\n\n if (dataType === 's') {\n sharedStringIndex = rawValue === undefined ? undefined : Number(rawValue);\n value =\n sharedStringIndex === undefined || !Number.isInteger(sharedStringIndex)\n ? null\n : (sharedStrings[sharedStringIndex] ?? null);\n kind = formula ? 'formula' : 'string';\n } else if (dataType === 'inlineStr') {\n const inline = firstChildNs(cell, SS_NS, 'is');\n const tEls = inline?.getElementsByTagNameNS(SS_NS, 't') ?? [];\n let text = '';\n for (let i = 0; i < tEls.length; i++) text += textOf(tEls[i]);\n value = text;\n kind = formula ? 'formula' : 'string';\n } else if (dataType === 'b') {\n value = rawValue === '1';\n kind = formula ? 'formula' : 'boolean';\n } else if (dataType === 'str') {\n value = rawValue ?? null;\n kind = formula ? 'formula' : 'string';\n } else if (dataType === 'e') {\n value = rawValue ?? null;\n kind = 'error';\n } else if (rawValue !== undefined) {\n value = parseNumber(rawValue);\n kind = formula ? 'formula' : 'number';\n }\n\n return {\n address,\n row,\n column,\n kind,\n value,\n rawValue,\n formula,\n dataType,\n styleId: styleIdRaw === null ? undefined : Number(styleIdRaw),\n sharedStringIndex,\n };\n}\n\nfunction parseColumns(sheetDom: Document): ExcelColumnModel[] {\n const colEls = sheetDom.getElementsByTagNameNS(SS_NS, 'col');\n const columns: ExcelColumnModel[] = [];\n for (let i = 0; i < colEls.length; i++) {\n const col = colEls[i];\n if (!col) continue;\n const min = parseOptionalNumber(col.getAttribute('min'));\n const max = parseOptionalNumber(col.getAttribute('max'));\n if (min === undefined || max === undefined) continue;\n const column: ExcelColumnModel = { min, max };\n setIfDefined(column, 'width', parseOptionalNumber(col.getAttribute('width')));\n setIfDefined(column, 'hidden', parseBooleanAttr(col.getAttribute('hidden')));\n setIfDefined(column, 'styleId', parseOptionalNumber(col.getAttribute('style')));\n setIfDefined(column, 'customWidth', parseBooleanAttr(col.getAttribute('customWidth')));\n columns.push(column);\n }\n return columns;\n}\n\nfunction parseRows(sheetDom: Document): ExcelRowModel[] {\n const rowEls = sheetDom.getElementsByTagNameNS(SS_NS, 'row');\n const rows: ExcelRowModel[] = [];\n for (let i = 0; i < rowEls.length; i++) {\n const row = rowEls[i];\n if (!row) continue;\n const index = parseOptionalNumber(row.getAttribute('r'));\n if (index === undefined) continue;\n const rowModel: ExcelRowModel = { index };\n setIfDefined(rowModel, 'height', parseOptionalNumber(row.getAttribute('ht')));\n setIfDefined(rowModel, 'hidden', parseBooleanAttr(row.getAttribute('hidden')));\n setIfDefined(rowModel, 'styleId', parseOptionalNumber(row.getAttribute('s')));\n setIfDefined(rowModel, 'customHeight', parseBooleanAttr(row.getAttribute('customHeight')));\n rows.push(rowModel);\n }\n return rows;\n}\n\nfunction parseMergedRanges(sheetDom: Document): ExcelMergedRangeModel[] {\n const mergeCellEls = sheetDom.getElementsByTagNameNS(SS_NS, 'mergeCell');\n const mergedRanges: ExcelMergedRangeModel[] = [];\n for (let i = 0; i < mergeCellEls.length; i++) {\n const ref = mergeCellEls[i]?.getAttribute('ref');\n if (ref) mergedRanges.push({ address: ref });\n }\n return mergedRanges;\n}\n\nfunction sheetRelationshipPartPath(sheetPath: string): string {\n return `${dirname(sheetPath)}/_rels/${sheetPath.slice(sheetPath.lastIndexOf('/') + 1)}.rels`;\n}\n\nfunction parseHyperlinks(pkg: Package, sheetPath: string, sheetDom: Document): ExcelHyperlinkModel[] {\n const rels = parseRelationships(optionalXmlPart(pkg, sheetRelationshipPartPath(sheetPath)));\n const hyperlinkEls = sheetDom.getElementsByTagNameNS(SS_NS, 'hyperlink');\n const hyperlinks: ExcelHyperlinkModel[] = [];\n for (let i = 0; i < hyperlinkEls.length; i++) {\n const hyperlink = hyperlinkEls[i];\n if (!hyperlink) continue;\n const ref = hyperlink.getAttribute('ref');\n if (!ref) continue;\n const relationshipId = hyperlink.getAttributeNS(OFFICE_REL_NS, 'id') ?? undefined;\n const rel = relationshipId ? rels.get(relationshipId) : undefined;\n const model: ExcelHyperlinkModel = { ref };\n setIfDefined(model, 'relationshipId', relationshipId);\n setIfDefined(\n model,\n 'target',\n rel ? (rel.targetMode === 'External' ? rel.target : resolveRelationshipTarget(sheetPath, rel.target)) : undefined,\n );\n setIfDefined(model, 'targetMode', rel?.targetMode);\n setIfDefined(model, 'location', hyperlink.getAttribute('location') ?? undefined);\n setIfDefined(model, 'display', hyperlink.getAttribute('display') ?? undefined);\n setIfDefined(model, 'tooltip', hyperlink.getAttribute('tooltip') ?? undefined);\n hyperlinks.push(model);\n }\n return hyperlinks;\n}\n\nfunction parseTableColumns(tableDom: Document): ExcelTableColumnModel[] {\n const tableColumnEls = tableDom.getElementsByTagNameNS(SS_NS, 'tableColumn');\n const columns: ExcelTableColumnModel[] = [];\n for (let i = 0; i < tableColumnEls.length; i++) {\n const el = tableColumnEls[i];\n if (!el) continue;\n const id = parseOptionalNumber(el.getAttribute('id'));\n const name = el.getAttribute('name');\n if (id === undefined || name === null) continue;\n const column: ExcelTableColumnModel = { id, name };\n setIfDefined(column, 'totalsRowLabel', el.getAttribute('totalsRowLabel') ?? undefined);\n setIfDefined(column, 'totalsRowFunction', el.getAttribute('totalsRowFunction') ?? undefined);\n columns.push(column);\n }\n return columns;\n}\n\nfunction parseTableStyle(tableDom: Document): ExcelTableStyleModel | undefined {\n const styleEl = tableDom.getElementsByTagNameNS(SS_NS, 'tableStyleInfo')[0];\n if (!styleEl) return undefined;\n const style: ExcelTableStyleModel = {};\n setIfDefined(style, 'name', styleEl.getAttribute('name') ?? undefined);\n setIfDefined(style, 'showFirstColumn', parseBooleanAttr(styleEl.getAttribute('showFirstColumn')));\n setIfDefined(style, 'showLastColumn', parseBooleanAttr(styleEl.getAttribute('showLastColumn')));\n setIfDefined(style, 'showRowStripes', parseBooleanAttr(styleEl.getAttribute('showRowStripes')));\n setIfDefined(style, 'showColumnStripes', parseBooleanAttr(styleEl.getAttribute('showColumnStripes')));\n return Object.keys(style).length ? style : undefined;\n}\n\nfunction parseTableAutoFilter(tableDom: Document): ExcelTableAutoFilterModel | undefined {\n const tableEl = tableDom.getElementsByTagNameNS(SS_NS, 'table')[0];\n const autoFilterEl = tableEl ? firstChildNs(tableEl, SS_NS, 'autoFilter') : null;\n if (!autoFilterEl) return undefined;\n const model: ExcelTableAutoFilterModel = {\n ref: autoFilterEl.getAttribute('ref') ?? undefined,\n filterColumns: parseFilterColumns(autoFilterEl),\n };\n setIfDefined(model, 'sortState', parseSortState(autoFilterEl));\n if (!model.filterColumns.length && !model.sortState) return undefined;\n return model;\n}\n\nfunction parseFilterColumns(autoFilterEl: Element): ExcelTableFilterColumnModel[] {\n return childElementsNs(autoFilterEl, SS_NS, 'filterColumn').flatMap((filterColumnEl) => {\n const colId = parseOptionalNumber(filterColumnEl.getAttribute('colId'));\n if (colId === undefined) return [];\n const filterColumn: ExcelTableFilterColumnModel = { colId };\n setIfDefined(filterColumn, 'hiddenButton', parseBooleanAttr(filterColumnEl.getAttribute('hiddenButton')));\n setIfDefined(filterColumn, 'showButton', parseBooleanAttr(filterColumnEl.getAttribute('showButton')));\n const filtersEl = firstChildNs(filterColumnEl, SS_NS, 'filters');\n const filters = filtersEl\n ? childElementsNs(filtersEl, SS_NS, 'filter')\n .map((filterEl) => filterEl.getAttribute('val') ?? undefined)\n .filter((value): value is string => value !== undefined)\n : [];\n if (filters.length) filterColumn.filters = filters;\n return [filterColumn];\n });\n}\n\nfunction parseSortState(autoFilterEl: Element): ExcelTableSortStateModel | undefined {\n const sortStateEl = firstChildNs(autoFilterEl, SS_NS, 'sortState');\n if (!sortStateEl) return undefined;\n const state: ExcelTableSortStateModel = { conditions: [] };\n setIfDefined(state, 'ref', sortStateEl.getAttribute('ref') ?? undefined);\n setIfDefined(state, 'caseSensitive', parseBooleanAttr(sortStateEl.getAttribute('caseSensitive')));\n setIfDefined(state, 'sortMethod', sortStateEl.getAttribute('sortMethod') ?? undefined);\n state.conditions = childElementsNs(sortStateEl, SS_NS, 'sortCondition').map((conditionEl) => {\n const condition: ExcelTableSortConditionModel = {};\n setIfDefined(condition, 'ref', conditionEl.getAttribute('ref') ?? undefined);\n setIfDefined(condition, 'descending', parseBooleanAttr(conditionEl.getAttribute('descending')));\n setIfDefined(condition, 'sortBy', conditionEl.getAttribute('sortBy') ?? undefined);\n return condition;\n });\n return state;\n}\n\nfunction parseTablePart(pkg: Package, relationshipId: string, path: string): ExcelTableModel {\n const part = optionalXmlPart(pkg, path);\n if (!part?.xmlDom) {\n return { relationshipId, path, columns: [] };\n }\n\n const tableEl = part.xmlDom.getElementsByTagNameNS(SS_NS, 'table')[0];\n if (!tableEl) {\n return { relationshipId, path, columns: [] };\n }\n\n const table: ExcelTableModel = {\n relationshipId,\n path,\n columns: parseTableColumns(part.xmlDom),\n };\n setIfDefined(table, 'id', parseOptionalNumber(tableEl.getAttribute('id')));\n setIfDefined(table, 'name', tableEl.getAttribute('name') ?? undefined);\n setIfDefined(table, 'displayName', tableEl.getAttribute('displayName') ?? undefined);\n setIfDefined(table, 'ref', tableEl.getAttribute('ref') ?? undefined);\n setIfDefined(table, 'headerRowCount', parseOptionalNumber(tableEl.getAttribute('headerRowCount')));\n setIfDefined(table, 'totalsRowCount', parseOptionalNumber(tableEl.getAttribute('totalsRowCount')));\n setIfDefined(table, 'totalsRowShown', parseBooleanAttr(tableEl.getAttribute('totalsRowShown')));\n const autoFilterEl = firstChildNs(tableEl, SS_NS, 'autoFilter');\n const autoFilter = parseTableAutoFilter(part.xmlDom);\n setIfDefined(table, 'autoFilterRef', autoFilterEl?.getAttribute('ref') ?? undefined);\n setIfDefined(table, 'autoFilter', autoFilter);\n setIfDefined(table, 'style', parseTableStyle(part.xmlDom));\n return table;\n}\n\nfunction parseTables(pkg: Package, sheetPath: string, sheetDom: Document): ExcelTableModel[] {\n const rels = parseRelationships(optionalXmlPart(pkg, sheetRelationshipPartPath(sheetPath)));\n const tablePartEls = sheetDom.getElementsByTagNameNS(SS_NS, 'tablePart');\n const tables: ExcelTableModel[] = [];\n for (let i = 0; i < tablePartEls.length; i++) {\n const relationshipId = tablePartEls[i]?.getAttributeNS(OFFICE_REL_NS, 'id') ?? undefined;\n if (!relationshipId) continue;\n const rel = rels.get(relationshipId);\n if (!rel) {\n tables.push({ relationshipId, columns: [] });\n continue;\n }\n tables.push(parseTablePart(pkg, relationshipId, resolveRelationshipTarget(sheetPath, rel.target)));\n }\n return tables;\n}\n\nfunction parseDataValidations(sheetDom: Document): ExcelDataValidationModel[] {\n const validationEls = sheetDom.getElementsByTagNameNS(SS_NS, 'dataValidation');\n const validations: ExcelDataValidationModel[] = [];\n for (let i = 0; i < validationEls.length; i++) {\n const el = validationEls[i];\n if (!el) continue;\n const validation: ExcelDataValidationModel = {};\n setIfDefined(validation, 'sqref', el.getAttribute('sqref') ?? undefined);\n setIfDefined(validation, 'type', el.getAttribute('type') ?? undefined);\n setIfDefined(validation, 'operator', el.getAttribute('operator') ?? undefined);\n setIfDefined(validation, 'allowBlank', parseBooleanAttr(el.getAttribute('allowBlank')));\n setIfDefined(validation, 'showDropDown', parseBooleanAttr(el.getAttribute('showDropDown')));\n setIfDefined(validation, 'showInputMessage', parseBooleanAttr(el.getAttribute('showInputMessage')));\n setIfDefined(validation, 'showErrorMessage', parseBooleanAttr(el.getAttribute('showErrorMessage')));\n setIfDefined(validation, 'errorStyle', el.getAttribute('errorStyle') ?? undefined);\n setIfDefined(validation, 'errorTitle', el.getAttribute('errorTitle') ?? undefined);\n setIfDefined(validation, 'error', el.getAttribute('error') ?? undefined);\n setIfDefined(validation, 'promptTitle', el.getAttribute('promptTitle') ?? undefined);\n setIfDefined(validation, 'prompt', el.getAttribute('prompt') ?? undefined);\n setIfDefined(validation, 'formula1', textOf(firstChildNs(el, SS_NS, 'formula1')) || undefined);\n setIfDefined(validation, 'formula2', textOf(firstChildNs(el, SS_NS, 'formula2')) || undefined);\n validations.push(validation);\n }\n return validations;\n}\n\nfunction parseConditionalFormatRule(ruleEl: Element): ExcelConditionalFormatRuleModel {\n const rule: ExcelConditionalFormatRuleModel = { formulas: [] };\n setIfDefined(rule, 'type', ruleEl.getAttribute('type') ?? undefined);\n setIfDefined(rule, 'priority', parseOptionalNumber(ruleEl.getAttribute('priority')));\n setIfDefined(rule, 'operator', ruleEl.getAttribute('operator') ?? undefined);\n setIfDefined(rule, 'dxfId', parseOptionalNumber(ruleEl.getAttribute('dxfId')));\n setIfDefined(rule, 'stopIfTrue', parseBooleanAttr(ruleEl.getAttribute('stopIfTrue')));\n setIfDefined(rule, 'aboveAverage', parseBooleanAttr(ruleEl.getAttribute('aboveAverage')));\n setIfDefined(rule, 'percent', parseBooleanAttr(ruleEl.getAttribute('percent')));\n setIfDefined(rule, 'bottom', parseBooleanAttr(ruleEl.getAttribute('bottom')));\n setIfDefined(rule, 'rank', parseOptionalNumber(ruleEl.getAttribute('rank')));\n setIfDefined(rule, 'text', ruleEl.getAttribute('text') ?? undefined);\n setIfDefined(rule, 'timePeriod', ruleEl.getAttribute('timePeriod') ?? undefined);\n const formulaEls = childElementsNs(ruleEl, SS_NS, 'formula');\n rule.formulas = formulaEls.map((formula) => textOf(formula));\n return rule;\n}\n\nfunction parseConditionalFormats(sheetDom: Document): ExcelConditionalFormatModel[] {\n const conditionalFormattingEls = sheetDom.getElementsByTagNameNS(SS_NS, 'conditionalFormatting');\n const conditionalFormats: ExcelConditionalFormatModel[] = [];\n for (let i = 0; i < conditionalFormattingEls.length; i++) {\n const el = conditionalFormattingEls[i];\n if (!el) continue;\n const format: ExcelConditionalFormatModel = {\n rules: childElementsNs(el, SS_NS, 'cfRule').map((rule) => parseConditionalFormatRule(rule)),\n };\n setIfDefined(format, 'sqref', el.getAttribute('sqref') ?? undefined);\n conditionalFormats.push(format);\n }\n return conditionalFormats;\n}\n\nfunction relationshipTargetsByType(pkg: Package, sheetPath: string, typeSuffix: string): Array<{ id: string; path: string }> {\n const rels = parseRelationships(optionalXmlPart(pkg, sheetRelationshipPartPath(sheetPath)));\n const targets: Array<{ id: string; path: string }> = [];\n for (const rel of rels.values()) {\n if (rel.type.endsWith(typeSuffix)) {\n targets.push({ id: rel.id, path: resolveRelationshipTarget(sheetPath, rel.target) });\n }\n }\n return targets;\n}\n\nfunction parseComments(pkg: Package, sheetPath: string): ExcelCommentModel[] {\n const targets = relationshipTargetsByType(pkg, sheetPath, '/comments');\n const comments: ExcelCommentModel[] = [];\n for (const target of targets) {\n const part = optionalXmlPart(pkg, target.path);\n if (!part?.xmlDom) continue;\n const authors = Array.from(part.xmlDom.getElementsByTagNameNS(SS_NS, 'author')).map((author) => textOf(author));\n const commentEls = part.xmlDom.getElementsByTagNameNS(SS_NS, 'comment');\n for (let i = 0; i < commentEls.length; i++) {\n const el = commentEls[i];\n if (!el) continue;\n const ref = el.getAttribute('ref');\n if (!ref) continue;\n const authorId = parseOptionalNumber(el.getAttribute('authorId'));\n const comment: ExcelCommentModel = {\n ref,\n text: textOf(firstChildNs(el, SS_NS, 'text')),\n };\n setIfDefined(comment, 'authorId', authorId);\n setIfDefined(comment, 'author', authorId === undefined ? undefined : authors[authorId]);\n setIfDefined(comment, 'shapeId', parseOptionalNumber(el.getAttribute('shapeId')));\n comments.push(comment);\n }\n }\n return comments;\n}\n\nfunction parseThreadedComments(pkg: Package, sheetPath: string): ExcelThreadedCommentModel[] {\n const targets = relationshipTargetsByType(pkg, sheetPath, '/threadedComment');\n const comments: ExcelThreadedCommentModel[] = [];\n for (const target of targets) {\n const part = optionalXmlPart(pkg, target.path);\n if (!part?.xmlDom) continue;\n const commentEls = part.xmlDom.getElementsByTagNameNS('*', 'threadedComment');\n for (let i = 0; i < commentEls.length; i++) {\n const el = commentEls[i];\n if (!el) continue;\n const ref = el.getAttribute('ref');\n if (!ref) continue;\n const comment: ExcelThreadedCommentModel = {\n ref,\n text: textOf(firstChildNs(el, el.namespaceURI ?? '', 'text')) || textOf(el.getElementsByTagNameNS('*', 'text')[0]),\n };\n setIfDefined(comment, 'id', el.getAttribute('id') ?? undefined);\n setIfDefined(comment, 'personId', el.getAttribute('personId') ?? undefined);\n setIfDefined(comment, 'dateTime', el.getAttribute('dT') ?? undefined);\n comments.push(comment);\n }\n }\n return comments;\n}\n\nfunction firstDescendantLocal(parent: Element, localName: string): Element | null {\n return parent.getElementsByTagNameNS('*', localName)[0] ?? null;\n}\n\nfunction descendantsLocal(parent: Element | Document, localName: string): Element[] {\n return Array.from(parent.getElementsByTagNameNS('*', localName));\n}\n\nfunction parseDrawingMarker(parent: Element, localName: string): ExcelDrawingMarkerModel | undefined {\n const markerEl = firstDescendantLocal(parent, localName);\n if (!markerEl) return undefined;\n const marker: ExcelDrawingMarkerModel = {};\n setIfDefined(marker, 'column', parseOptionalNumber(firstDescendantLocal(markerEl, 'col')?.textContent ?? null));\n setIfDefined(marker, 'columnOffset', parseOptionalNumber(firstDescendantLocal(markerEl, 'colOff')?.textContent ?? null));\n setIfDefined(marker, 'row', parseOptionalNumber(firstDescendantLocal(markerEl, 'row')?.textContent ?? null));\n setIfDefined(marker, 'rowOffset', parseOptionalNumber(firstDescendantLocal(markerEl, 'rowOff')?.textContent ?? null));\n return Object.keys(marker).length ? marker : undefined;\n}\n\nfunction drawingObjectName(parent: Element): string | undefined {\n return firstDescendantLocal(parent, 'cNvPr')?.getAttribute('name') ?? undefined;\n}\n\nfunction parseDrawingObject(anchorEl: Element, rels: Map<string, Relationship>, drawingPath: string): ExcelDrawingObjectModel | undefined {\n const chartEl = firstDescendantLocal(anchorEl, 'chart');\n if (chartEl) {\n const relationshipId = chartEl.getAttributeNS(OFFICE_REL_NS, 'id') ?? undefined;\n const rel = relationshipId ? rels.get(relationshipId) : undefined;\n return {\n kind: 'chart',\n name: drawingObjectName(anchorEl),\n relationshipId,\n targetPath: rel ? resolveRelationshipTarget(drawingPath, rel.target) : undefined,\n targetMode: rel?.targetMode,\n };\n }\n\n const blipEl = firstDescendantLocal(anchorEl, 'blip');\n if (blipEl) {\n const relationshipId =\n blipEl.getAttributeNS(OFFICE_REL_NS, 'embed') ?? blipEl.getAttributeNS(OFFICE_REL_NS, 'link') ?? undefined;\n const rel = relationshipId ? rels.get(relationshipId) : undefined;\n return {\n kind: 'image',\n name: drawingObjectName(anchorEl),\n relationshipId,\n targetPath: rel ? resolveRelationshipTarget(drawingPath, rel.target) : undefined,\n targetMode: rel?.targetMode,\n };\n }\n\n if (firstDescendantLocal(anchorEl, 'sp')) {\n return { kind: 'shape', name: drawingObjectName(anchorEl) };\n }\n if (firstDescendantLocal(anchorEl, 'graphicFrame')) {\n return { kind: 'graphicFrame', name: drawingObjectName(anchorEl) };\n }\n return undefined;\n}\n\nfunction parseDrawingAnchors(drawingDom: Document, rels: Map<string, Relationship>, drawingPath: string): ExcelDrawingAnchorModel[] {\n const anchors: ExcelDrawingAnchorModel[] = [];\n const specs = [\n ['twoCellAnchor', 'twoCell'],\n ['oneCellAnchor', 'oneCell'],\n ['absoluteAnchor', 'absolute'],\n ] as const;\n\n for (const [localName, kind] of specs) {\n for (const anchorEl of descendantsLocal(drawingDom, localName)) {\n const anchor: ExcelDrawingAnchorModel = { kind };\n setIfDefined(anchor, 'from', parseDrawingMarker(anchorEl, 'from'));\n setIfDefined(anchor, 'to', parseDrawingMarker(anchorEl, 'to'));\n setIfDefined(anchor, 'object', parseDrawingObject(anchorEl, rels, drawingPath));\n anchors.push(anchor);\n }\n }\n return anchors;\n}\n\nfunction drawingRelationshipPartPath(drawingPath: string): string {\n return `${dirname(drawingPath)}/_rels/${drawingPath.slice(drawingPath.lastIndexOf('/') + 1)}.rels`;\n}\n\nfunction chartTitle(chartDom: Document): string | undefined {\n const titleEl = descendantsLocal(chartDom, 'title')[0];\n if (!titleEl) return undefined;\n const text = descendantsLocal(titleEl, 't').map((el) => textOf(el)).join('');\n return text || undefined;\n}\n\nfunction parseChartPart(pkg: Package, relationshipId: string | undefined, drawingPath: string, path: string): ExcelChartModel {\n const part = optionalXmlPart(pkg, path);\n const chart: ExcelChartModel = { relationshipId, drawingPath, path, formulaRefs: [] };\n if (!part?.xmlDom) return chart;\n setIfDefined(chart, 'title', chartTitle(part.xmlDom));\n chart.formulaRefs = descendantsLocal(part.xmlDom, 'f').map((el) => textOf(el)).filter(Boolean);\n return chart;\n}\n\nfunction parseDrawings(pkg: Package, sheetPath: string, sheetDom: Document): {\n drawings: ExcelDrawingModel[];\n charts: ExcelChartModel[];\n images: ExcelImageModel[];\n} {\n const sheetRels = parseRelationships(optionalXmlPart(pkg, sheetRelationshipPartPath(sheetPath)));\n const drawings: ExcelDrawingModel[] = [];\n const charts: ExcelChartModel[] = [];\n const images: ExcelImageModel[] = [];\n\n for (const drawingEl of descendantsLocal(sheetDom, 'drawing')) {\n const relationshipId = drawingEl.getAttributeNS(OFFICE_REL_NS, 'id') ?? undefined;\n if (!relationshipId) continue;\n const sheetRel = sheetRels.get(relationshipId);\n const drawingPath = sheetRel ? resolveRelationshipTarget(sheetPath, sheetRel.target) : undefined;\n if (!drawingPath) {\n drawings.push({ relationshipId, anchors: [] });\n continue;\n }\n\n const drawingPart = optionalXmlPart(pkg, drawingPath);\n const drawingRels = parseRelationships(optionalXmlPart(pkg, drawingRelationshipPartPath(drawingPath)));\n const anchors = drawingPart?.xmlDom ? parseDrawingAnchors(drawingPart.xmlDom, drawingRels, drawingPath) : [];\n drawings.push({ relationshipId, path: drawingPath, anchors });\n\n for (const anchor of anchors) {\n if (anchor.object?.kind === 'chart' && anchor.object.targetPath) {\n charts.push(parseChartPart(pkg, anchor.object.relationshipId, drawingPath, anchor.object.targetPath));\n } else if (anchor.object?.kind === 'image' && anchor.object.targetPath) {\n images.push({\n relationshipId: anchor.object.relationshipId,\n drawingPath,\n path: anchor.object.targetPath,\n targetMode: anchor.object.targetMode,\n name: anchor.object.name,\n });\n }\n }\n }\n\n return { drawings, charts, images };\n}\n\nfunction parsePane(sheetViewEl: Element): ExcelPaneModel | undefined {\n const paneEl = firstChildNs(sheetViewEl, SS_NS, 'pane');\n if (!paneEl) return undefined;\n const pane: ExcelPaneModel = {};\n setIfDefined(pane, 'xSplit', parseOptionalNumber(paneEl.getAttribute('xSplit')));\n setIfDefined(pane, 'ySplit', parseOptionalNumber(paneEl.getAttribute('ySplit')));\n setIfDefined(pane, 'topLeftCell', paneEl.getAttribute('topLeftCell') ?? undefined);\n setIfDefined(pane, 'activePane', paneEl.getAttribute('activePane') ?? undefined);\n setIfDefined(pane, 'state', paneEl.getAttribute('state') ?? undefined);\n return Object.keys(pane).length ? pane : undefined;\n}\n\nfunction parseSelections(sheetViewEl: Element): ExcelSelectionModel[] {\n return childElementsNs(sheetViewEl, SS_NS, 'selection').map((selectionEl) => {\n const selection: ExcelSelectionModel = {};\n setIfDefined(selection, 'pane', selectionEl.getAttribute('pane') ?? undefined);\n setIfDefined(selection, 'activeCell', selectionEl.getAttribute('activeCell') ?? undefined);\n setIfDefined(selection, 'activeCellId', parseOptionalNumber(selectionEl.getAttribute('activeCellId')));\n setIfDefined(selection, 'sqref', selectionEl.getAttribute('sqref') ?? undefined);\n return selection;\n });\n}\n\nfunction parseSheetViews(sheetDom: Document): ExcelSheetViewModel[] {\n const sheetViewEls = sheetDom.getElementsByTagNameNS(SS_NS, 'sheetView');\n const views: ExcelSheetViewModel[] = [];\n for (let i = 0; i < sheetViewEls.length; i++) {\n const el = sheetViewEls[i];\n if (!el) continue;\n const view: ExcelSheetViewModel = { selections: parseSelections(el) };\n setIfDefined(view, 'workbookViewId', parseOptionalNumber(el.getAttribute('workbookViewId')));\n setIfDefined(view, 'view', el.getAttribute('view') ?? undefined);\n setIfDefined(view, 'tabSelected', parseBooleanAttr(el.getAttribute('tabSelected')));\n setIfDefined(view, 'showGridLines', parseBooleanAttr(el.getAttribute('showGridLines')));\n setIfDefined(view, 'showRowColHeaders', parseBooleanAttr(el.getAttribute('showRowColHeaders')));\n setIfDefined(view, 'zoomScale', parseOptionalNumber(el.getAttribute('zoomScale')));\n setIfDefined(view, 'zoomScaleNormal', parseOptionalNumber(el.getAttribute('zoomScaleNormal')));\n setIfDefined(view, 'topLeftCell', el.getAttribute('topLeftCell') ?? undefined);\n setIfDefined(view, 'pane', parsePane(el));\n views.push(view);\n }\n return views;\n}\n\nfunction parseSheet(pkg: Package, ref: WorkbookSheetRef, sharedStrings: string[]): ExcelSheetModel {\n if (!ref.path) {\n return {\n ...ref,\n sheetViews: [],\n columns: [],\n rows: [],\n mergedRanges: [],\n hyperlinks: [],\n tables: [],\n dataValidations: [],\n conditionalFormats: [],\n comments: [],\n threadedComments: [],\n drawings: [],\n charts: [],\n images: [],\n cells: [],\n };\n }\n const part = optionalXmlPart(pkg, ref.path);\n if (!part?.xmlDom) {\n return {\n ...ref,\n sheetViews: [],\n columns: [],\n rows: [],\n mergedRanges: [],\n hyperlinks: [],\n tables: [],\n dataValidations: [],\n conditionalFormats: [],\n comments: [],\n threadedComments: [],\n drawings: [],\n charts: [],\n images: [],\n cells: [],\n };\n }\n const dimension = part.xmlDom.getElementsByTagNameNS(SS_NS, 'dimension')[0]?.getAttribute('ref') ?? undefined;\n const cellEls = part.xmlDom.getElementsByTagNameNS(SS_NS, 'c');\n const cells: ExcelCellModel[] = [];\n for (let i = 0; i < cellEls.length; i++) {\n const parsed = cellEls[i] ? parseCell(cellEls[i]!, sharedStrings) : null;\n if (parsed) cells.push(parsed);\n }\n const drawingInfo = parseDrawings(pkg, ref.path, part.xmlDom);\n return {\n ...ref,\n dimension,\n sheetViews: parseSheetViews(part.xmlDom),\n columns: parseColumns(part.xmlDom),\n rows: parseRows(part.xmlDom),\n mergedRanges: parseMergedRanges(part.xmlDom),\n hyperlinks: parseHyperlinks(pkg, ref.path, part.xmlDom),\n tables: parseTables(pkg, ref.path, part.xmlDom),\n dataValidations: parseDataValidations(part.xmlDom),\n conditionalFormats: parseConditionalFormats(part.xmlDom),\n comments: parseComments(pkg, ref.path),\n threadedComments: parseThreadedComments(pkg, ref.path),\n drawings: drawingInfo.drawings,\n charts: drawingInfo.charts,\n images: drawingInfo.images,\n cells,\n };\n}\n\nexport function readWorkbookModel(pkg: Package): ExcelWorkbookModel {\n const sharedStrings = parseSharedStrings(pkg);\n const sheetRefs = parseWorkbookSheets(pkg);\n return {\n sharedStrings,\n definedNames: parseDefinedNames(pkg),\n styles: parseStyles(pkg),\n sheets: sheetRefs.map((sheet) => parseSheet(pkg, sheet, sharedStrings)),\n };\n}\n","import {\n createPackage,\n createXmlPart,\n deletePart,\n getPart,\n markDirty,\n setPart,\n type Package,\n type Part,\n} from '../pack/index.js';\nimport { parseXmlDocument } from 'slimdom';\nimport { OFFICE_REL_NS, REL_NS, SS_NS } from './namespaces.js';\nimport type {\n ExcelAlignmentModel,\n ExcelBorderModel,\n ExcelBorderSideModel,\n ExcelCellModel,\n ExcelChartModel,\n ExcelColumnModel,\n ExcelCommentModel,\n ExcelConditionalFormatModel,\n ExcelColorModel,\n ExcelDataValidationModel,\n ExcelDrawingMarkerModel,\n ExcelDrawingModel,\n ExcelFillModel,\n ExcelFontModel,\n ExcelHyperlinkModel,\n ExcelRowModel,\n ExcelSheetModel,\n ExcelSheetViewModel,\n ExcelStylesModel,\n ExcelTableModel,\n ExcelTableAutoFilterModel,\n ExcelTableFilterColumnModel,\n ExcelTableSortStateModel,\n ExcelTableSortConditionModel,\n ExcelThreadedCommentModel,\n ExcelWorkbookModel,\n} from './model.js';\nimport { excelColorToOoxmlArgb } from './color.js';\n\nconst XML_DECL = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\nconst CONTENT_TYPES_NS = 'http://schemas.openxmlformats.org/package/2006/content-types';\nconst CONTENT_TYPES_CONTENT_TYPE = 'application/xml';\nconst WORKBOOK_CONTENT_TYPE =\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml';\nconst WORKSHEET_CONTENT_TYPE =\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml';\nconst STYLES_CONTENT_TYPE =\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml';\nconst TC_NS = 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments';\nconst RELS_CONTENT_TYPE = 'application/vnd.openxmlformats-package.relationships+xml';\nconst HYPERLINK_REL_TYPE =\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink';\nconst COMMENTS_CONTENT_TYPE =\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml';\nconst COMMENTS_REL_TYPE =\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments';\nconst THREADED_COMMENTS_REL_TYPE =\n 'http://schemas.microsoft.com/office/2017/10/relationships/threadedComment';\nconst TABLE_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml';\nconst TABLE_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table';\nconst WORKSHEET_REL_TYPE =\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet';\nconst DRAWING_CONTENT_TYPE =\n 'application/vnd.openxmlformats-officedocument.drawing+xml';\nconst DRAWING_REL_TYPE =\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing';\nconst CHART_CONTENT_TYPE =\n 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml';\nconst CHART_REL_TYPE =\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart';\nconst DRAWING_NS = 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing';\nconst A_NS = 'http://schemas.openxmlformats.org/drawingml/2006/main';\nconst CHART_NS = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\n\ninterface Relationship {\n id: string;\n type: string;\n target: string;\n targetMode?: string;\n}\n\nexport function syncWorkbookModelToPackage(pkg: Package, model: ExcelWorkbookModel): void {\n syncStylesPart(pkg, model.styles);\n syncWorkbookRelationships(pkg, model);\n syncWorkbookPart(pkg, model);\n for (const sheet of model.sheets) {\n syncWorksheetRelationships(pkg, sheet);\n syncWorksheetTableRelationships(pkg, sheet);\n syncWorksheetCommentRelationships(pkg, sheet);\n syncWorksheetThreadedCommentRelationships(pkg, sheet);\n syncWorksheetDrawingRelationships(pkg, sheet);\n syncWorksheetPart(pkg, sheet);\n syncTableParts(pkg, sheet);\n syncCommentParts(pkg, sheet);\n syncThreadedCommentParts(pkg, sheet);\n syncDrawingParts(pkg, sheet);\n syncChartParts(pkg, sheet);\n }\n}\n\nfunction syncWorkbookRelationships(pkg: Package, model: ExcelWorkbookModel): void {\n const relsPath = 'xl/_rels/workbook.xml.rels';\n const rels = parseRelationships(getPart(pkg, relsPath));\n const usedSheetRelIds = new Set<string>();\n let changed = false;\n\n for (const sheet of model.sheets) {\n sheet.path ??= nextIndexedPartPath(pkg, 'xl/worksheets/sheet', '.xml');\n const target = relativeRelationshipTarget('xl/workbook.xml', sheet.path);\n const id = sheet.relationshipId || findReusableRelationshipId(rels, WORKSHEET_REL_TYPE, target);\n if (id) {\n sheet.relationshipId = id;\n } else {\n sheet.relationshipId = nextRelationshipId(rels);\n changed = true;\n }\n usedSheetRelIds.add(sheet.relationshipId);\n const nextRel: Relationship = {\n id: sheet.relationshipId,\n type: WORKSHEET_REL_TYPE,\n target,\n };\n const previous = rels.get(nextRel.id);\n if (!previous || !sameRelationship(previous, nextRel)) {\n rels.set(nextRel.id, nextRel);\n changed = true;\n }\n if (!getPart(pkg, sheet.path)) {\n setXmlPart(\n pkg,\n sheet.path,\n WORKSHEET_CONTENT_TYPE,\n `${XML_DECL}<worksheet xmlns=\"${SS_NS}\" xmlns:r=\"${OFFICE_REL_NS}\"/>`,\n );\n setXmlPart(\n pkg,\n relationshipPartPath(sheet.path),\n RELS_CONTENT_TYPE,\n serializeRelationships(new Map()),\n );\n changed = true;\n }\n ensureContentTypeOverride(pkg, sheet.path, WORKSHEET_CONTENT_TYPE);\n }\n\n for (const rel of Array.from(rels.values())) {\n if (rel.type !== WORKSHEET_REL_TYPE || usedSheetRelIds.has(rel.id)) continue;\n const targetPath = resolveRelationshipTarget('xl/workbook.xml', rel.target);\n rels.delete(rel.id);\n deletePart(pkg, targetPath);\n deletePart(pkg, relationshipPartPath(targetPath));\n removeContentTypeOverride(pkg, targetPath);\n changed = true;\n }\n\n if (changed) writeRelationshipsPart(pkg, relsPath, rels);\n}\n\nfunction syncStylesPart(pkg: Package, styles: ExcelStylesModel): void {\n const normalized = normalizeStyles(styles);\n styles.numberFormats = normalized.numberFormats;\n styles.fonts = normalized.fonts;\n styles.fills = normalized.fills;\n styles.borders = normalized.borders;\n styles.cellFormats = normalized.cellFormats;\n const xml = serializeStyles(styles);\n const part = getPart(pkg, 'xl/styles.xml');\n if (part?.xmlDom) {\n replacePartXml(part, xml);\n } else {\n setXmlPart(pkg, 'xl/styles.xml', STYLES_CONTENT_TYPE, xml);\n }\n ensureContentTypeOverride(pkg, 'xl/styles.xml', STYLES_CONTENT_TYPE);\n}\n\nexport function createWorkbookPackageFromModel(model: ExcelWorkbookModel): Package {\n const pkg = createPackage();\n const standaloneModel = cloneStandaloneWorkbookModel(model);\n seedWorkbookPackage(pkg, standaloneModel);\n syncWorkbookModelToPackage(pkg, standaloneModel);\n return pkg;\n}\n\nfunction cloneStandaloneWorkbookModel(model: ExcelWorkbookModel): ExcelWorkbookModel {\n const clone = JSON.parse(JSON.stringify(model)) as ExcelWorkbookModel;\n for (const sheet of clone.sheets) {\n sheet.threadedComments = [];\n const creatableCharts = sheet.charts.filter((chart) => chart.type);\n sheet.charts = creatableCharts;\n sheet.drawings = sheet.drawings\n .map((drawing) => ({\n ...drawing,\n anchors: drawing.anchors.filter(\n (anchor) =>\n anchor.object?.kind === 'chart' &&\n creatableCharts.some((chart) => chart.path === anchor.object?.targetPath || chart.title === anchor.object?.name),\n ),\n }))\n .filter((drawing) => drawing.anchors.length > 0);\n sheet.images = [];\n }\n return clone;\n}\n\nfunction seedWorkbookPackage(pkg: Package, model: ExcelWorkbookModel): void {\n setXmlPart(\n pkg,\n '[Content_Types].xml',\n CONTENT_TYPES_CONTENT_TYPE,\n serializeBaseContentTypes(model),\n );\n setXmlPart(\n pkg,\n '_rels/.rels',\n RELS_CONTENT_TYPE,\n serializeRelationships(\n new Map([\n [\n 'rId1',\n {\n id: 'rId1',\n type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\n target: 'xl/workbook.xml',\n },\n ],\n ]),\n ),\n );\n\n const workbookRels = new Map<string, Relationship>();\n model.sheets.forEach((sheet, index) => {\n sheet.relationshipId ||= `rId${index + 1}`;\n sheet.path ||= `xl/worksheets/sheet${index + 1}.xml`;\n workbookRels.set(sheet.relationshipId, {\n id: sheet.relationshipId,\n type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\n target: `worksheets/sheet${index + 1}.xml`,\n });\n setXmlPart(\n pkg,\n sheet.path,\n WORKSHEET_CONTENT_TYPE,\n `${XML_DECL}<worksheet xmlns=\"${SS_NS}\" xmlns:r=\"${OFFICE_REL_NS}\"/>`,\n );\n setXmlPart(\n pkg,\n relationshipPartPath(sheet.path),\n RELS_CONTENT_TYPE,\n serializeRelationships(new Map()),\n );\n });\n\n setXmlPart(\n pkg,\n 'xl/workbook.xml',\n WORKBOOK_CONTENT_TYPE,\n `${XML_DECL}<workbook xmlns=\"${SS_NS}\" xmlns:r=\"${OFFICE_REL_NS}\"><sheets/></workbook>`,\n );\n setXmlPart(\n pkg,\n 'xl/_rels/workbook.xml.rels',\n RELS_CONTENT_TYPE,\n serializeRelationships(workbookRels),\n );\n}\n\nfunction serializeBaseContentTypes(model: ExcelWorkbookModel): string {\n const overrides: Array<[string, string]> = [\n ['/xl/workbook.xml', WORKBOOK_CONTENT_TYPE],\n ...model.sheets.map((sheet, index) => [\n `/${sheet.path ?? `xl/worksheets/sheet${index + 1}.xml`}`,\n WORKSHEET_CONTENT_TYPE,\n ]),\n ];\n return `${XML_DECL}<Types xmlns=\"${CONTENT_TYPES_NS}\"><Default Extension=\"rels\" ContentType=\"${RELS_CONTENT_TYPE}\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/>${overrides\n .map(\n ([partName, contentType]) =>\n `<Override PartName=\"${xmlAttr(partName)}\" ContentType=\"${xmlAttr(contentType)}\"/>`,\n )\n .join('')}</Types>`;\n}\n\nfunction setXmlPart(pkg: Package, path: string, contentType: string, xml: string): void {\n setPart(\n pkg,\n createXmlPart({\n path,\n contentType,\n xmlDom: parseXmlDocument(xml) as unknown as Document,\n }),\n );\n}\n\nfunction syncWorksheetTableRelationships(pkg: Package, sheet: ExcelSheetModel): void {\n if (!sheet.path) return;\n const relsPath = relationshipPartPath(sheet.path);\n const rels = parseRelationships(getPart(pkg, relsPath));\n if (!sheet.tables.length && !Array.from(rels.values()).some((rel) => rel.type === TABLE_REL_TYPE))\n return;\n const usedTableRelIds = new Set<string>();\n let changed = false;\n\n for (const table of sheet.tables) {\n table.id ??= nextTableId(sheet);\n table.path ??= nextIndexedPartPath(pkg, 'xl/tables/table', '.xml');\n const target = relativeRelationshipTarget(sheet.path, table.path);\n const id = table.relationshipId || findReusableRelationshipId(rels, TABLE_REL_TYPE, target);\n if (id) {\n table.relationshipId = id;\n } else {\n table.relationshipId = nextRelationshipId(rels);\n changed = true;\n }\n usedTableRelIds.add(table.relationshipId);\n const nextRel: Relationship = {\n id: table.relationshipId,\n type: TABLE_REL_TYPE,\n target,\n };\n const previous = rels.get(nextRel.id);\n if (!previous || !sameRelationship(previous, nextRel)) {\n rels.set(nextRel.id, nextRel);\n changed = true;\n }\n }\n\n for (const rel of Array.from(rels.values())) {\n if (rel.type === TABLE_REL_TYPE && !usedTableRelIds.has(rel.id)) {\n const targetPath = resolveRelationshipTarget(sheet.path, rel.target);\n rels.delete(rel.id);\n deletePart(pkg, targetPath);\n removeContentTypeOverride(pkg, targetPath);\n changed = true;\n }\n }\n if (changed) writeRelationshipsPart(pkg, relsPath, rels);\n}\n\nfunction syncWorksheetCommentRelationships(pkg: Package, sheet: ExcelSheetModel): void {\n if (!sheet.path) return;\n const relsPath = relationshipPartPath(sheet.path);\n const rels = parseRelationships(getPart(pkg, relsPath));\n const commentRels = Array.from(rels.values()).filter((rel) => rel.type === COMMENTS_REL_TYPE);\n if (sheet.comments.length || !commentRels.length) return;\n\n for (const rel of commentRels) {\n const targetPath = resolveRelationshipTarget(sheet.path, rel.target);\n rels.delete(rel.id);\n deletePart(pkg, targetPath);\n removeContentTypeOverride(pkg, targetPath);\n }\n writeRelationshipsPart(pkg, relsPath, rels);\n}\n\nfunction syncWorksheetThreadedCommentRelationships(pkg: Package, sheet: ExcelSheetModel): void {\n if (!sheet.path) return;\n const relsPath = relationshipPartPath(sheet.path);\n const rels = parseRelationships(getPart(pkg, relsPath));\n const commentRels = Array.from(rels.values()).filter(\n (rel) => rel.type === THREADED_COMMENTS_REL_TYPE,\n );\n if (sheet.threadedComments.length || !commentRels.length) return;\n\n for (const rel of commentRels) {\n const targetPath = resolveRelationshipTarget(sheet.path, rel.target);\n rels.delete(rel.id);\n deletePart(pkg, targetPath);\n removeContentTypeOverride(pkg, targetPath);\n }\n writeRelationshipsPart(pkg, relsPath, rels);\n}\n\nfunction syncWorksheetDrawingRelationships(pkg: Package, sheet: ExcelSheetModel): void {\n if (!sheet.path) return;\n const needsDrawing = sheet.drawings.some((drawing) => drawing.anchors.length > 0) || sheet.charts.some((chart) => chart.type);\n if (!needsDrawing) return;\n const drawing = sheet.drawings[0] ?? { anchors: [] };\n if (!sheet.drawings[0]) sheet.drawings.push(drawing);\n\n drawing.path ??= nextIndexedPartPath(pkg, 'xl/drawings/drawing', '.xml');\n const sheetRelsPath = relationshipPartPath(sheet.path);\n const sheetRels = parseRelationships(getPart(pkg, sheetRelsPath));\n const drawingTarget = relativeRelationshipTarget(sheet.path, drawing.path);\n drawing.relationshipId ||= findReusableRelationshipId(sheetRels, DRAWING_REL_TYPE, drawingTarget);\n drawing.relationshipId ||= nextRelationshipId(sheetRels);\n sheetRels.set(drawing.relationshipId, {\n id: drawing.relationshipId,\n type: DRAWING_REL_TYPE,\n target: drawingTarget,\n });\n writeRelationshipsPart(pkg, sheetRelsPath, sheetRels);\n ensureContentTypeOverride(pkg, drawing.path, DRAWING_CONTENT_TYPE);\n\n const drawingRelsPath = relationshipPartPath(drawing.path);\n const drawingRels = parseRelationships(getPart(pkg, drawingRelsPath));\n const chartAnchors = drawing.anchors.filter((anchor) => anchor.object?.kind === 'chart');\n const usedChartPaths = new Set(sheet.charts.map((chart) => chart.path).filter((path): path is string => Boolean(path)));\n for (let i = 0; i < sheet.charts.length; i++) {\n const chart = sheet.charts[i];\n if (!chart?.type) continue;\n chart.path ??= nextIndexedPartPathAvoiding(pkg, 'xl/charts/chart', '.xml', usedChartPaths);\n usedChartPaths.add(chart.path);\n chart.drawingPath = drawing.path;\n const chartTarget = relativeRelationshipTarget(drawing.path, chart.path);\n chart.relationshipId ||= findReusableRelationshipId(drawingRels, CHART_REL_TYPE, chartTarget);\n chart.relationshipId ||= nextRelationshipId(drawingRels);\n drawingRels.set(chart.relationshipId, {\n id: chart.relationshipId,\n type: CHART_REL_TYPE,\n target: chartTarget,\n });\n const anchor =\n chartAnchors[i] ??\n ({\n kind: 'twoCell',\n from: chart.position?.from,\n to: chart.position?.to,\n object: { kind: 'chart' },\n } satisfies ExcelDrawingAnchorModel);\n if (!chartAnchors[i]) drawing.anchors.push(anchor);\n anchor.object ??= { kind: 'chart' };\n anchor.object.kind = 'chart';\n anchor.object.name = anchor.object.name ?? chart.title;\n anchor.object.relationshipId = chart.relationshipId;\n anchor.object.targetPath = chart.path;\n if (chart.position) {\n anchor.from = { ...chart.position.from };\n anchor.to = { ...chart.position.to };\n }\n }\n writeRelationshipsPart(pkg, drawingRelsPath, drawingRels);\n}\n\nfunction syncWorksheetRelationships(pkg: Package, sheet: ExcelSheetModel): void {\n if (!sheet.path) return;\n const relsPath = relationshipPartPath(sheet.path);\n const relsPart = getPart(pkg, relsPath);\n const rels = parseRelationships(relsPart);\n const usedHyperlinkIds = new Set<string>();\n let changed = false;\n\n for (const hyperlink of sheet.hyperlinks) {\n if (!hyperlink.target) continue;\n const id = hyperlink.relationshipId || findReusableHyperlinkRelId(rels, hyperlink);\n if (id) {\n hyperlink.relationshipId = id;\n } else {\n hyperlink.relationshipId = nextRelationshipId(rels);\n changed = true;\n }\n usedHyperlinkIds.add(hyperlink.relationshipId);\n const nextRel: Relationship = {\n id: hyperlink.relationshipId,\n type: HYPERLINK_REL_TYPE,\n target: hyperlink.target,\n targetMode: hyperlink.targetMode ?? 'External',\n };\n const previous = rels.get(nextRel.id);\n if (!previous || !sameRelationship(previous, nextRel)) {\n rels.set(nextRel.id, nextRel);\n changed = true;\n }\n }\n\n for (const rel of Array.from(rels.values())) {\n if (rel.type === HYPERLINK_REL_TYPE && !usedHyperlinkIds.has(rel.id)) {\n rels.delete(rel.id);\n changed = true;\n }\n }\n if (!changed && relsPart) return;\n if (!relsPart && !rels.size) return;\n writeRelationshipsPart(pkg, relsPath, rels);\n}\n\nfunction writeRelationshipsPart(\n pkg: Package,\n relsPath: string,\n rels: Map<string, Relationship>,\n): void {\n const relsPart = getPart(pkg, relsPath);\n const xml = serializeRelationships(rels);\n if (relsPart) {\n replacePartXml(relsPart, xml);\n } else {\n setPart(\n pkg,\n createXmlPart({\n path: relsPath,\n contentType: RELS_CONTENT_TYPE,\n xmlDom: parseXmlDocument(xml) as unknown as Document,\n }),\n );\n }\n}\n\nfunction syncWorkbookPart(pkg: Package, model: ExcelWorkbookModel): void {\n const part = getPart(pkg, 'xl/workbook.xml');\n if (!part?.xmlDom) return;\n const sheetsXml = model.sheets\n .map((sheet) => {\n const attrs = [\n `name=\"${xmlAttr(sheet.name)}\"`,\n `sheetId=\"${xmlAttr(sheet.id)}\"`,\n sheet.visibility ? `state=\"${xmlAttr(sheet.visibility)}\"` : '',\n sheet.relationshipId ? `r:id=\"${xmlAttr(sheet.relationshipId)}\"` : '',\n ].filter(Boolean);\n return `<sheet ${attrs.join(' ')}/>`;\n })\n .join('');\n const definedNamesXml = model.definedNames.length\n ? `<definedNames>${model.definedNames\n .map((name) => {\n const attrs = [\n `name=\"${xmlAttr(name.name)}\"`,\n name.localSheetId === undefined ? '' : `localSheetId=\"${name.localSheetId}\"`,\n ].filter(Boolean);\n return `<definedName ${attrs.join(' ')}>${xmlText(name.text)}</definedName>`;\n })\n .join('')}</definedNames>`\n : '';\n replacePartXml(\n part,\n `${XML_DECL}<workbook xmlns=\"${SS_NS}\" xmlns:r=\"${OFFICE_REL_NS}\"><sheets>${sheetsXml}</sheets>${definedNamesXml}</workbook>`,\n );\n}\n\nfunction syncWorksheetPart(pkg: Package, sheet: ExcelSheetModel): void {\n if (!sheet.path) return;\n const part = getPart(pkg, sheet.path);\n if (!part?.xmlDom) return;\n replacePartXml(part, serializeWorksheet(sheet));\n}\n\nfunction serializeWorksheet(sheet: ExcelSheetModel): string {\n return `${XML_DECL}<worksheet xmlns=\"${SS_NS}\" xmlns:r=\"${OFFICE_REL_NS}\">${[\n sheet.dimension ? `<dimension ref=\"${xmlAttr(sheet.dimension)}\"/>` : '',\n serializeSheetViews(sheet.sheetViews),\n serializeColumns(sheet.columns),\n serializeSheetData(sheet),\n serializeMergedRanges(sheet),\n serializeConditionalFormats(sheet.conditionalFormats),\n serializeHyperlinks(sheet.hyperlinks),\n serializeDataValidations(sheet.dataValidations),\n serializeTableParts(sheet.tables),\n serializeDrawingRef(sheet.drawings),\n ]\n .filter(Boolean)\n .join('')}</worksheet>`;\n}\n\nfunction serializeStyles(styles: ExcelStylesModel): string {\n const customNumberFormats = styles.numberFormats.filter((format) => format.id >= 164);\n return `${XML_DECL}<styleSheet xmlns=\"${SS_NS}\">${[\n customNumberFormats.length\n ? `<numFmts count=\"${customNumberFormats.length}\">${customNumberFormats\n .map((format) => `<numFmt numFmtId=\"${format.id}\" formatCode=\"${xmlAttr(format.code)}\"/>`)\n .join('')}</numFmts>`\n : '',\n `<fonts count=\"${styles.fonts.length}\">${styles.fonts.map(serializeFont).join('')}</fonts>`,\n `<fills count=\"${styles.fills.length}\">${styles.fills.map(serializeFill).join('')}</fills>`,\n `<borders count=\"${styles.borders.length}\">${styles.borders.map(serializeBorder).join('')}</borders>`,\n `<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>`,\n `<cellXfs count=\"${styles.cellFormats.length}\">${styles.cellFormats.map(serializeCellFormat).join('')}</cellXfs>`,\n `<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>`,\n ]\n .filter(Boolean)\n .join('')}</styleSheet>`;\n}\n\nfunction serializeFont(font: ExcelFontModel): string {\n return `<font>${[\n font.size === undefined ? '' : `<sz val=\"${font.size}\"/>`,\n font.color ? serializeColor('color', font.color) : '',\n font.name === undefined ? '' : `<name val=\"${xmlAttr(font.name)}\"/>`,\n font.family === undefined ? '' : `<family val=\"${font.family}\"/>`,\n font.charset === undefined ? '' : `<charset val=\"${font.charset}\"/>`,\n font.scheme === undefined ? '' : `<scheme val=\"${xmlAttr(font.scheme)}\"/>`,\n font.bold ? '<b/>' : '',\n font.italic ? '<i/>' : '',\n font.underline ? '<u/>' : '',\n ]\n .filter(Boolean)\n .join('')}</font>`;\n}\n\nfunction serializeFill(fill: ExcelFillModel): string {\n return `<fill><patternFill ${stringAttr('patternType', fill.patternType)}>${[\n fill.foregroundColor ? serializeColor('fgColor', fill.foregroundColor) : '',\n fill.backgroundColor ? serializeColor('bgColor', fill.backgroundColor) : '',\n ]\n .filter(Boolean)\n .join('')}</patternFill></fill>`;\n}\n\nfunction serializeBorder(border: ExcelBorderModel): string {\n return `<border>${['left', 'right', 'top', 'bottom', 'diagonal']\n .map((side) =>\n serializeBorderSide(\n side,\n border[side as keyof ExcelBorderModel] as ExcelBorderSideModel | undefined,\n ),\n )\n .join('')}</border>`;\n}\n\nfunction serializeBorderSide(name: string, side: ExcelBorderSideModel | undefined): string {\n if (!side) return `<${name}/>`;\n return `<${name} ${stringAttr('style', side.style)}>${side.color ? serializeColor('color', side.color) : ''}</${name}>`;\n}\n\nfunction serializeCellFormat(format: ExcelStylesModel['cellFormats'][number]): string {\n const attrs = [\n numberAttr('numFmtId', format.numberFormatId ?? 0),\n numberAttr('fontId', format.fontId ?? 0),\n numberAttr('fillId', format.fillId ?? 0),\n numberAttr('borderId', format.borderId ?? 0),\n numberAttr('xfId', format.xfId ?? 0),\n booleanAttr('applyNumberFormat', format.applyNumberFormat),\n booleanAttr('applyFont', format.applyFont),\n booleanAttr('applyFill', format.applyFill),\n booleanAttr('applyBorder', format.applyBorder),\n booleanAttr('applyAlignment', format.applyAlignment),\n ].filter(Boolean);\n const alignment = format.alignment ? serializeAlignment(format.alignment) : '';\n return alignment ? `<xf ${attrs.join(' ')}>${alignment}</xf>` : `<xf ${attrs.join(' ')}/>`;\n}\n\nfunction serializeAlignment(alignment: ExcelAlignmentModel): string {\n const attrs = [\n stringAttr('horizontal', alignment.horizontal),\n stringAttr('vertical', alignment.vertical),\n numberAttr('textRotation', alignment.textRotation),\n booleanAttr('wrapText', alignment.wrapText),\n booleanAttr('shrinkToFit', alignment.shrinkToFit),\n numberAttr('indent', alignment.indent),\n ].filter(Boolean);\n return `<alignment ${attrs.join(' ')}/>`;\n}\n\nfunction serializeColor(name: string, color: ExcelColorModel): string {\n return `<${name} rgb=\"${excelColorToOoxmlArgb(color, `Excel ${name}`)}\"/>`;\n}\n\nfunction normalizeStyles(styles: ExcelStylesModel): ExcelStylesModel {\n return {\n numberFormats: styles.numberFormats,\n fonts: styles.fonts.length ? styles.fonts : [{}],\n fills: styles.fills.length ? styles.fills : [{}, { patternType: 'gray125' }],\n borders: styles.borders.length ? styles.borders : [{}],\n cellFormats: styles.cellFormats.length ? styles.cellFormats : [{}],\n };\n}\n\nfunction serializeSheetViews(views: ExcelSheetViewModel[]): string {\n if (!views.length) return '';\n return `<sheetViews>${views\n .map((view) => {\n const attrs = [\n numberAttr('workbookViewId', view.workbookViewId),\n stringAttr('view', view.view),\n booleanAttr('tabSelected', view.tabSelected),\n booleanAttr('showGridLines', view.showGridLines),\n booleanAttr('showRowColHeaders', view.showRowColHeaders),\n numberAttr('zoomScale', view.zoomScale),\n numberAttr('zoomScaleNormal', view.zoomScaleNormal),\n stringAttr('topLeftCell', view.topLeftCell),\n ].filter(Boolean);\n const pane = view.pane\n ? `<pane ${[\n numberAttr('xSplit', view.pane.xSplit),\n numberAttr('ySplit', view.pane.ySplit),\n stringAttr('topLeftCell', view.pane.topLeftCell),\n stringAttr('activePane', view.pane.activePane),\n stringAttr('state', view.pane.state),\n ]\n .filter(Boolean)\n .join(' ')}/>`\n : '';\n const selections = view.selections\n .map(\n (selection) =>\n `<selection ${[\n stringAttr('pane', selection.pane),\n stringAttr('activeCell', selection.activeCell),\n numberAttr('activeCellId', selection.activeCellId),\n stringAttr('sqref', selection.sqref),\n ]\n .filter(Boolean)\n .join(' ')}/>`,\n )\n .join('');\n return `<sheetView ${attrs.join(' ')}>${pane}${selections}</sheetView>`;\n })\n .join('')}</sheetViews>`;\n}\n\nfunction serializeColumns(columns: ExcelColumnModel[]): string {\n if (!columns.length) return '';\n return `<cols>${columns\n .map(\n (column) =>\n `<col ${[\n numberAttr('min', column.min),\n numberAttr('max', column.max),\n numberAttr('width', column.width),\n booleanAttr('hidden', column.hidden),\n numberAttr('style', column.styleId),\n booleanAttr('customWidth', column.customWidth),\n ]\n .filter(Boolean)\n .join(' ')}/>`,\n )\n .join('')}</cols>`;\n}\n\nfunction serializeSheetData(sheet: ExcelSheetModel): string {\n const rowMap = new Map<number, { row?: ExcelRowModel; cells: ExcelCellModel[] }>();\n for (const row of sheet.rows) {\n rowMap.set(row.index, { row, cells: [] });\n }\n for (const cell of sheet.cells) {\n const entry = rowMap.get(cell.row) ?? { cells: [] };\n entry.cells.push(cell);\n rowMap.set(cell.row, entry);\n }\n const rows = Array.from(rowMap.entries()).sort(([a], [b]) => a - b);\n return `<sheetData>${rows\n .map(([index, entry]) => {\n const row = entry.row;\n const attrs = [\n numberAttr('r', index),\n numberAttr('ht', row?.height),\n booleanAttr('hidden', row?.hidden),\n numberAttr('s', row?.styleId),\n booleanAttr('customHeight', row?.customHeight),\n ].filter(Boolean);\n const cells = entry.cells\n .sort((a, b) => a.column - b.column)\n .map((cell) => serializeCell(cell))\n .join('');\n return cells ? `<row ${attrs.join(' ')}>${cells}</row>` : `<row ${attrs.join(' ')}/>`;\n })\n .join('')}</sheetData>`;\n}\n\nfunction serializeCell(cell: ExcelCellModel): string {\n const attrs = [stringAttr('r', cell.address), numberAttr('s', cell.styleId)].filter(Boolean);\n const formula = cell.formula ? `<f>${xmlText(cell.formula)}</f>` : '';\n if (cell.kind === 'string') {\n attrs.push('t=\"inlineStr\"');\n return `<c ${attrs.join(' ')}><is><t>${xmlText(String(cell.value ?? ''))}</t></is></c>`;\n }\n if (cell.kind === 'boolean') {\n attrs.push('t=\"b\"');\n return `<c ${attrs.join(' ')}>${formula}<v>${cell.value ? '1' : '0'}</v></c>`;\n }\n if (cell.kind === 'error') {\n attrs.push('t=\"e\"');\n return `<c ${attrs.join(' ')}>${formula}<v>${xmlText(String(cell.value ?? cell.rawValue ?? ''))}</v></c>`;\n }\n if (cell.kind === 'blank' && !formula) {\n return `<c ${attrs.join(' ')}/>`;\n }\n const value = cell.value === null || cell.value === undefined ? '' : String(cell.value);\n return `<c ${attrs.join(' ')}>${formula}${value ? `<v>${xmlText(value)}</v>` : ''}</c>`;\n}\n\nfunction serializeMergedRanges(sheet: ExcelSheetModel): string {\n if (!sheet.mergedRanges.length) return '';\n return `<mergeCells count=\"${sheet.mergedRanges.length}\">${sheet.mergedRanges\n .map((range) => `<mergeCell ref=\"${xmlAttr(range.address)}\"/>`)\n .join('')}</mergeCells>`;\n}\n\nfunction serializeConditionalFormats(formats: ExcelConditionalFormatModel[]): string {\n return formats\n .map(\n (format) =>\n `<conditionalFormatting ${stringAttr('sqref', format.sqref)}>${format.rules\n .map(\n (rule) =>\n `<cfRule ${[\n stringAttr('type', rule.type),\n numberAttr('priority', rule.priority),\n stringAttr('operator', rule.operator),\n numberAttr('dxfId', rule.dxfId),\n booleanAttr('stopIfTrue', rule.stopIfTrue),\n booleanAttr('aboveAverage', rule.aboveAverage),\n booleanAttr('percent', rule.percent),\n booleanAttr('bottom', rule.bottom),\n numberAttr('rank', rule.rank),\n stringAttr('text', rule.text),\n stringAttr('timePeriod', rule.timePeriod),\n ]\n .filter(Boolean)\n .join(\n ' ',\n )}>${rule.formulas.map((formula) => `<formula>${xmlText(formula)}</formula>`).join('')}</cfRule>`,\n )\n .join('')}</conditionalFormatting>`,\n )\n .join('');\n}\n\nfunction serializeHyperlinks(hyperlinks: ExcelHyperlinkModel[]): string {\n if (!hyperlinks.length) return '';\n return `<hyperlinks>${hyperlinks\n .map(\n (hyperlink) =>\n `<hyperlink ${[\n stringAttr('ref', hyperlink.ref),\n hyperlink.relationshipId ? `r:id=\"${xmlAttr(hyperlink.relationshipId)}\"` : '',\n stringAttr('location', hyperlink.location),\n stringAttr('display', hyperlink.display),\n stringAttr('tooltip', hyperlink.tooltip),\n ]\n .filter(Boolean)\n .join(' ')}/>`,\n )\n .join('')}</hyperlinks>`;\n}\n\nfunction serializeDataValidations(validations: ExcelDataValidationModel[]): string {\n if (!validations.length) return '';\n return `<dataValidations count=\"${validations.length}\">${validations\n .map((validation) => {\n const attrs = [\n stringAttr('type', validation.type),\n stringAttr('operator', validation.operator),\n booleanAttr('allowBlank', validation.allowBlank),\n booleanAttr('showDropDown', validation.showDropDown),\n booleanAttr('showInputMessage', validation.showInputMessage),\n booleanAttr('showErrorMessage', validation.showErrorMessage),\n stringAttr('errorStyle', validation.errorStyle),\n stringAttr('sqref', validation.sqref),\n stringAttr('errorTitle', validation.errorTitle),\n stringAttr('error', validation.error),\n stringAttr('promptTitle', validation.promptTitle),\n stringAttr('prompt', validation.prompt),\n ].filter(Boolean);\n return `<dataValidation ${attrs.join(' ')}>${validation.formula1 ? `<formula1>${xmlText(validation.formula1)}</formula1>` : ''}${\n validation.formula2 ? `<formula2>${xmlText(validation.formula2)}</formula2>` : ''\n }</dataValidation>`;\n })\n .join('')}</dataValidations>`;\n}\n\nfunction serializeTableParts(tables: ExcelTableModel[]): string {\n const tableIds = tables\n .map((table) => table.relationshipId)\n .filter((id): id is string => Boolean(id));\n if (!tableIds.length) return '';\n return `<tableParts count=\"${tableIds.length}\">${tableIds.map((id) => `<tablePart r:id=\"${xmlAttr(id)}\"/>`).join('')}</tableParts>`;\n}\n\nfunction serializeDrawingRef(drawings: ExcelDrawingModel[]): string {\n const drawing = drawings.find((item) => item.relationshipId);\n return drawing?.relationshipId ? `<drawing r:id=\"${xmlAttr(drawing.relationshipId)}\"/>` : '';\n}\n\nfunction syncTableParts(pkg: Package, sheet: ExcelSheetModel): void {\n for (const table of sheet.tables) {\n if (!table.path) continue;\n const part = getPart(pkg, table.path);\n const xml = serializeTable(table);\n if (part?.xmlDom) {\n replacePartXml(part, xml);\n } else {\n setPart(\n pkg,\n createXmlPart({\n path: table.path,\n contentType: TABLE_CONTENT_TYPE,\n xmlDom: parseXmlDocument(xml) as unknown as Document,\n }),\n );\n }\n ensureContentTypeOverride(pkg, table.path, TABLE_CONTENT_TYPE);\n }\n}\n\nfunction serializeTable(table: ExcelTableModel): string {\n const attrs = [\n numberAttr('id', table.id),\n stringAttr('name', table.name),\n stringAttr('displayName', table.displayName),\n stringAttr('ref', table.ref),\n numberAttr('headerRowCount', table.headerRowCount),\n numberAttr('totalsRowCount', table.totalsRowCount),\n booleanAttr('totalsRowShown', table.totalsRowShown),\n ].filter(Boolean);\n const autoFilter = serializeTableAutoFilter(table);\n const columns = `<tableColumns count=\"${table.columns.length}\">${table.columns\n .map(\n (column) =>\n `<tableColumn ${[\n numberAttr('id', column.id),\n stringAttr('name', column.name),\n stringAttr('totalsRowLabel', column.totalsRowLabel),\n stringAttr('totalsRowFunction', column.totalsRowFunction),\n ]\n .filter(Boolean)\n .join(' ')}/>`,\n )\n .join('')}</tableColumns>`;\n const style = table.style\n ? `<tableStyleInfo ${[\n stringAttr('name', table.style.name),\n booleanAttr('showFirstColumn', table.style.showFirstColumn),\n booleanAttr('showLastColumn', table.style.showLastColumn),\n booleanAttr('showRowStripes', table.style.showRowStripes),\n booleanAttr('showColumnStripes', table.style.showColumnStripes),\n ]\n .filter(Boolean)\n .join(' ')}/>`\n : '';\n return `${XML_DECL}<table xmlns=\"${SS_NS}\" ${attrs.join(' ')}>${autoFilter}${columns}${style}</table>`;\n}\n\nfunction serializeTableAutoFilter(table: ExcelTableModel): string {\n const autoFilter =\n table.autoFilter ??\n (table.autoFilterRef ? { ref: table.autoFilterRef, filterColumns: [] } : undefined);\n if (!autoFilter) return '';\n const attrs = [stringAttr('ref', autoFilter.ref ?? table.autoFilterRef)].filter(Boolean);\n return `<autoFilter ${attrs.join(' ')}>${[\n ...autoFilter.filterColumns.map(serializeTableFilterColumn),\n autoFilter.sortState ? serializeTableSortState(autoFilter.sortState) : '',\n ]\n .filter(Boolean)\n .join('')}</autoFilter>`;\n}\n\nfunction serializeTableFilterColumn(column: ExcelTableFilterColumnModel): string {\n const attrs = [\n numberAttr('colId', column.colId),\n booleanAttr('hiddenButton', column.hiddenButton),\n booleanAttr('showButton', column.showButton),\n ].filter(Boolean);\n const filters = column.filters?.length\n ? `<filters>${column.filters.map((filter) => `<filter val=\"${xmlAttr(filter)}\"/>`).join('')}</filters>`\n : '';\n return `<filterColumn ${attrs.join(' ')}>${filters}</filterColumn>`;\n}\n\nfunction serializeTableSortState(sortState: ExcelTableSortStateModel): string {\n const attrs = [\n stringAttr('ref', sortState.ref),\n booleanAttr('caseSensitive', sortState.caseSensitive),\n stringAttr('sortMethod', sortState.sortMethod),\n ].filter(Boolean);\n return `<sortState ${attrs.join(' ')}>${sortState.conditions.map(serializeTableSortCondition).join('')}</sortState>`;\n}\n\nfunction serializeTableSortCondition(condition: ExcelTableSortConditionModel): string {\n const attrs = [\n stringAttr('ref', condition.ref),\n booleanAttr('descending', condition.descending),\n stringAttr('sortBy', condition.sortBy),\n ].filter(Boolean);\n return `<sortCondition ${attrs.join(' ')}/>`;\n}\n\nfunction syncCommentParts(pkg: Package, sheet: ExcelSheetModel): void {\n if (!sheet.path || !sheet.comments.length) return;\n const target = ensureCommentPartTarget(pkg, sheet.path);\n const xml = serializeComments(sheet.comments);\n const part = getPart(pkg, target.path);\n if (part?.xmlDom) {\n replacePartXml(part, xml);\n } else {\n setPart(\n pkg,\n createXmlPart({\n path: target.path,\n contentType: COMMENTS_CONTENT_TYPE,\n xmlDom: parseXmlDocument(xml) as unknown as Document,\n }),\n );\n }\n ensureContentTypeOverride(pkg, target.path, COMMENTS_CONTENT_TYPE);\n}\n\nfunction ensureCommentPartTarget(pkg: Package, sheetPath: string): { id: string; path: string } {\n const existing = relationshipTargetsByType(pkg, sheetPath, '/comments')[0];\n if (existing) return existing;\n const relsPath = relationshipPartPath(sheetPath);\n const rels = parseRelationships(getPart(pkg, relsPath));\n const id = nextRelationshipId(rels);\n const path = nextIndexedPartPath(pkg, 'xl/comments', '.xml');\n rels.set(id, {\n id,\n type: COMMENTS_REL_TYPE,\n target: relativeRelationshipTarget(sheetPath, path),\n });\n writeRelationshipsPart(pkg, relsPath, rels);\n return { id, path };\n}\n\nfunction serializeComments(comments: ExcelCommentModel[]): string {\n const authors = Array.from(new Set(comments.map((comment) => comment.author ?? '')));\n return `${XML_DECL}<comments xmlns=\"${SS_NS}\"><authors>${authors\n .map((author) => `<author>${xmlText(author)}</author>`)\n .join('')}</authors><commentList>${comments\n .map((comment) => {\n const authorId = comment.authorId ?? Math.max(0, authors.indexOf(comment.author ?? ''));\n return `<comment ${[\n stringAttr('ref', comment.ref),\n numberAttr('authorId', authorId),\n numberAttr('shapeId', comment.shapeId),\n ]\n .filter(Boolean)\n .join(' ')}><text><t>${xmlText(comment.text)}</t></text></comment>`;\n })\n .join('')}</commentList></comments>`;\n}\n\nfunction syncThreadedCommentParts(pkg: Package, sheet: ExcelSheetModel): void {\n if (!sheet.path || !sheet.threadedComments.length) return;\n const target = relationshipTargetsByType(pkg, sheet.path, '/threadedComment')[0];\n if (!target) return;\n const part = getPart(pkg, target.path);\n if (!part?.xmlDom) return;\n replacePartXml(part, serializeThreadedComments(sheet.threadedComments));\n}\n\nfunction serializeThreadedComments(comments: ExcelThreadedCommentModel[]): string {\n return `${XML_DECL}<ThreadedComments xmlns=\"${TC_NS}\">${comments\n .map(\n (comment) =>\n `<threadedComment ${[\n stringAttr('ref', comment.ref),\n stringAttr('dT', comment.dateTime),\n stringAttr('personId', comment.personId),\n stringAttr('id', comment.id),\n ]\n .filter(Boolean)\n .join(' ')}><text>${xmlText(comment.text)}</text></threadedComment>`,\n )\n .join('')}</ThreadedComments>`;\n}\n\nfunction syncDrawingParts(pkg: Package, sheet: ExcelSheetModel): void {\n for (const drawing of sheet.drawings) {\n if (!drawing.path) continue;\n const part = getPart(pkg, drawing.path);\n if (!part?.xmlDom) {\n setXmlPart(pkg, drawing.path, DRAWING_CONTENT_TYPE, serializeDrawing(drawing));\n ensureContentTypeOverride(pkg, drawing.path, DRAWING_CONTENT_TYPE);\n continue;\n }\n const anchorEls = [\n ...Array.from(part.xmlDom.getElementsByTagNameNS('*', 'twoCellAnchor')),\n ...Array.from(part.xmlDom.getElementsByTagNameNS('*', 'oneCellAnchor')),\n ...Array.from(part.xmlDom.getElementsByTagNameNS('*', 'absoluteAnchor')),\n ];\n for (let i = 0; i < drawing.anchors.length; i++) {\n const anchor = drawing.anchors[i];\n const anchorEl = anchorEls[i];\n if (!anchor || !anchorEl) continue;\n updateMarker(anchorEl, 'from', anchor.from);\n updateMarker(anchorEl, 'to', anchor.to);\n updateDrawingObjectName(anchorEl, anchor.object?.name);\n }\n markDirty(part);\n }\n}\n\nfunction serializeDrawing(drawing: ExcelDrawingModel): string {\n return `${XML_DECL}<xdr:wsDr xmlns:xdr=\"${DRAWING_NS}\" xmlns:a=\"${A_NS}\" xmlns:c=\"${CHART_NS}\" xmlns:r=\"${OFFICE_REL_NS}\">${drawing.anchors\n .map((anchor, index) => serializeDrawingAnchor(anchor, index + 2))\n .join('')}</xdr:wsDr>`;\n}\n\nfunction serializeDrawingAnchor(anchor: ExcelDrawingAnchorModel, id: number): string {\n const from = serializeDrawingMarker('from', anchor.from);\n const to = serializeDrawingMarker('to', anchor.to);\n if (anchor.object?.kind === 'chart' && anchor.object.relationshipId) {\n const name = anchor.object.name ?? `Chart ${id}`;\n return `<xdr:twoCellAnchor editAs=\"oneCell\">${from}${to}<xdr:graphicFrame macro=\"\"><xdr:nvGraphicFramePr><xdr:cNvPr id=\"${id}\" name=\"${xmlAttr(name)}\"/><xdr:cNvGraphicFramePr/></xdr:nvGraphicFramePr><xdr:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/></xdr:xfrm><a:graphic><a:graphicData uri=\"${CHART_NS}\"><c:chart r:id=\"${xmlAttr(anchor.object.relationshipId)}\"/></a:graphicData></a:graphic></xdr:graphicFrame><xdr:clientData/></xdr:twoCellAnchor>`;\n }\n return `<xdr:twoCellAnchor editAs=\"oneCell\">${from}${to}<xdr:clientData/></xdr:twoCellAnchor>`;\n}\n\nfunction serializeDrawingMarker(name: 'from' | 'to', marker: ExcelDrawingMarkerModel | undefined): string {\n const value = marker ?? {};\n return `<xdr:${name}><xdr:col>${value.column ?? 0}</xdr:col><xdr:colOff>${value.columnOffset ?? 0}</xdr:colOff><xdr:row>${value.row ?? 0}</xdr:row><xdr:rowOff>${value.rowOffset ?? 0}</xdr:rowOff></xdr:${name}>`;\n}\n\nfunction updateMarker(\n anchorEl: Element,\n localName: 'from' | 'to',\n marker: ExcelDrawingMarkerModel | undefined,\n): void {\n if (!marker) return;\n const markerEl = anchorEl.getElementsByTagNameNS('*', localName)[0];\n if (!markerEl) return;\n setFirstLocalText(markerEl, 'col', marker.column);\n setFirstLocalText(markerEl, 'colOff', marker.columnOffset);\n setFirstLocalText(markerEl, 'row', marker.row);\n setFirstLocalText(markerEl, 'rowOff', marker.rowOffset);\n}\n\nfunction updateDrawingObjectName(anchorEl: Element, name: string | undefined): void {\n if (name === undefined) return;\n const nameEl = anchorEl.getElementsByTagNameNS('*', 'cNvPr')[0];\n if (nameEl) nameEl.setAttribute('name', name);\n}\n\nfunction syncChartParts(pkg: Package, sheet: ExcelSheetModel): void {\n for (const chart of sheet.charts) {\n syncChartPart(pkg, chart);\n }\n}\n\nfunction syncChartPart(pkg: Package, chart: ExcelChartModel): void {\n if (!chart.path) return;\n const part = getPart(pkg, chart.path);\n if (!part?.xmlDom) {\n if (!chart.type || !chart.categoryRange || !chart.series?.length) return;\n setXmlPart(pkg, chart.path, CHART_CONTENT_TYPE, serializeChart(chart));\n ensureContentTypeOverride(pkg, chart.path, CHART_CONTENT_TYPE);\n return;\n }\n updateChartTitle(part.xmlDom, chart.title);\n const formulaEls = Array.from(part.xmlDom.getElementsByTagNameNS('*', 'f'));\n for (let i = 0; i < chart.formulaRefs.length && i < formulaEls.length; i++) {\n formulaEls[i]!.textContent = chart.formulaRefs[i] ?? '';\n }\n markDirty(part);\n}\n\nfunction serializeChart(chart: ExcelChartModel): string {\n const chartBody = serializeChartBody(chart);\n return `${XML_DECL}<c:chartSpace xmlns:c=\"${CHART_NS}\" xmlns:a=\"${A_NS}\" xmlns:r=\"${OFFICE_REL_NS}\"><c:date1904 val=\"0\"/><c:lang val=\"en-US\"/><c:roundedCorners val=\"0\"/><c:chart>${serializeChartTitle(chart.title)}<c:autoTitleDeleted val=\"${chart.title ? 0 : 1}\"/><c:plotArea><c:layout/>${chartBody}</c:plotArea><c:legend><c:legendPos val=\"r\"/><c:layout/></c:legend><c:plotVisOnly val=\"1\"/></c:chart><c:printSettings><c:headerFooter/><c:pageMargins l=\"0.7\" r=\"0.7\" t=\"0.75\" b=\"0.75\" header=\"0.3\" footer=\"0.3\"/><c:pageSetup/></c:printSettings></c:chartSpace>`;\n}\n\nfunction serializeChartTitle(title: string | undefined): string {\n if (!title) return '';\n return `<c:title><c:tx><c:rich><a:bodyPr/><a:lstStyle/><a:p><a:r><a:t>${xmlText(title)}</a:t></a:r></a:p></c:rich></c:tx><c:layout/></c:title>`;\n}\n\nfunction serializeChartBody(chart: ExcelChartModel): string {\n if (chart.type === 'pie' || chart.type === 'doughnut') return serializePieLikeChart(chart);\n if (chart.type === 'line' || chart.type === 'lineMarkers') return serializeLineChart(chart);\n return serializeBarChart(chart);\n}\n\nfunction serializeBarChart(chart: ExcelChartModel): string {\n const direction = chart.type?.startsWith('bar') ? 'bar' : 'col';\n const grouping = chart.type?.endsWith('Stacked') ? 'stacked' : 'clustered';\n return `<c:barChart><c:barDir val=\"${direction}\"/><c:grouping val=\"${grouping}\"/><c:varyColors val=\"0\"/>${serializeCartesianSeries(chart)}<c:axId val=\"12345678\"/><c:axId val=\"12345679\"/></c:barChart>${serializeCategoryAxis()}${serializeValueAxis()}`;\n}\n\nfunction serializeLineChart(chart: ExcelChartModel): string {\n const marker = chart.type === 'lineMarkers' ? '1' : '0';\n return `<c:lineChart><c:grouping val=\"standard\"/><c:varyColors val=\"0\"/>${serializeCartesianSeries(chart, marker)}<c:axId val=\"12345678\"/><c:axId val=\"12345679\"/></c:lineChart>${serializeCategoryAxis()}${serializeValueAxis()}`;\n}\n\nfunction serializePieLikeChart(chart: ExcelChartModel): string {\n const tag = chart.type === 'doughnut' ? 'doughnutChart' : 'pieChart';\n const hole = chart.type === 'doughnut' ? '<c:holeSize val=\"50\"/>' : '';\n return `<c:${tag}><c:varyColors val=\"1\"/>${serializePieSeries(chart)}${hole}</c:${tag}>`;\n}\n\nfunction serializeCartesianSeries(chart: ExcelChartModel, marker?: string): string {\n return (chart.series ?? [])\n .map((series, index) => {\n const markerXml = marker === undefined ? '' : `<c:marker><c:symbol val=\"${marker === '1' ? 'auto' : 'none'}\"/></c:marker>`;\n return `<c:ser><c:idx val=\"${index}\"/><c:order val=\"${index}\"/>${serializeSeriesText(series.name)}${markerXml}<c:cat><c:strRef><c:f>${xmlText(chart.categoryRange ?? '')}</c:f></c:strRef></c:cat><c:val><c:numRef><c:f>${xmlText(series.values)}</c:f></c:numRef></c:val></c:ser>`;\n })\n .join('');\n}\n\nfunction serializePieSeries(chart: ExcelChartModel): string {\n const series = chart.series?.[0];\n if (!series) return '';\n return `<c:ser><c:idx val=\"0\"/><c:order val=\"0\"/>${serializeSeriesText(series.name)}<c:cat><c:strRef><c:f>${xmlText(chart.categoryRange ?? '')}</c:f></c:strRef></c:cat><c:val><c:numRef><c:f>${xmlText(series.values)}</c:f></c:numRef></c:val></c:ser>`;\n}\n\nfunction serializeSeriesText(name: string | undefined): string {\n if (!name) return '';\n if (name.includes('!') || name.includes('$')) {\n return `<c:tx><c:strRef><c:f>${xmlText(name)}</c:f></c:strRef></c:tx>`;\n }\n return `<c:tx><c:v>${xmlText(name)}</c:v></c:tx>`;\n}\n\nfunction serializeCategoryAxis(): string {\n return '<c:catAx><c:axId val=\"12345678\"/><c:scaling><c:orientation val=\"minMax\"/></c:scaling><c:axPos val=\"b\"/><c:tickLblPos val=\"nextTo\"/><c:crossAx val=\"12345679\"/><c:crosses val=\"autoZero\"/><c:auto val=\"1\"/><c:lblAlgn val=\"ctr\"/><c:lblOffset val=\"100\"/></c:catAx>';\n}\n\nfunction serializeValueAxis(): string {\n return '<c:valAx><c:axId val=\"12345679\"/><c:scaling><c:orientation val=\"minMax\"/></c:scaling><c:axPos val=\"l\"/><c:majorGridlines/><c:numFmt formatCode=\"General\" sourceLinked=\"1\"/><c:tickLblPos val=\"nextTo\"/><c:crossAx val=\"12345678\"/><c:crosses val=\"autoZero\"/><c:crossBetween val=\"between\"/></c:valAx>';\n}\n\nfunction updateChartTitle(chartDom: Document, title: string | undefined): void {\n if (title === undefined) return;\n const titleEl = chartDom.getElementsByTagNameNS('*', 'title')[0];\n if (!titleEl) return;\n const textEl = titleEl.getElementsByTagNameNS('*', 't')[0];\n if (textEl) textEl.textContent = title;\n}\n\nfunction replacePartXml(part: Part, xml: string): void {\n part.xmlDom = parseXmlDocument(xml) as unknown as Document;\n markDirty(part);\n}\n\nfunction relationshipTargetsByType(\n pkg: Package,\n sourcePath: string,\n typeSuffix: string,\n): Array<{ id: string; path: string }> {\n const rels = parseRelationships(getPart(pkg, relationshipPartPath(sourcePath)));\n const targets: Array<{ id: string; path: string }> = [];\n for (const rel of rels.values()) {\n if (rel.type.endsWith(typeSuffix)) {\n targets.push({ id: rel.id, path: resolveRelationshipTarget(sourcePath, rel.target) });\n }\n }\n return targets;\n}\n\nfunction findReusableHyperlinkRelId(\n rels: Map<string, Relationship>,\n hyperlink: ExcelHyperlinkModel,\n): string | undefined {\n for (const rel of rels.values()) {\n if (\n rel.type === HYPERLINK_REL_TYPE &&\n rel.target === hyperlink.target &&\n (rel.targetMode ?? 'External') === (hyperlink.targetMode ?? 'External')\n ) {\n return rel.id;\n }\n }\n return undefined;\n}\n\nfunction findReusableRelationshipId(\n rels: Map<string, Relationship>,\n type: string,\n target: string,\n targetMode?: string,\n): string | undefined {\n for (const rel of rels.values()) {\n if (\n rel.type === type &&\n rel.target === target &&\n (rel.targetMode ?? '') === (targetMode ?? '')\n ) {\n return rel.id;\n }\n }\n return undefined;\n}\n\nfunction nextTableId(sheet: ExcelSheetModel): number {\n let max = 0;\n for (const table of sheet.tables) {\n if (table.id && table.id > max) max = table.id;\n }\n return max + 1;\n}\n\nfunction nextRelationshipId(rels: Map<string, Relationship>): string {\n let next = 1;\n while (rels.has(`rId${next}`)) next++;\n return `rId${next}`;\n}\n\nfunction sameRelationship(left: Relationship, right: Relationship): boolean {\n return (\n left.id === right.id &&\n left.type === right.type &&\n left.target === right.target &&\n (left.targetMode ?? '') === (right.targetMode ?? '')\n );\n}\n\nfunction serializeRelationships(rels: Map<string, Relationship>): string {\n return `${XML_DECL}<Relationships xmlns=\"${REL_NS}\">${Array.from(rels.values())\n .map((rel) => {\n const attrs = [\n `Id=\"${xmlAttr(rel.id)}\"`,\n `Type=\"${xmlAttr(rel.type)}\"`,\n `Target=\"${xmlAttr(rel.target)}\"`,\n stringAttr('TargetMode', rel.targetMode),\n ].filter(Boolean);\n return `<Relationship ${attrs.join(' ')}/>`;\n })\n .join('')}</Relationships>`;\n}\n\nfunction nextIndexedPartPath(pkg: Package, prefix: string, extension: string): string {\n let next = 1;\n while (getPart(pkg, `${prefix}${next}${extension}`)) next++;\n return `${prefix}${next}${extension}`;\n}\n\nfunction nextIndexedPartPathAvoiding(\n pkg: Package,\n prefix: string,\n extension: string,\n used: Set<string>,\n): string {\n let next = 1;\n while (getPart(pkg, `${prefix}${next}${extension}`) || used.has(`${prefix}${next}${extension}`)) {\n next++;\n }\n return `${prefix}${next}${extension}`;\n}\n\nfunction parseRelationships(part?: Part): Map<string, Relationship> {\n const result = new Map<string, Relationship>();\n if (!part?.xmlDom) return result;\n const rels = part.xmlDom.getElementsByTagNameNS(REL_NS, 'Relationship');\n for (let i = 0; i < rels.length; i++) {\n const rel = rels[i];\n if (!rel) continue;\n const id = rel.getAttribute('Id');\n const type = rel.getAttribute('Type');\n const target = rel.getAttribute('Target');\n if (!id || !type || !target) continue;\n result.set(id, {\n id,\n type,\n target,\n targetMode: rel.getAttribute('TargetMode') ?? undefined,\n });\n }\n return result;\n}\n\nfunction relationshipPartPath(path: string): string {\n return `${dirname(path)}/_rels/${path.slice(path.lastIndexOf('/') + 1)}.rels`;\n}\n\nfunction dirname(path: string): string {\n const idx = path.lastIndexOf('/');\n return idx === -1 ? '' : path.slice(0, idx);\n}\n\nfunction normalizePath(path: string): string {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (!part || part === '.') continue;\n if (part === '..') parts.pop();\n else parts.push(part);\n }\n return parts.join('/');\n}\n\nfunction resolveRelationshipTarget(sourcePartPath: string, target: string): string {\n if (target.startsWith('/')) return normalizePath(target.slice(1));\n const base = dirname(sourcePartPath);\n return normalizePath(base ? `${base}/${target}` : target);\n}\n\nfunction relativeRelationshipTarget(sourcePartPath: string, targetPartPath: string): string {\n const sourceParts = dirname(sourcePartPath).split('/').filter(Boolean);\n const targetParts = targetPartPath.split('/').filter(Boolean);\n let common = 0;\n while (\n common < sourceParts.length &&\n common < targetParts.length &&\n sourceParts[common] === targetParts[common]\n ) {\n common++;\n }\n const up = sourceParts.slice(common).map(() => '..');\n const down = targetParts.slice(common);\n return [...up, ...down].join('/') || targetPartPath;\n}\n\nfunction ensureContentTypeOverride(pkg: Package, path: string, contentType: string): void {\n const part = getPart(pkg, '[Content_Types].xml');\n if (!part?.xmlDom?.documentElement) return;\n const partName = `/${path}`;\n const overrides = part.xmlDom.getElementsByTagNameNS(CONTENT_TYPES_NS, 'Override');\n for (let i = 0; i < overrides.length; i++) {\n const override = overrides[i];\n if (!override || override.getAttribute('PartName') !== partName) continue;\n if (override.getAttribute('ContentType') !== contentType) {\n override.setAttribute('ContentType', contentType);\n markDirty(part);\n }\n return;\n }\n const override = part.xmlDom.createElementNS(CONTENT_TYPES_NS, 'Override');\n override.setAttribute('PartName', partName);\n override.setAttribute('ContentType', contentType);\n part.xmlDom.documentElement.appendChild(override);\n markDirty(part);\n}\n\nfunction removeContentTypeOverride(pkg: Package, path: string): void {\n const part = getPart(pkg, '[Content_Types].xml');\n if (!part?.xmlDom?.documentElement) return;\n const partName = `/${path}`;\n const overrides = Array.from(part.xmlDom.getElementsByTagNameNS(CONTENT_TYPES_NS, 'Override'));\n for (const override of overrides) {\n if (override.getAttribute('PartName') !== partName) continue;\n override.parentNode?.removeChild(override);\n markDirty(part);\n }\n}\n\nfunction setFirstLocalText(parent: Element, localName: string, value: number | undefined): void {\n if (value === undefined) return;\n const el = parent.getElementsByTagNameNS('*', localName)[0];\n if (el) el.textContent = String(value);\n}\n\nfunction stringAttr(name: string, value: string | undefined): string {\n return value === undefined ? '' : `${name}=\"${xmlAttr(value)}\"`;\n}\n\nfunction numberAttr(name: string, value: number | undefined): string {\n return value === undefined ? '' : `${name}=\"${value}\"`;\n}\n\nfunction booleanAttr(name: string, value: boolean | undefined): string {\n return value === undefined ? '' : `${name}=\"${value ? 1 : 0}\"`;\n}\n\nfunction xmlAttr(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\nfunction xmlText(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n","import type { ExcelDefinedNameModel } from './model.js';\n\nexport class ExcelNamedItem {\n private readonly model: ExcelDefinedNameModel;\n private readonly names: ExcelDefinedNameModel[];\n\n constructor(model: ExcelDefinedNameModel, names: ExcelDefinedNameModel[]) {\n this.model = model;\n this.names = names;\n }\n\n name(): string {\n return this.model.name;\n }\n\n text(): string {\n return this.model.text;\n }\n\n setText(text: string): void {\n this.model.text = text;\n }\n\n rename(name: string): void {\n assertValidName(name);\n if (this.names.some((item) => item !== this.model && item.name === name)) {\n throw new Error(`ExcelWorkbook: defined name already exists: ${name}`);\n }\n this.model.name = name;\n }\n\n localSheetId(): number | undefined {\n return this.model.localSheetId;\n }\n\n setLocalSheetId(localSheetId: number | undefined): void {\n if (localSheetId !== undefined && (!Number.isInteger(localSheetId) || localSheetId < 0)) {\n throw new Error(`ExcelNamedItem.setLocalSheetId: localSheetId must be a non-negative integer`);\n }\n this.model.localSheetId = localSheetId;\n }\n\n toModel(): ExcelDefinedNameModel {\n return { ...this.model };\n }\n}\n\nexport class ExcelNamedItemCollection {\n private readonly itemsByModel: ExcelNamedItem[];\n private readonly models: ExcelDefinedNameModel[];\n\n constructor(names: ExcelDefinedNameModel[]) {\n this.models = names;\n this.itemsByModel = names.map((name) => new ExcelNamedItem(name, names));\n }\n\n items(): ExcelNamedItem[] {\n return [...this.itemsByModel];\n }\n\n getItem(name: string): ExcelNamedItem {\n const item = this.getItemOrNullObject(name);\n if (!item) throw new Error(`ExcelWorkbook: defined name not found: ${name}`);\n return item;\n }\n\n getItemOrNullObject(name: string): ExcelNamedItem | null {\n return this.itemsByModel.find((item) => item.name() === name) ?? null;\n }\n\n add(model: ExcelDefinedNameModel): ExcelNamedItem {\n assertValidName(model.name);\n if (this.getItemOrNullObject(model.name)) {\n throw new Error(`ExcelWorkbook: defined name already exists: ${model.name}`);\n }\n if (model.localSheetId !== undefined && (!Number.isInteger(model.localSheetId) || model.localSheetId < 0)) {\n throw new Error(`ExcelNamedItemCollection.add: localSheetId must be a non-negative integer`);\n }\n const next = { ...model };\n this.models.push(next);\n const item = new ExcelNamedItem(next, this.models);\n this.itemsByModel.push(item);\n return item;\n }\n\n deleteItem(name: string): void {\n const index = this.models.findIndex((item) => item.name === name);\n if (index === -1) throw new Error(`ExcelWorkbook: defined name not found: ${name}`);\n this.models.splice(index, 1);\n this.itemsByModel.splice(index, 1);\n }\n}\n\nfunction assertValidName(name: string): void {\n if (!name || !/^[A-Za-z_\\\\][A-Za-z0-9_.\\\\]*$/.test(name)) {\n throw new Error(`ExcelNamedItem: invalid defined name: ${name}`);\n }\n}\n","import {\n formatCellAddress,\n formatRangeAddress,\n parseRangeAddress,\n type RangeAddress,\n} from './address.js';\nimport type {\n ExcelAlignmentModel,\n ExcelBorderModel,\n ExcelCellFormatModel,\n ExcelCellKind,\n ExcelCellModel,\n ExcelCellValue,\n ExcelColorModel,\n ExcelFillModel,\n ExcelFontModel,\n ExcelSheetModel,\n ExcelStylesModel,\n} from './model.js';\nimport { normalizeExcelColor } from './color.js';\nimport type {\n ExcelMutationRecorder,\n ExcelRangeSetBorderMutation,\n ExcelRangeSetColumnWidthMutation,\n ExcelRangeSetFillForegroundColorMutation,\n ExcelRangeSetFontColorMutation,\n ExcelRangeSetRowHeightMutation,\n ExcelWorkbookMutation,\n} from './mutations.js';\n\ntype ReplayableRangeFormatMutation =\n | Omit<ExcelRangeSetFontColorMutation, 'sheetId' | 'sheetName'>\n | Omit<ExcelRangeSetFillForegroundColorMutation, 'sheetId' | 'sheetName'>\n | Omit<ExcelRangeSetBorderMutation, 'sheetId' | 'sheetName'>;\n\nexport class ExcelRange {\n readonly format: ExcelRangeFormat;\n private readonly sheet: ExcelSheetModel;\n private readonly styles: ExcelStylesModel;\n private readonly ref: RangeAddress;\n private readonly cellsByAddress: Map<string, ExcelCellModel>;\n private readonly recordMutation?: ExcelMutationRecorder;\n\n constructor(\n sheet: ExcelSheetModel,\n address: string,\n styles: ExcelStylesModel = createEmptyStyles(),\n recordMutation?: ExcelMutationRecorder,\n ) {\n this.sheet = sheet;\n this.styles = styles;\n this.recordMutation = recordMutation;\n this.ref = parseRangeAddress(address);\n if (this.ref.sheetName && this.ref.sheetName !== sheet.name) {\n throw new Error(\n `ExcelRange: address sheet '${this.ref.sheetName}' does not match worksheet '${sheet.name}'`,\n );\n }\n this.cellsByAddress = new Map(sheet.cells.map((cell) => [cell.address, cell]));\n this.format = new ExcelRangeFormat(this);\n }\n\n address(): string {\n return this.ref.address;\n }\n\n rowIndex(): number {\n return this.ref.startRow;\n }\n\n columnIndex(): number {\n return this.ref.startColumn;\n }\n\n rowCount(): number {\n return this.ref.rowCount;\n }\n\n columnCount(): number {\n return this.ref.columnCount;\n }\n\n values(): ExcelCellValue[][] {\n return this.matrix((cell) => cell.value);\n }\n\n formulas(): (string | null)[][] {\n return this.matrix((cell) => cell.formula ?? null);\n }\n\n text(): string[][] {\n return this.matrix((cell) => cellToText(cell));\n }\n\n valueTypes(): ExcelCellKind[][] {\n return this.matrix((cell) => cell.kind);\n }\n\n rawValues(): (string | null)[][] {\n return this.matrix((cell) => cell.rawValue ?? null);\n }\n\n styleIds(): (number | undefined)[][] {\n return this.matrix((cell) => cell.styleId);\n }\n\n setStyleId(styleId: number | undefined): void {\n if (styleId !== undefined && (!Number.isInteger(styleId) || styleId < 0)) {\n throw new Error(`ExcelRange.setStyleId: styleId must be a non-negative integer`);\n }\n for (let r = 0; r < this.ref.rowCount; r++) {\n for (let c = 0; c < this.ref.columnCount; c++) {\n const address = formatCellAddress(this.ref.startRow + r, this.ref.startColumn + c);\n const cell = this.ensureCell(address);\n if (styleId === undefined) delete cell.styleId;\n else cell.styleId = styleId;\n }\n }\n normalizeSheetCells(this.sheet);\n this.recordMutation?.({\n kind: 'unsafe',\n scope: 'range',\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n reason: 'range.setStyleId is not replayable by first-phase mutation writeback',\n });\n }\n\n rowHeights(): Array<number | undefined> {\n const heights: Array<number | undefined> = [];\n for (let r = 0; r < this.ref.rowCount; r++) {\n const rowIndex = this.ref.startRow + r;\n heights.push(this.sheet.rows.find((row) => row.index === rowIndex)?.height);\n }\n return heights;\n }\n\n setRowHeight(height: number | undefined): void {\n if (height !== undefined && (!Number.isFinite(height) || height < 0)) {\n throw new Error(`ExcelRange.setRowHeight: height must be a non-negative number`);\n }\n for (let r = 0; r < this.ref.rowCount; r++) {\n const row = this.ensureRow(this.ref.startRow + r);\n if (height === undefined) {\n delete row.height;\n delete row.customHeight;\n } else {\n row.height = height;\n row.customHeight = true;\n }\n }\n this.recordMutation?.({\n kind: 'range.setRowHeight',\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n address: this.ref.address,\n height,\n });\n }\n\n columnWidths(): Array<number | undefined> {\n const widths: Array<number | undefined> = [];\n for (let c = 0; c < this.ref.columnCount; c++) {\n const columnIndex = this.ref.startColumn + c;\n widths.push(\n this.sheet.columns.find((column) => column.min <= columnIndex && column.max >= columnIndex)\n ?.width,\n );\n }\n return widths;\n }\n\n setColumnWidth(width: number | undefined): void {\n if (width !== undefined && (!Number.isFinite(width) || width < 0)) {\n throw new Error(`ExcelRange.setColumnWidth: width must be a non-negative number`);\n }\n for (let c = 0; c < this.ref.columnCount; c++) {\n const column = this.ensureColumn(this.ref.startColumn + c);\n if (width === undefined) {\n delete column.width;\n delete column.customWidth;\n } else {\n column.width = width;\n column.customWidth = true;\n }\n }\n normalizeColumns(this.sheet);\n this.recordMutation?.({\n kind: 'range.setColumnWidth',\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n address: this.ref.address,\n width,\n });\n }\n\n merge(): void {\n const masterAddress = formatCellAddress(this.ref.startRow, this.ref.startColumn);\n for (let r = 0; r < this.ref.rowCount; r++) {\n for (let c = 0; c < this.ref.columnCount; c++) {\n const address = formatCellAddress(this.ref.startRow + r, this.ref.startColumn + c);\n if (address !== masterAddress) this.clearCellContent(address);\n }\n }\n normalizeSheetCells(this.sheet);\n if (!this.sheet.mergedRanges.some((range) => range.address === this.ref.address)) {\n this.sheet.mergedRanges.push({ address: this.ref.address });\n }\n this.recordMutation?.({\n kind: 'range.merge',\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n address: this.ref.address,\n });\n }\n\n unmerge(): void {\n this.sheet.mergedRanges = this.sheet.mergedRanges.filter(\n (range) => range.address !== this.ref.address,\n );\n this.recordMutation?.({\n kind: 'range.unmerge',\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n address: this.ref.address,\n });\n }\n\n setValues(values: ExcelCellValue[][]): void {\n this.assertMatrixShape(values, 'ExcelRange.setValues');\n for (let r = 0; r < this.ref.rowCount; r++) {\n for (let c = 0; c < this.ref.columnCount; c++) {\n const address = formatCellAddress(this.ref.startRow + r, this.ref.startColumn + c);\n this.setCellValue(address, values[r]![c]!);\n }\n }\n normalizeSheetCells(this.sheet);\n this.recordMutation?.({\n kind: 'range.setValues',\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n address: this.ref.address,\n values,\n });\n }\n\n setFormulas(formulas: (string | null)[][]): void {\n this.assertMatrixShape(formulas, 'ExcelRange.setFormulas');\n for (let r = 0; r < this.ref.rowCount; r++) {\n for (let c = 0; c < this.ref.columnCount; c++) {\n const address = formatCellAddress(this.ref.startRow + r, this.ref.startColumn + c);\n this.setCellFormula(address, formulas[r]![c]!);\n }\n }\n normalizeSheetCells(this.sheet);\n this.recordMutation?.({\n kind: 'range.setFormulas',\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n address: this.ref.address,\n formulas,\n });\n }\n\n clear(): void {\n for (let r = 0; r < this.ref.rowCount; r++) {\n for (let c = 0; c < this.ref.columnCount; c++) {\n const address = formatCellAddress(this.ref.startRow + r, this.ref.startColumn + c);\n this.deleteCell(address);\n }\n }\n normalizeSheetCells(this.sheet);\n this.recordMutation?.({\n kind: 'range.clear',\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n address: this.ref.address,\n });\n }\n\n getCell(rowOffset: number, columnOffset: number): ExcelCell {\n this.assertOffset(rowOffset, columnOffset);\n const row = this.ref.startRow + rowOffset;\n const column = this.ref.startColumn + columnOffset;\n return new ExcelCell(this.sheet, formatCellAddress(row, column), this.styles, this.recordMutation);\n }\n\n getRow(rowOffset: number): ExcelRange {\n if (!Number.isInteger(rowOffset) || rowOffset < 0 || rowOffset >= this.ref.rowCount) {\n throw new Error(`ExcelRange.getRow: row offset out of bounds: ${rowOffset}`);\n }\n const row = this.ref.startRow + rowOffset;\n const start = formatCellAddress(row, this.ref.startColumn);\n const end = formatCellAddress(row, this.ref.startColumn + this.ref.columnCount - 1);\n return new ExcelRange(this.sheet, `${start}:${end}`, this.styles, this.recordMutation);\n }\n\n getColumn(columnOffset: number): ExcelRange {\n if (\n !Number.isInteger(columnOffset) ||\n columnOffset < 0 ||\n columnOffset >= this.ref.columnCount\n ) {\n throw new Error(`ExcelRange.getColumn: column offset out of bounds: ${columnOffset}`);\n }\n const column = this.ref.startColumn + columnOffset;\n const start = formatCellAddress(this.ref.startRow, column);\n const end = formatCellAddress(this.ref.startRow + this.ref.rowCount - 1, column);\n return new ExcelRange(this.sheet, `${start}:${end}`, this.styles, this.recordMutation);\n }\n\n resize(rowCount: number, columnCount: number): ExcelRange {\n return new ExcelRange(\n this.sheet,\n formatRangeAddress(this.ref.startRow, this.ref.startColumn, rowCount, columnCount),\n this.styles,\n this.recordMutation,\n );\n }\n\n offset(\n rowOffset: number,\n columnOffset: number,\n rowCount = this.ref.rowCount,\n columnCount = this.ref.columnCount,\n ): ExcelRange {\n if (!Number.isInteger(rowOffset) || !Number.isInteger(columnOffset)) {\n throw new Error(`ExcelRange.offset: offsets must be integers`);\n }\n return new ExcelRange(\n this.sheet,\n formatRangeAddress(\n this.ref.startRow + rowOffset,\n this.ref.startColumn + columnOffset,\n rowCount,\n columnCount,\n ),\n this.styles,\n this.recordMutation,\n );\n }\n\n slice(\n rowOffset: number,\n columnOffset: number,\n rowCount: number,\n columnCount: number,\n ): ExcelRange {\n if (\n !Number.isInteger(rowOffset) ||\n !Number.isInteger(columnOffset) ||\n !Number.isInteger(rowCount) ||\n !Number.isInteger(columnCount) ||\n rowOffset < 0 ||\n columnOffset < 0 ||\n rowCount < 1 ||\n columnCount < 1 ||\n rowOffset + rowCount > this.ref.rowCount ||\n columnOffset + columnCount > this.ref.columnCount\n ) {\n throw new Error(\n `ExcelRange.slice: range out of bounds row=${rowOffset}, column=${columnOffset}, rows=${rowCount}, columns=${columnCount}`,\n );\n }\n return new ExcelRange(\n this.sheet,\n formatRangeAddress(\n this.ref.startRow + rowOffset,\n this.ref.startColumn + columnOffset,\n rowCount,\n columnCount,\n ),\n this.styles,\n this.recordMutation,\n );\n }\n\n toModel(): ExcelCellModel[] {\n const cells: ExcelCellModel[] = [];\n for (let r = 0; r < this.ref.rowCount; r++) {\n for (let c = 0; c < this.ref.columnCount; c++) {\n const address = formatCellAddress(this.ref.startRow + r, this.ref.startColumn + c);\n const cell = this.cellsByAddress.get(address);\n if (cell) cells.push({ ...cell });\n }\n }\n return cells;\n }\n\n getResolvedFormat(): ExcelCellFormatModel {\n const cell = this.firstCell();\n return cloneCellFormat(this.styles.cellFormats[cell?.styleId ?? 0] ?? {});\n }\n\n updateFormat(\n update: (format: ExcelCellFormatModel) => ExcelCellFormatModel,\n options: { recordUnsafe?: boolean } = {},\n ): void {\n for (let r = 0; r < this.ref.rowCount; r++) {\n for (let c = 0; c < this.ref.columnCount; c++) {\n const address = formatCellAddress(this.ref.startRow + r, this.ref.startColumn + c);\n const cell = this.ensureCell(address);\n const current = cloneCellFormat(this.styles.cellFormats[cell.styleId ?? 0] ?? {});\n cell.styleId = ensureCellFormat(this.styles, update(current));\n }\n }\n normalizeSheetCells(this.sheet);\n if (options.recordUnsafe ?? true) {\n this.recordMutation?.({\n kind: 'unsafe',\n scope: 'range',\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n reason: 'range.updateFormat is not replayable by first-phase mutation writeback',\n });\n }\n }\n\n recordReplayableMutation(mutation: ReplayableRangeFormatMutation): void {\n this.recordMutation?.({\n ...mutation,\n sheetId: this.sheet.id,\n sheetName: this.sheet.name,\n } as ExcelWorkbookMutation);\n }\n\n ensureFont(font: ExcelFontModel): number {\n return ensureStyleItem(this.styles.fonts, font, cloneFont);\n }\n\n ensureFill(fill: ExcelFillModel): number {\n return ensureStyleItem(this.styles.fills, fill, cloneFill);\n }\n\n ensureBorder(border: ExcelBorderModel): number {\n return ensureStyleItem(this.styles.borders, border, cloneBorder);\n }\n\n ensureNumberFormat(code: string): number {\n const builtIn = builtInNumberFormatId(code);\n if (builtIn !== undefined) return builtIn;\n const existing = this.styles.numberFormats.find((format) => format.code === code);\n if (existing) return existing.id;\n const maxId = this.styles.numberFormats.reduce((max, format) => Math.max(max, format.id), 163);\n const next = { id: maxId + 1, code };\n this.styles.numberFormats.push(next);\n return next.id;\n }\n\n fontById(id: number | undefined): ExcelFontModel {\n return cloneFont(this.styles.fonts[id ?? 0] ?? {});\n }\n\n fillById(id: number | undefined): ExcelFillModel {\n return cloneFill(this.styles.fills[id ?? 0] ?? {});\n }\n\n borderById(id: number | undefined): ExcelBorderModel {\n return cloneBorder(this.styles.borders[id ?? 0] ?? {});\n }\n\n private matrix<T>(read: (cell: ExcelCellModel) => T): T[][] {\n const rows: T[][] = [];\n for (let r = 0; r < this.ref.rowCount; r++) {\n const row: T[] = [];\n for (let c = 0; c < this.ref.columnCount; c++) {\n const address = formatCellAddress(this.ref.startRow + r, this.ref.startColumn + c);\n row.push(read(this.cellsByAddress.get(address) ?? blankCell(address)));\n }\n rows.push(row);\n }\n return rows;\n }\n\n private assertOffset(rowOffset: number, columnOffset: number): void {\n if (\n !Number.isInteger(rowOffset) ||\n !Number.isInteger(columnOffset) ||\n rowOffset < 0 ||\n columnOffset < 0 ||\n rowOffset >= this.ref.rowCount ||\n columnOffset >= this.ref.columnCount\n ) {\n throw new Error(\n `ExcelRange.getCell: offset out of bounds: row=${rowOffset}, column=${columnOffset}`,\n );\n }\n }\n\n private assertMatrixShape<T>(matrix: T[][], operation: string): void {\n if (matrix.length !== this.ref.rowCount) {\n throw new Error(\n `${operation}: expected ${this.ref.rowCount} rows, received ${matrix.length}`,\n );\n }\n for (let r = 0; r < matrix.length; r++) {\n if (!Array.isArray(matrix[r]) || matrix[r]!.length !== this.ref.columnCount) {\n throw new Error(\n `${operation}: expected row ${r} to contain ${this.ref.columnCount} columns`,\n );\n }\n }\n }\n\n private setCellValue(address: string, value: ExcelCellValue): void {\n if (value === null) {\n this.deleteCell(address);\n return;\n }\n const cell = this.ensureCell(address);\n cell.value = value;\n cell.kind =\n typeof value === 'boolean' ? 'boolean' : typeof value === 'number' ? 'number' : 'string';\n delete cell.formula;\n delete cell.rawValue;\n delete cell.dataType;\n delete cell.sharedStringIndex;\n }\n\n private setCellFormula(address: string, formula: string | null): void {\n if (formula === null) {\n this.deleteCell(address);\n return;\n }\n const cell = this.ensureCell(address);\n cell.kind = 'formula';\n cell.formula = formula.startsWith('=') ? formula.slice(1) : formula;\n cell.value = null;\n delete cell.rawValue;\n delete cell.dataType;\n delete cell.sharedStringIndex;\n }\n\n private ensureCell(address: string): ExcelCellModel {\n const existing = this.cellsByAddress.get(address);\n if (existing) return existing;\n const cell = blankCell(address);\n this.sheet.cells.push(cell);\n this.cellsByAddress.set(address, cell);\n return cell;\n }\n\n private deleteCell(address: string): void {\n const cell = this.cellsByAddress.get(address);\n if (!cell) return;\n this.cellsByAddress.delete(address);\n const index = this.sheet.cells.indexOf(cell);\n if (index !== -1) this.sheet.cells.splice(index, 1);\n }\n\n private clearCellContent(address: string): void {\n const cell = this.cellsByAddress.get(address);\n if (!cell) return;\n if (cell.styleId === undefined) {\n this.deleteCell(address);\n return;\n }\n cell.kind = 'blank';\n cell.value = null;\n delete cell.formula;\n delete cell.rawValue;\n delete cell.dataType;\n delete cell.sharedStringIndex;\n }\n\n private ensureRow(index: number) {\n let row = this.sheet.rows.find((item) => item.index === index);\n if (!row) {\n row = { index };\n this.sheet.rows.push(row);\n this.sheet.rows.sort((a, b) => a.index - b.index);\n }\n return row;\n }\n\n private ensureColumn(index: number) {\n let column = this.sheet.columns.find((item) => item.min === index && item.max === index);\n if (!column) {\n column = { min: index, max: index };\n this.sheet.columns.push(column);\n }\n return column;\n }\n\n private firstCell(): ExcelCellModel | undefined {\n for (let r = 0; r < this.ref.rowCount; r++) {\n for (let c = 0; c < this.ref.columnCount; c++) {\n const address = formatCellAddress(this.ref.startRow + r, this.ref.startColumn + c);\n const cell = this.cellsByAddress.get(address);\n if (cell) return cell;\n }\n }\n return undefined;\n }\n}\n\nexport class ExcelCell {\n private readonly range: ExcelRange;\n\n constructor(\n sheet: ExcelSheetModel,\n address: string,\n styles?: ExcelStylesModel,\n recordMutation?: ExcelMutationRecorder,\n ) {\n this.range = new ExcelRange(sheet, address, styles, recordMutation);\n }\n\n address(): string {\n return this.range.address();\n }\n\n value(): ExcelCellValue {\n return this.range.values()[0]?.[0] ?? null;\n }\n\n formula(): string | null {\n return this.range.formulas()[0]?.[0] ?? null;\n }\n\n text(): string {\n return this.range.text()[0]?.[0] ?? '';\n }\n\n valueType(): ExcelCellKind {\n return this.range.valueTypes()[0]?.[0] ?? 'blank';\n }\n\n rawValue(): string | null {\n return this.range.rawValues()[0]?.[0] ?? null;\n }\n\n styleId(): number | undefined {\n return this.range.styleIds()[0]?.[0];\n }\n\n setStyleId(styleId: number | undefined): void {\n this.range.setStyleId(styleId);\n }\n\n setValue(value: ExcelCellValue): void {\n this.range.setValues([[value]]);\n }\n\n setFormula(formula: string | null): void {\n this.range.setFormulas([[formula]]);\n }\n\n clear(): void {\n this.range.clear();\n }\n\n toRange(): ExcelRange {\n return this.range;\n }\n\n toModel(): ExcelCellModel | null {\n return this.range.toModel()[0] ? { ...this.range.toModel()[0]! } : null;\n }\n}\n\nexport class ExcelRangeFormat {\n readonly font: ExcelRangeFontFormat;\n readonly fill: ExcelRangeFillFormat;\n readonly border: ExcelRangeBorderFormat;\n readonly alignment: ExcelRangeAlignmentFormat;\n\n constructor(private readonly range: ExcelRange) {\n this.font = new ExcelRangeFontFormat(range);\n this.fill = new ExcelRangeFillFormat(range);\n this.border = new ExcelRangeBorderFormat(range);\n this.alignment = new ExcelRangeAlignmentFormat(range);\n }\n\n numberFormatCode(): string | undefined {\n return this.range.getResolvedFormat().numberFormatCode;\n }\n\n setNumberFormatCode(code: string | undefined): void {\n this.range.updateFormat((format) => {\n if (code === undefined) {\n delete format.numberFormatCode;\n delete format.numberFormatId;\n delete format.applyNumberFormat;\n } else {\n format.numberFormatCode = code;\n format.numberFormatId = this.range.ensureNumberFormat(code);\n format.applyNumberFormat = true;\n }\n return format;\n });\n }\n}\n\nexport class ExcelRangeFontFormat {\n constructor(private readonly range: ExcelRange) {}\n\n value(): ExcelFontModel {\n return this.range.fontById(this.range.getResolvedFormat().fontId);\n }\n\n setValue(font: ExcelFontModel, options: { recordUnsafe?: boolean } = {}): void {\n const normalized = {\n ...font,\n color: normalizeExcelColor(font.color, 'ExcelRange.format.font.setValue'),\n };\n removeUndefined(normalized);\n this.range.updateFormat(\n (format) => {\n format.fontId = this.range.ensureFont(normalized);\n format.applyFont = true;\n return format;\n },\n options,\n );\n }\n\n bold(): boolean | undefined {\n return this.value().bold;\n }\n\n setBold(value: boolean | undefined): void {\n this.patch({ bold: value });\n }\n\n italic(): boolean | undefined {\n return this.value().italic;\n }\n\n setItalic(value: boolean | undefined): void {\n this.patch({ italic: value });\n }\n\n underline(): boolean | undefined {\n return this.value().underline;\n }\n\n setUnderline(value: boolean | undefined): void {\n this.patch({ underline: value });\n }\n\n color(): ExcelColorModel | undefined {\n return this.value().color;\n }\n\n setColor(color: ExcelColorModel | undefined): void {\n const normalized = normalizeExcelColor(color, 'ExcelRange.format.font.setColor');\n this.patch({ color: normalized }, { recordUnsafe: false });\n this.range.recordReplayableMutation({\n kind: 'range.format.font.setColor',\n address: this.range.address(),\n color: normalized,\n });\n }\n\n size(): number | undefined {\n return this.value().size;\n }\n\n setSize(size: number | undefined): void {\n this.patch({ size });\n }\n\n name(): string | undefined {\n return this.value().name;\n }\n\n setName(name: string | undefined): void {\n this.patch({ name });\n }\n\n private patch(patch: Partial<ExcelFontModel>, options: { recordUnsafe?: boolean } = {}): void {\n this.range.updateFormat(\n (format) => {\n const next = {\n ...this.range.fontById(format.fontId),\n ...patch,\n };\n removeUndefined(next);\n format.fontId = this.range.ensureFont(next);\n format.applyFont = true;\n return format;\n },\n options,\n );\n }\n}\n\nexport class ExcelRangeFillFormat {\n constructor(private readonly range: ExcelRange) {}\n\n value(): ExcelFillModel {\n return this.range.fillById(this.range.getResolvedFormat().fillId);\n }\n\n setValue(fill: ExcelFillModel, options: { recordUnsafe?: boolean } = {}): void {\n const normalized = {\n ...fill,\n patternType: fill.patternType ?? (fill.foregroundColor ? 'solid' : undefined),\n foregroundColor: normalizeExcelColor(\n fill.foregroundColor,\n 'ExcelRange.format.fill.setValue.foregroundColor',\n ),\n backgroundColor: normalizeExcelColor(\n fill.backgroundColor,\n 'ExcelRange.format.fill.setValue.backgroundColor',\n ),\n };\n removeUndefined(normalized);\n this.range.updateFormat(\n (format) => {\n format.fillId = this.range.ensureFill(normalized);\n format.applyFill = true;\n return format;\n },\n options,\n );\n }\n\n patternType(): string | undefined {\n return this.value().patternType;\n }\n\n setPatternType(patternType: string | undefined): void {\n this.patch({ patternType });\n }\n\n foregroundColor(): ExcelColorModel | undefined {\n return this.value().foregroundColor;\n }\n\n setForegroundColor(color: ExcelColorModel | undefined): void {\n const normalized = normalizeExcelColor(color, 'ExcelRange.format.fill.setForegroundColor');\n this.patch(\n {\n foregroundColor: normalized,\n patternType: normalized ? 'solid' : this.patternType(),\n },\n { recordUnsafe: false },\n );\n this.range.recordReplayableMutation({\n kind: 'range.format.fill.setForegroundColor',\n address: this.range.address(),\n color: normalized,\n });\n }\n\n backgroundColor(): ExcelColorModel | undefined {\n return this.value().backgroundColor;\n }\n\n setBackgroundColor(color: ExcelColorModel | undefined): void {\n this.patch({\n backgroundColor: normalizeExcelColor(color, 'ExcelRange.format.fill.setBackgroundColor'),\n });\n }\n\n private patch(patch: Partial<ExcelFillModel>, options: { recordUnsafe?: boolean } = {}): void {\n const next = { ...this.value(), ...patch };\n removeUndefined(next);\n this.setValue(next, options);\n }\n}\n\nexport class ExcelRangeBorderFormat {\n constructor(private readonly range: ExcelRange) {}\n\n value(): ExcelBorderModel {\n return this.range.borderById(this.range.getResolvedFormat().borderId);\n }\n\n setValue(border: ExcelBorderModel): void {\n const normalized = normalizeBorder(border, 'ExcelRange.format.border.setValue');\n this.range.updateFormat(\n (format) => {\n format.borderId = this.range.ensureBorder(normalized);\n format.applyBorder = true;\n return format;\n },\n { recordUnsafe: false },\n );\n this.range.recordReplayableMutation({\n kind: 'range.format.border.setValue',\n address: this.range.address(),\n border: normalized,\n });\n }\n\n setLeft(side: ExcelBorderModel['left']): void {\n this.patch({ left: side });\n }\n\n setRight(side: ExcelBorderModel['right']): void {\n this.patch({ right: side });\n }\n\n setTop(side: ExcelBorderModel['top']): void {\n this.patch({ top: side });\n }\n\n setBottom(side: ExcelBorderModel['bottom']): void {\n this.patch({ bottom: side });\n }\n\n private patch(patch: Partial<ExcelBorderModel>): void {\n const next = { ...this.value(), ...patch };\n removeUndefined(next);\n this.setValue(next);\n }\n}\n\nfunction normalizeBorder(border: ExcelBorderModel, context: string): ExcelBorderModel {\n const normalized: ExcelBorderModel = {};\n for (const name of ['left', 'right', 'top', 'bottom', 'diagonal'] as const) {\n const side = border[name];\n if (!side) continue;\n normalized[name] = {\n ...side,\n color: normalizeExcelColor(side.color, `${context}.${name}.color`),\n };\n removeUndefined(normalized[name]!);\n }\n return normalized;\n}\n\nexport class ExcelRangeAlignmentFormat {\n constructor(private readonly range: ExcelRange) {}\n\n value(): ExcelAlignmentModel | undefined {\n const value = this.range.getResolvedFormat().alignment;\n return value ? { ...value } : undefined;\n }\n\n setValue(alignment: ExcelAlignmentModel | undefined): void {\n this.range.updateFormat((format) => {\n if (alignment === undefined) {\n delete format.alignment;\n delete format.applyAlignment;\n } else {\n format.alignment = { ...alignment };\n format.applyAlignment = true;\n }\n return format;\n });\n }\n\n setHorizontal(horizontal: string | undefined): void {\n this.patch({ horizontal });\n }\n\n setVertical(vertical: string | undefined): void {\n this.patch({ vertical });\n }\n\n setWrapText(wrapText: boolean | undefined): void {\n this.patch({ wrapText });\n }\n\n private patch(patch: Partial<ExcelAlignmentModel>): void {\n const next = { ...(this.value() ?? {}), ...patch };\n removeUndefined(next);\n this.setValue(Object.keys(next).length ? next : undefined);\n }\n}\n\nfunction blankCell(address: string): ExcelCellModel {\n const match = /^([A-Z]+)(\\d+)$/.exec(address);\n return {\n address,\n row: match ? Number(match[2]) : 0,\n column: match ? columnNameToIndexSafe(match[1]!) : 0,\n kind: 'blank',\n value: null,\n };\n}\n\nfunction columnNameToIndexSafe(columnName: string): number {\n let value = 0;\n for (const ch of columnName) value = value * 26 + (ch.charCodeAt(0) - 64);\n return value;\n}\n\nfunction cellToText(cell: ExcelCellModel): string {\n if (cell.value === null) return '';\n return String(cell.value);\n}\n\nfunction normalizeSheetCells(sheet: ExcelSheetModel): void {\n sheet.cells.sort((a, b) => a.row - b.row || a.column - b.column);\n sheet.dimension = computeDimension(sheet.cells);\n}\n\nfunction normalizeColumns(sheet: ExcelSheetModel): void {\n sheet.columns.sort((a, b) => a.min - b.min || a.max - b.max);\n}\n\nfunction createEmptyStyles(): ExcelStylesModel {\n return {\n numberFormats: [],\n fonts: [{}],\n fills: [{}, { patternType: 'gray125' }],\n borders: [{}],\n cellFormats: [{}],\n };\n}\n\nfunction ensureCellFormat(styles: ExcelStylesModel, format: ExcelCellFormatModel): number {\n const normalized = cloneCellFormat(format);\n removeUndefined(normalized);\n return ensureStyleItem(styles.cellFormats, normalized, cloneCellFormat);\n}\n\nfunction ensureStyleItem<T>(items: T[], item: T, clone: (value: T) => T): number {\n const normalized = clone(item);\n removeUndefined(normalized as object);\n const key = stableStringify(normalized);\n const existing = items.findIndex((candidate) => stableStringify(candidate) === key);\n if (existing !== -1) return existing;\n items.push(normalized);\n return items.length - 1;\n}\n\nfunction cloneCellFormat(format: ExcelCellFormatModel): ExcelCellFormatModel {\n return {\n ...format,\n alignment: format.alignment ? { ...format.alignment } : undefined,\n };\n}\n\nfunction cloneFont(font: ExcelFontModel): ExcelFontModel {\n return { ...font, color: font.color ? { ...font.color } : undefined };\n}\n\nfunction cloneFill(fill: ExcelFillModel): ExcelFillModel {\n return {\n ...fill,\n foregroundColor: fill.foregroundColor ? { ...fill.foregroundColor } : undefined,\n backgroundColor: fill.backgroundColor ? { ...fill.backgroundColor } : undefined,\n };\n}\n\nfunction cloneBorder(border: ExcelBorderModel): ExcelBorderModel {\n return {\n left: border.left\n ? { ...border.left, color: border.left.color ? { ...border.left.color } : undefined }\n : undefined,\n right: border.right\n ? { ...border.right, color: border.right.color ? { ...border.right.color } : undefined }\n : undefined,\n top: border.top\n ? { ...border.top, color: border.top.color ? { ...border.top.color } : undefined }\n : undefined,\n bottom: border.bottom\n ? { ...border.bottom, color: border.bottom.color ? { ...border.bottom.color } : undefined }\n : undefined,\n diagonal: border.diagonal\n ? {\n ...border.diagonal,\n color: border.diagonal.color ? { ...border.diagonal.color } : undefined,\n }\n : undefined,\n };\n}\n\nfunction removeUndefined(value: object): void {\n for (const key of Object.keys(value)) {\n if ((value as Record<string, unknown>)[key] === undefined)\n delete (value as Record<string, unknown>)[key];\n }\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(stableStringify).join(',')}]`;\n return `{${Object.keys(value as Record<string, unknown>)\n .sort()\n .map(\n (key) => `${JSON.stringify(key)}:${stableStringify((value as Record<string, unknown>)[key])}`,\n )\n .join(',')}}`;\n}\n\nfunction builtInNumberFormatId(code: string): number | undefined {\n const builtIns: Record<string, number> = {\n General: 0,\n '0': 1,\n '0.00': 2,\n '#,##0': 3,\n '#,##0.00': 4,\n '0%': 9,\n '0.00%': 10,\n };\n return builtIns[code];\n}\n\nfunction computeDimension(cells: ExcelCellModel[]): string | undefined {\n if (cells.length === 0) return undefined;\n let minRow = Number.POSITIVE_INFINITY;\n let minColumn = Number.POSITIVE_INFINITY;\n let maxRow = 0;\n let maxColumn = 0;\n for (const cell of cells) {\n minRow = Math.min(minRow, cell.row);\n minColumn = Math.min(minColumn, cell.column);\n maxRow = Math.max(maxRow, cell.row);\n maxColumn = Math.max(maxColumn, cell.column);\n }\n return formatRangeAddress(minRow, minColumn, maxRow - minRow + 1, maxColumn - minColumn + 1);\n}\n","import type {\n ExcelChartAddOptions,\n ExcelChartModel,\n ExcelCommentModel,\n ExcelConditionalFormatModel,\n ExcelConditionalFormatRuleModel,\n ExcelDataValidationModel,\n ExcelDrawingAnchorModel,\n ExcelDrawingMarkerModel,\n ExcelDrawingModel,\n ExcelHyperlinkModel,\n ExcelImageModel,\n ExcelShapeModel,\n ExcelTableAutoFilterModel,\n ExcelTableColumnModel,\n ExcelTableModel,\n ExcelTableSortStateModel,\n ExcelTableStyleModel,\n ExcelThreadedCommentModel,\n} from './model.js';\nimport { parseRangeAddress } from './address.js';\n\nexport class ExcelTable {\n readonly columns: ExcelTableColumnCollection;\n readonly style: ExcelTableStyle;\n\n constructor(\n private readonly model: ExcelTableModel,\n private readonly remove?: () => void,\n ) {\n this.columns = new ExcelTableColumnCollection(() => this.model.columns);\n this.style = new ExcelTableStyle(() => (this.model.style ??= {}));\n }\n\n id(): number | undefined {\n return this.model.id;\n }\n\n name(): string | undefined {\n return this.model.name;\n }\n\n displayName(): string | undefined {\n return this.model.displayName;\n }\n\n setName(name: string): void {\n this.model.name = name;\n }\n\n setDisplayName(displayName: string): void {\n this.model.displayName = displayName;\n }\n\n rangeAddress(): string | undefined {\n return this.model.ref;\n }\n\n setRange(address: string): void {\n parseRangeAddress(address);\n this.model.ref = address;\n if (this.model.autoFilterRef) this.setAutoFilterRange(address);\n }\n\n resize(address: string): void {\n this.setRange(address);\n const range = parseRangeAddress(address);\n const current = this.model.columns;\n if (range.columnCount < current.length) {\n current.splice(range.columnCount);\n }\n while (current.length < range.columnCount) {\n const id = nextTableColumnId(current);\n current.push({ id, name: `Column${id}` });\n }\n }\n\n autoFilterRangeAddress(): string | undefined {\n return this.model.autoFilterRef;\n }\n\n setAutoFilterRange(address: string | undefined): void {\n if (address !== undefined) parseRangeAddress(address);\n this.model.autoFilterRef = address;\n if (address === undefined) {\n delete this.model.autoFilter;\n } else {\n this.model.autoFilter ??= { ref: address, filterColumns: [] };\n this.model.autoFilter.ref = address;\n }\n }\n\n headerRowCount(): number | undefined {\n return this.model.headerRowCount;\n }\n\n setHeaderRowCount(count: number | undefined): void {\n assertOptionalNonNegativeInteger(count, 'ExcelTable.setHeaderRowCount');\n this.model.headerRowCount = count;\n }\n\n totalsRowCount(): number | undefined {\n return this.model.totalsRowCount;\n }\n\n setTotalsRowCount(count: number | undefined): void {\n assertOptionalNonNegativeInteger(count, 'ExcelTable.setTotalsRowCount');\n this.model.totalsRowCount = count;\n }\n\n totalsRowShown(): boolean | undefined {\n return this.model.totalsRowShown;\n }\n\n setTotalsRowShown(value: boolean | undefined): void {\n this.model.totalsRowShown = value;\n }\n\n autoFilter(): ExcelTableAutoFilterModel | undefined {\n return this.model.autoFilter ? cloneAutoFilter(this.model.autoFilter) : undefined;\n }\n\n setAutoFilter(model: ExcelTableAutoFilterModel | undefined): void {\n if (!model) {\n delete this.model.autoFilter;\n delete this.model.autoFilterRef;\n return;\n }\n const copy = cloneAutoFilter(model);\n if (copy.ref) parseRangeAddress(copy.ref);\n this.model.autoFilter = copy;\n this.model.autoFilterRef = copy.ref;\n }\n\n sortState(): ExcelTableSortStateModel | undefined {\n return this.model.autoFilter?.sortState ? cloneSortState(this.model.autoFilter.sortState) : undefined;\n }\n\n setSortState(sortState: ExcelTableSortStateModel | undefined): void {\n if (!sortState) {\n if (this.model.autoFilter) delete this.model.autoFilter.sortState;\n return;\n }\n this.model.autoFilter ??= { ref: this.model.autoFilterRef ?? this.model.ref, filterColumns: [] };\n this.model.autoFilter.sortState = cloneSortState(sortState);\n }\n\n toModel(): ExcelTableModel {\n return cloneTable(this.model);\n }\n\n delete(): void {\n this.remove?.();\n }\n}\n\nexport class ExcelTableColumn {\n constructor(\n private readonly model: ExcelTableColumnModel,\n private readonly remove?: () => void,\n ) {}\n\n id(): number {\n return this.model.id;\n }\n\n name(): string {\n return this.model.name;\n }\n\n setName(name: string): void {\n this.model.name = name;\n }\n\n totalsRowLabel(): string | undefined {\n return this.model.totalsRowLabel;\n }\n\n setTotalsRowLabel(label: string | undefined): void {\n this.model.totalsRowLabel = label;\n }\n\n totalsRowFunction(): string | undefined {\n return this.model.totalsRowFunction;\n }\n\n setTotalsRowFunction(fn: string | undefined): void {\n this.model.totalsRowFunction = fn;\n }\n\n toModel(): ExcelTableColumnModel {\n return { ...this.model };\n }\n\n delete(): void {\n this.remove?.();\n }\n}\n\nexport class ExcelTableColumnCollection {\n constructor(private readonly getModels: () => ExcelTableColumnModel[]) {}\n\n items(): ExcelTableColumn[] {\n return this.getModels().map((model) => this.wrap(model));\n }\n\n getItem(nameOrId: string | number): ExcelTableColumn {\n const item = this.getItemOrNullObject(nameOrId);\n if (!item) throw new Error(`ExcelTableColumnCollection: column not found: ${nameOrId}`);\n return item;\n }\n\n getItemOrNullObject(nameOrId: string | number): ExcelTableColumn | null {\n const model = this.getModels().find((column) => column.name === nameOrId || column.id === nameOrId);\n return model ? this.wrap(model) : null;\n }\n\n add(model: ExcelTableColumnModel): ExcelTableColumn {\n const models = this.getModels();\n if (models.some((column) => column.name === model.name || column.id === model.id)) {\n throw new Error(`ExcelTableColumnCollection: duplicate column: ${model.name || model.id}`);\n }\n const copy = { ...model, id: model.id ?? nextTableColumnId(models) };\n this.getModels().push(copy);\n return this.wrap(copy);\n }\n\n delete(nameOrId: string | number): void {\n const models = this.getModels();\n const index = models.findIndex((column) => column.name === nameOrId || column.id === nameOrId);\n if (index >= 0) models.splice(index, 1);\n }\n\n deleteItem(nameOrId: string | number): void {\n const models = this.getModels();\n const index = models.findIndex((column) => column.name === nameOrId || column.id === nameOrId);\n if (index === -1) throw new Error(`ExcelTableColumnCollection: column not found: ${nameOrId}`);\n models.splice(index, 1);\n }\n\n toModel(): ExcelTableColumnModel[] {\n return this.getModels().map((column) => ({ ...column }));\n }\n\n private wrap(model: ExcelTableColumnModel): ExcelTableColumn {\n return new ExcelTableColumn(model, () => {\n const models = this.getModels();\n const index = models.indexOf(model);\n if (index >= 0) models.splice(index, 1);\n });\n }\n}\n\nexport class ExcelTableStyle {\n constructor(private readonly getModel: () => ExcelTableStyleModel) {}\n\n name(): string | undefined {\n return this.getModel().name;\n }\n\n setName(name: string | undefined): void {\n this.getModel().name = name;\n }\n\n showFirstColumn(): boolean | undefined {\n return this.getModel().showFirstColumn;\n }\n\n setShowFirstColumn(value: boolean | undefined): void {\n this.getModel().showFirstColumn = value;\n }\n\n showLastColumn(): boolean | undefined {\n return this.getModel().showLastColumn;\n }\n\n setShowLastColumn(value: boolean | undefined): void {\n this.getModel().showLastColumn = value;\n }\n\n showRowStripes(): boolean | undefined {\n return this.getModel().showRowStripes;\n }\n\n setShowRowStripes(value: boolean | undefined): void {\n this.getModel().showRowStripes = value;\n }\n\n showColumnStripes(): boolean | undefined {\n return this.getModel().showColumnStripes;\n }\n\n setShowColumnStripes(value: boolean | undefined): void {\n this.getModel().showColumnStripes = value;\n }\n\n toModel(): ExcelTableStyleModel {\n return { ...this.getModel() };\n }\n}\n\nexport class ExcelTableCollection {\n constructor(private readonly getModels: () => ExcelTableModel[]) {}\n\n items(): ExcelTable[] {\n return this.getModels().map((model) => this.wrap(model));\n }\n\n getItem(nameOrDisplayName: string): ExcelTable {\n const item = this.getItemOrNullObject(nameOrDisplayName);\n if (!item) throw new Error(`ExcelTableCollection: table not found: ${nameOrDisplayName}`);\n return item;\n }\n\n getItemOrNullObject(nameOrDisplayName: string): ExcelTable | null {\n const model =\n this.getModels().find((table) => table.name === nameOrDisplayName || table.displayName === nameOrDisplayName) ??\n null;\n return model ? this.wrap(model) : null;\n }\n\n add(model: ExcelTableModel): ExcelTable {\n const copy = cloneTable(model);\n this.getModels().push(copy);\n return this.wrap(copy);\n }\n\n delete(nameOrDisplayName: string): void {\n const models = this.getModels();\n const index = models.findIndex((table) => table.name === nameOrDisplayName || table.displayName === nameOrDisplayName);\n if (index >= 0) models.splice(index, 1);\n }\n\n toModel(): ExcelTableModel[] {\n return this.getModels().map((model) => cloneTable(model));\n }\n\n private wrap(model: ExcelTableModel): ExcelTable {\n return new ExcelTable(model, () => {\n const models = this.getModels();\n const index = models.indexOf(model);\n if (index >= 0) models.splice(index, 1);\n });\n }\n}\n\nexport class ExcelHyperlink {\n constructor(\n private readonly model: ExcelHyperlinkModel,\n private readonly remove?: () => void,\n ) {}\n\n ref(): string {\n return this.model.ref;\n }\n\n setRef(ref: string): void {\n this.model.ref = ref;\n }\n\n target(): string | undefined {\n return this.model.target;\n }\n\n targetMode(): string | undefined {\n return this.model.targetMode;\n }\n\n display(): string | undefined {\n return this.model.display;\n }\n\n setDisplay(display: string | undefined): void {\n this.model.display = display;\n }\n\n setLocation(location: string | undefined): void {\n this.model.location = location;\n }\n\n toModel(): ExcelHyperlinkModel {\n return { ...this.model };\n }\n\n delete(): void {\n this.remove?.();\n }\n}\n\nexport class ExcelHyperlinkCollection {\n constructor(private readonly getModels: () => ExcelHyperlinkModel[]) {}\n\n items(): ExcelHyperlink[] {\n return this.getModels().map((model) => this.wrap(model));\n }\n\n add(model: ExcelHyperlinkModel): ExcelHyperlink {\n const copy = { ...model };\n this.getModels().push(copy);\n return this.wrap(copy);\n }\n\n getItem(ref: string): ExcelHyperlink {\n const item = this.getItemOrNullObject(ref);\n if (!item) throw new Error(`hyperlink not found: ${ref}`);\n return item;\n }\n\n getItemOrNullObject(ref: string): ExcelHyperlink | null {\n const model = this.getModels().find((item) => item.ref === ref);\n return model ? this.wrap(model) : null;\n }\n\n delete(ref: string): void {\n const models = this.getModels();\n for (let i = models.length - 1; i >= 0; i--) {\n if (models[i]?.ref === ref) models.splice(i, 1);\n }\n }\n\n toModel(): ExcelHyperlinkModel[] {\n return this.getModels().map((model) => ({ ...model }));\n }\n\n private wrap(model: ExcelHyperlinkModel): ExcelHyperlink {\n return new ExcelHyperlink(model, () => {\n const models = this.getModels();\n const index = models.indexOf(model);\n if (index >= 0) models.splice(index, 1);\n });\n }\n}\n\nexport class ExcelDataValidation {\n constructor(\n private readonly model: ExcelDataValidationModel,\n private readonly remove?: () => void,\n ) {}\n\n rangeAddress(): string | undefined {\n return this.model.sqref;\n }\n\n setRange(address: string): void {\n this.model.sqref = address;\n }\n\n type(): string | undefined {\n return this.model.type;\n }\n\n setType(type: string | undefined): void {\n this.model.type = type;\n }\n\n operator(): string | undefined {\n return this.model.operator;\n }\n\n setOperator(operator: string | undefined): void {\n this.model.operator = operator;\n }\n\n allowBlank(): boolean | undefined {\n return this.model.allowBlank;\n }\n\n setAllowBlank(value: boolean | undefined): void {\n this.model.allowBlank = value;\n }\n\n showDropDown(): boolean | undefined {\n return this.model.showDropDown;\n }\n\n setShowDropDown(value: boolean | undefined): void {\n this.model.showDropDown = value;\n }\n\n showInputMessage(): boolean | undefined {\n return this.model.showInputMessage;\n }\n\n setShowInputMessage(value: boolean | undefined): void {\n this.model.showInputMessage = value;\n }\n\n showErrorMessage(): boolean | undefined {\n return this.model.showErrorMessage;\n }\n\n setShowErrorMessage(value: boolean | undefined): void {\n this.model.showErrorMessage = value;\n }\n\n errorStyle(): string | undefined {\n return this.model.errorStyle;\n }\n\n setErrorStyle(style: string | undefined): void {\n this.model.errorStyle = style;\n }\n\n errorTitle(): string | undefined {\n return this.model.errorTitle;\n }\n\n error(): string | undefined {\n return this.model.error;\n }\n\n setError(title: string | undefined, message: string | undefined): void {\n this.model.errorTitle = title;\n this.model.error = message;\n }\n\n promptTitle(): string | undefined {\n return this.model.promptTitle;\n }\n\n prompt(): string | undefined {\n return this.model.prompt;\n }\n\n setPrompt(title: string | undefined, message: string | undefined): void {\n this.model.promptTitle = title;\n this.model.prompt = message;\n }\n\n formula1(): string | undefined {\n return this.model.formula1;\n }\n\n setFormula1(formula: string | undefined): void {\n this.model.formula1 = formula;\n }\n\n formula2(): string | undefined {\n return this.model.formula2;\n }\n\n setFormula2(formula: string | undefined): void {\n this.model.formula2 = formula;\n }\n\n toModel(): ExcelDataValidationModel {\n return { ...this.model };\n }\n\n delete(): void {\n this.remove?.();\n }\n}\n\nexport class ExcelDataValidationCollection {\n constructor(private readonly getModels: () => ExcelDataValidationModel[]) {}\n\n items(): ExcelDataValidation[] {\n return this.getModels().map((model) => this.wrap(model));\n }\n\n add(model: ExcelDataValidationModel): ExcelDataValidation {\n const copy = { ...model };\n this.getModels().push(copy);\n return this.wrap(copy);\n }\n\n getItem(rangeAddress: string): ExcelDataValidation {\n const item = this.getItemOrNullObject(rangeAddress);\n if (!item) throw new Error(`data validation not found: ${rangeAddress}`);\n return item;\n }\n\n getItemOrNullObject(rangeAddress: string): ExcelDataValidation | null {\n const model = this.getModels().find((validation) => validation.sqref === rangeAddress);\n return model ? this.wrap(model) : null;\n }\n\n delete(rangeAddress: string): void {\n const models = this.getModels();\n for (let i = models.length - 1; i >= 0; i--) {\n if (models[i]?.sqref === rangeAddress) models.splice(i, 1);\n }\n }\n\n toModel(): ExcelDataValidationModel[] {\n return this.getModels().map((model) => ({ ...model }));\n }\n\n private wrap(model: ExcelDataValidationModel): ExcelDataValidation {\n return new ExcelDataValidation(model, () => {\n const models = this.getModels();\n const index = models.indexOf(model);\n if (index >= 0) models.splice(index, 1);\n });\n }\n}\n\nexport class ExcelConditionalFormat {\n readonly rules: ExcelConditionalFormatRuleCollection;\n\n constructor(\n private readonly model: ExcelConditionalFormatModel,\n private readonly remove?: () => void,\n ) {\n this.rules = new ExcelConditionalFormatRuleCollection(() => this.model.rules);\n }\n\n rangeAddress(): string | undefined {\n return this.model.sqref;\n }\n\n setRange(address: string): void {\n this.model.sqref = address;\n }\n\n toModel(): ExcelConditionalFormatModel {\n return cloneConditionalFormat(this.model);\n }\n\n delete(): void {\n this.remove?.();\n }\n}\n\nexport class ExcelConditionalFormatRule {\n constructor(\n private readonly model: ExcelConditionalFormatRuleModel,\n private readonly remove?: () => void,\n ) {}\n\n type(): string | undefined {\n return this.model.type;\n }\n\n setType(type: string | undefined): void {\n this.model.type = type;\n }\n\n priority(): number | undefined {\n return this.model.priority;\n }\n\n setPriority(priority: number | undefined): void {\n this.model.priority = priority;\n }\n\n operator(): string | undefined {\n return this.model.operator;\n }\n\n setOperator(operator: string | undefined): void {\n this.model.operator = operator;\n }\n\n stopIfTrue(): boolean | undefined {\n return this.model.stopIfTrue;\n }\n\n setStopIfTrue(value: boolean | undefined): void {\n this.model.stopIfTrue = value;\n }\n\n formulas(): string[] {\n return [...this.model.formulas];\n }\n\n setFormula(index: number, formula: string): void {\n this.model.formulas[index] = formula;\n }\n\n addFormula(formula: string): void {\n this.model.formulas.push(formula);\n }\n\n deleteFormula(index: number): void {\n this.model.formulas.splice(index, 1);\n }\n\n toModel(): ExcelConditionalFormatRuleModel {\n return { ...this.model, formulas: [...this.model.formulas] };\n }\n\n delete(): void {\n this.remove?.();\n }\n}\n\nexport class ExcelConditionalFormatRuleCollection {\n constructor(private readonly getModels: () => ExcelConditionalFormatRuleModel[]) {}\n\n items(): ExcelConditionalFormatRule[] {\n return this.getModels().map((model) => this.wrap(model));\n }\n\n getItem(index: number): ExcelConditionalFormatRule {\n const item = this.getItemOrNullObject(index);\n if (!item) throw new Error(`conditional format rule not found: ${index}`);\n return item;\n }\n\n getItemOrNullObject(index: number): ExcelConditionalFormatRule | null {\n const model = this.getModels()[index];\n return model ? this.wrap(model) : null;\n }\n\n add(model: ExcelConditionalFormatRuleModel): ExcelConditionalFormatRule {\n const copy = { ...model, formulas: [...model.formulas] };\n this.getModels().push(copy);\n return this.wrap(copy);\n }\n\n delete(index: number): void {\n this.getModels().splice(index, 1);\n }\n\n toModel(): ExcelConditionalFormatRuleModel[] {\n return this.getModels().map((model) => ({ ...model, formulas: [...model.formulas] }));\n }\n\n private wrap(model: ExcelConditionalFormatRuleModel): ExcelConditionalFormatRule {\n return new ExcelConditionalFormatRule(model, () => {\n const models = this.getModels();\n const index = models.indexOf(model);\n if (index >= 0) models.splice(index, 1);\n });\n }\n}\n\nexport class ExcelConditionalFormatCollection {\n constructor(private readonly getModels: () => ExcelConditionalFormatModel[]) {}\n\n items(): ExcelConditionalFormat[] {\n return this.getModels().map((model) => this.wrap(model));\n }\n\n add(model: ExcelConditionalFormatModel): ExcelConditionalFormat {\n const copy = cloneConditionalFormat(model);\n this.getModels().push(copy);\n return this.wrap(copy);\n }\n\n getItem(rangeAddress: string): ExcelConditionalFormat {\n const item = this.getItemOrNullObject(rangeAddress);\n if (!item) throw new Error(`conditional format not found: ${rangeAddress}`);\n return item;\n }\n\n getItemOrNullObject(rangeAddress: string): ExcelConditionalFormat | null {\n const model = this.getModels().find((format) => format.sqref === rangeAddress);\n return model ? this.wrap(model) : null;\n }\n\n delete(rangeAddress: string): void {\n const models = this.getModels();\n for (let i = models.length - 1; i >= 0; i--) {\n if (models[i]?.sqref === rangeAddress) models.splice(i, 1);\n }\n }\n\n toModel(): ExcelConditionalFormatModel[] {\n return this.getModels().map((model) => cloneConditionalFormat(model));\n }\n\n private wrap(model: ExcelConditionalFormatModel): ExcelConditionalFormat {\n return new ExcelConditionalFormat(model, () => {\n const models = this.getModels();\n const index = models.indexOf(model);\n if (index >= 0) models.splice(index, 1);\n });\n }\n}\n\nexport class ExcelComment {\n constructor(\n private readonly model: ExcelCommentModel,\n private readonly remove?: () => void,\n ) {}\n\n ref(): string {\n return this.model.ref;\n }\n\n setRef(ref: string): void {\n this.model.ref = ref;\n }\n\n text(): string {\n return this.model.text;\n }\n\n setText(text: string): void {\n this.model.text = text;\n }\n\n toModel(): ExcelCommentModel {\n return { ...this.model };\n }\n\n delete(): void {\n this.remove?.();\n }\n}\n\nexport class ExcelCommentCollection {\n constructor(private readonly getModels: () => ExcelCommentModel[]) {}\n\n items(): ExcelComment[] {\n return this.getModels().map((model) => this.wrap(model));\n }\n\n add(model: ExcelCommentModel): ExcelComment {\n const copy = { ...model };\n this.getModels().push(copy);\n return this.wrap(copy);\n }\n\n getItem(ref: string): ExcelComment {\n const item = this.getItemOrNullObject(ref);\n if (!item) throw new Error(`comment not found: ${ref}`);\n return item;\n }\n\n getItemOrNullObject(ref: string): ExcelComment | null {\n const model = this.getModels().find((comment) => comment.ref === ref);\n return model ? this.wrap(model) : null;\n }\n\n delete(ref: string): void {\n const models = this.getModels();\n for (let i = models.length - 1; i >= 0; i--) {\n if (models[i]?.ref === ref) models.splice(i, 1);\n }\n }\n\n toModel(): ExcelCommentModel[] {\n return this.getModels().map((model) => ({ ...model }));\n }\n\n private wrap(model: ExcelCommentModel): ExcelComment {\n return new ExcelComment(model, () => {\n const models = this.getModels();\n const index = models.indexOf(model);\n if (index >= 0) models.splice(index, 1);\n });\n }\n}\n\nexport class ExcelThreadedComment {\n constructor(\n private readonly model: ExcelThreadedCommentModel,\n private readonly deleteSelf?: () => void,\n ) {}\n\n ref(): string {\n return this.model.ref;\n }\n\n setRef(ref: string): void {\n this.model.ref = ref;\n }\n\n text(): string {\n return this.model.text;\n }\n\n setText(text: string): void {\n this.model.text = text;\n }\n\n delete(): void {\n this.deleteSelf?.();\n }\n\n toModel(): ExcelThreadedCommentModel {\n return { ...this.model };\n }\n}\n\nexport class ExcelThreadedCommentCollection {\n constructor(private readonly getModels: () => ExcelThreadedCommentModel[]) {}\n\n items(): ExcelThreadedComment[] {\n return this.getModels().map((model) => this.wrap(model));\n }\n\n getItem(ref: string): ExcelThreadedComment {\n const item = this.getItemOrNullObject(ref);\n if (!item) throw new Error(`threaded comment not found: ${ref}`);\n return item;\n }\n\n getItemOrNullObject(ref: string): ExcelThreadedComment | null {\n const model = this.getModels().find((comment) => comment.ref === ref);\n return model ? this.wrap(model) : null;\n }\n\n delete(ref: string): void {\n const models = this.getModels();\n const index = models.findIndex((comment) => comment.ref === ref);\n if (index >= 0) models.splice(index, 1);\n }\n\n toModel(): ExcelThreadedCommentModel[] {\n return this.getModels().map((model) => ({ ...model }));\n }\n\n private wrap(model: ExcelThreadedCommentModel): ExcelThreadedComment {\n return new ExcelThreadedComment(model, () => {\n const models = this.getModels();\n const index = models.indexOf(model);\n if (index >= 0) models.splice(index, 1);\n });\n }\n}\n\nexport class ExcelDrawingCollection {\n constructor(private readonly getModels: () => ExcelDrawingModel[]) {}\n\n items(): ExcelDrawing[] {\n return this.getModels().map((model) => new ExcelDrawing(model));\n }\n\n toModel(): ExcelDrawingModel[] {\n return this.getModels().map((drawing) => ({\n ...drawing,\n anchors: drawing.anchors.map((anchor) => ({\n ...anchor,\n from: anchor.from ? { ...anchor.from } : undefined,\n to: anchor.to ? { ...anchor.to } : undefined,\n object: anchor.object ? { ...anchor.object } : undefined,\n })),\n }));\n }\n}\n\nexport class ExcelDrawing {\n readonly anchors: ExcelDrawingAnchorCollection;\n\n constructor(private readonly model: ExcelDrawingModel) {\n this.anchors = new ExcelDrawingAnchorCollection(() => this.model.anchors);\n }\n\n relationshipId(): string | undefined {\n return this.model.relationshipId;\n }\n\n path(): string | undefined {\n return this.model.path;\n }\n\n toModel(): ExcelDrawingModel {\n return cloneDrawing(this.model);\n }\n}\n\nexport class ExcelDrawingAnchorCollection {\n constructor(private readonly getModels: () => ExcelDrawingAnchorModel[]) {}\n\n items(): ExcelDrawingAnchor[] {\n return this.getModels().map((model) => new ExcelDrawingAnchor(model));\n }\n\n getItem(index: number): ExcelDrawingAnchor {\n const item = this.getItemOrNullObject(index);\n if (!item) throw new Error(`drawing anchor not found: ${index}`);\n return item;\n }\n\n getItemOrNullObject(index: number): ExcelDrawingAnchor | null {\n const model = this.getModels()[index];\n return model ? new ExcelDrawingAnchor(model) : null;\n }\n\n toModel(): ExcelDrawingAnchorModel[] {\n return this.getModels().map((anchor) => cloneDrawingAnchor(anchor));\n }\n}\n\nexport class ExcelDrawingAnchor {\n readonly from: ExcelDrawingMarker;\n readonly to: ExcelDrawingMarker;\n\n constructor(private readonly model: ExcelDrawingAnchorModel) {\n this.from = new ExcelDrawingMarker(() => (this.model.from ??= {}));\n this.to = new ExcelDrawingMarker(() => (this.model.to ??= {}));\n }\n\n kind(): ExcelDrawingAnchorModel['kind'] {\n return this.model.kind;\n }\n\n object(): ExcelDrawingAnchorModel['object'] | undefined {\n return this.model.object ? { ...this.model.object } : undefined;\n }\n\n toModel(): ExcelDrawingAnchorModel {\n return cloneDrawingAnchor(this.model);\n }\n}\n\nexport class ExcelDrawingMarker {\n constructor(private readonly getModel: () => ExcelDrawingMarkerModel) {}\n\n row(): number | undefined {\n return this.getModel().row;\n }\n\n setRow(row: number | undefined): void {\n this.getModel().row = row;\n }\n\n column(): number | undefined {\n return this.getModel().column;\n }\n\n setColumn(column: number | undefined): void {\n this.getModel().column = column;\n }\n\n rowOffset(): number | undefined {\n return this.getModel().rowOffset;\n }\n\n setRowOffset(offset: number | undefined): void {\n this.getModel().rowOffset = offset;\n }\n\n columnOffset(): number | undefined {\n return this.getModel().columnOffset;\n }\n\n setColumnOffset(offset: number | undefined): void {\n this.getModel().columnOffset = offset;\n }\n\n toModel(): ExcelDrawingMarkerModel {\n return { ...this.getModel() };\n }\n}\n\nexport class ExcelChartCollection {\n constructor(\n private readonly getModels: () => ExcelChartModel[],\n private readonly getDrawings?: () => ExcelDrawingModel[],\n ) {}\n\n items(): ExcelChart[] {\n return this.getModels().map((model) => new ExcelChart(model));\n }\n\n add(options: ExcelChartAddOptions): ExcelChart {\n validateChartAddOptions(options);\n const models = this.getModels();\n const chart: ExcelChartModel = {\n type: options.type,\n title: options.title,\n categoryRange: options.categoryRange,\n series: options.series.map((series) => ({ ...series })),\n position: {\n from: { ...options.position.from },\n to: { ...options.position.to },\n },\n formulaRefs: chartFormulaRefs(options),\n };\n models.push(chart);\n const drawings = this.getDrawings?.();\n if (drawings) {\n const drawing = drawings[0] ?? { anchors: [] };\n if (!drawings[0]) drawings.push(drawing);\n drawing.anchors.push({\n kind: 'twoCell',\n from: { ...options.position.from },\n to: { ...options.position.to },\n object: {\n kind: 'chart',\n name: options.title,\n },\n });\n }\n return new ExcelChart(chart);\n }\n\n toModel(): ExcelChartModel[] {\n return this.getModels().map((chart) => ({\n ...chart,\n series: chart.series?.map((series) => ({ ...series })),\n position: chart.position\n ? { from: { ...chart.position.from }, to: { ...chart.position.to } }\n : undefined,\n formulaRefs: [...chart.formulaRefs],\n }));\n }\n}\n\nfunction chartFormulaRefs(options: ExcelChartAddOptions): string[] {\n return [\n options.categoryRange,\n ...options.series.flatMap((series) =>\n series.name?.includes('!') || series.name?.includes('$')\n ? [series.name, series.values]\n : [series.values],\n ),\n ];\n}\n\nfunction validateChartAddOptions(options: ExcelChartAddOptions): void {\n if (!options.type) throw new Error('ExcelChartCollection.add: chart type is required');\n if (!options.categoryRange) throw new Error('ExcelChartCollection.add: categoryRange is required');\n if (!options.series.length) throw new Error('ExcelChartCollection.add: at least one series is required');\n if ((options.type === 'pie' || options.type === 'doughnut') && options.series.length !== 1) {\n throw new Error(`ExcelChartCollection.add: ${options.type} charts require exactly one series`);\n }\n for (const series of options.series) {\n if (!series.values) throw new Error('ExcelChartCollection.add: series values range is required');\n }\n}\n\nexport class ExcelChart {\n readonly formulaRefs: ExcelFormulaRefCollection;\n\n constructor(private readonly model: ExcelChartModel) {\n this.formulaRefs = new ExcelFormulaRefCollection(() => this.model.formulaRefs);\n }\n\n relationshipId(): string | undefined {\n return this.model.relationshipId;\n }\n\n drawingPath(): string | undefined {\n return this.model.drawingPath;\n }\n\n path(): string | undefined {\n return this.model.path;\n }\n\n title(): string | undefined {\n return this.model.title;\n }\n\n setTitle(title: string | undefined): void {\n this.model.title = title;\n }\n\n toModel(): ExcelChartModel {\n return { ...this.model, formulaRefs: [...this.model.formulaRefs] };\n }\n}\n\nexport class ExcelFormulaRefCollection {\n constructor(private readonly getModels: () => string[]) {}\n\n items(): string[] {\n return [...this.getModels()];\n }\n\n getItem(index: number): string | undefined {\n return this.getModels()[index];\n }\n\n setItem(index: number, formulaRef: string): void {\n this.getModels()[index] = formulaRef;\n }\n\n add(formulaRef: string): void {\n this.getModels().push(formulaRef);\n }\n\n delete(index: number): void {\n this.getModels().splice(index, 1);\n }\n\n toModel(): string[] {\n return this.items();\n }\n}\n\nexport class ExcelImageCollection {\n constructor(private readonly getModels: () => ExcelImageModel[]) {}\n\n items(): ExcelImage[] {\n return this.getModels().map((model) => new ExcelImage(model));\n }\n\n toModel(): ExcelImageModel[] {\n return this.getModels().map((image) => ({ ...image }));\n }\n}\n\nexport class ExcelImage {\n constructor(private readonly model: ExcelImageModel) {}\n\n relationshipId(): string | undefined {\n return this.model.relationshipId;\n }\n\n drawingPath(): string | undefined {\n return this.model.drawingPath;\n }\n\n path(): string | undefined {\n return this.model.path;\n }\n\n targetMode(): string | undefined {\n return this.model.targetMode;\n }\n\n name(): string | undefined {\n return this.model.name;\n }\n\n toModel(): ExcelImageModel {\n return { ...this.model };\n }\n}\n\nexport class ExcelShapeCollection {\n constructor(private readonly getDrawings: () => ExcelDrawingModel[]) {}\n\n items(): ExcelShape[] {\n return this.getShapeEntries().map((entry) => new ExcelShape(entry));\n }\n\n getItem(name: string): ExcelShape {\n const item = this.getItemOrNullObject(name);\n if (!item) throw new Error(`shape not found: ${name}`);\n return item;\n }\n\n getItemOrNullObject(name: string): ExcelShape | null {\n const entry = this.getShapeEntries().find((item) => item.anchor.object?.name === name);\n return entry ? new ExcelShape(entry) : null;\n }\n\n toModel(): ExcelShapeModel[] {\n return this.getShapeEntries().map((entry) => ({\n drawingPath: entry.drawing.path,\n name: entry.anchor.object?.name,\n anchor: cloneDrawingAnchor(entry.anchor),\n }));\n }\n\n private getShapeEntries(): ExcelShapeEntry[] {\n return this.getDrawings().flatMap((drawing) =>\n drawing.anchors\n .filter((anchor) => anchor.object?.kind === 'shape')\n .map((anchor) => ({ drawing, anchor })),\n );\n }\n}\n\nexport class ExcelShape {\n readonly anchor: ExcelDrawingAnchor;\n\n constructor(private readonly entry: ExcelShapeEntry) {\n this.anchor = new ExcelDrawingAnchor(entry.anchor);\n }\n\n drawingPath(): string | undefined {\n return this.entry.drawing.path;\n }\n\n name(): string | undefined {\n return this.entry.anchor.object?.name;\n }\n\n setName(name: string | undefined): void {\n this.entry.anchor.object ??= { kind: 'shape' };\n this.entry.anchor.object.name = name;\n }\n\n toModel(): ExcelShapeModel {\n return {\n drawingPath: this.entry.drawing.path,\n name: this.entry.anchor.object?.name,\n anchor: cloneDrawingAnchor(this.entry.anchor),\n };\n }\n}\n\ninterface ExcelShapeEntry {\n drawing: ExcelDrawingModel;\n anchor: ExcelDrawingAnchorModel;\n}\n\nfunction cloneTable(table: ExcelTableModel): ExcelTableModel {\n return {\n ...table,\n columns: table.columns.map((column) => ({ ...column })),\n autoFilter: table.autoFilter ? cloneAutoFilter(table.autoFilter) : undefined,\n style: table.style ? { ...table.style } : undefined,\n };\n}\n\nfunction cloneAutoFilter(autoFilter: ExcelTableAutoFilterModel): ExcelTableAutoFilterModel {\n const clone = {\n ...autoFilter,\n filterColumns: autoFilter.filterColumns.map((column) => ({\n ...column,\n filters: column.filters ? [...column.filters] : undefined,\n })),\n sortState: autoFilter.sortState ? cloneSortState(autoFilter.sortState) : undefined,\n };\n if (clone.sortState === undefined) delete clone.sortState;\n for (const column of clone.filterColumns) {\n if (column.filters === undefined) delete column.filters;\n }\n return clone;\n}\n\nfunction cloneSortState(sortState: ExcelTableSortStateModel): ExcelTableSortStateModel {\n return {\n ...sortState,\n conditions: sortState.conditions.map((condition) => ({ ...condition })),\n };\n}\n\nfunction nextTableColumnId(columns: ExcelTableColumnModel[]): number {\n return columns.reduce((max, column) => Math.max(max, column.id), 0) + 1;\n}\n\nfunction assertOptionalNonNegativeInteger(value: number | undefined, operation: string): void {\n if (value !== undefined && (!Number.isInteger(value) || value < 0)) {\n throw new Error(`${operation}: value must be a non-negative integer`);\n }\n}\n\nfunction cloneDrawing(drawing: ExcelDrawingModel): ExcelDrawingModel {\n return {\n ...drawing,\n anchors: drawing.anchors.map((anchor) => cloneDrawingAnchor(anchor)),\n };\n}\n\nfunction cloneDrawingAnchor(anchor: ExcelDrawingAnchorModel): ExcelDrawingAnchorModel {\n return {\n ...anchor,\n from: anchor.from ? { ...anchor.from } : undefined,\n to: anchor.to ? { ...anchor.to } : undefined,\n object: anchor.object ? { ...anchor.object } : undefined,\n };\n}\n\nfunction cloneConditionalFormat(format: ExcelConditionalFormatModel): ExcelConditionalFormatModel {\n return {\n ...format,\n rules: format.rules.map((rule) => ({\n ...rule,\n formulas: [...rule.formulas],\n })),\n };\n}\n","import { columnIndexToName, columnNameToIndex, splitSheetQualifiedAddress } from './address.js';\n\nexport interface ExcelReferenceRewriteOptions {\n sheetName?: string;\n}\n\nexport type ExcelReferenceRewriteResult =\n | { ok: true; address: string }\n | { ok: false; address: '#REF!' };\n\nexport type ExcelFormulaReferenceRewriter = (reference: string) => ExcelReferenceRewriteResult;\n\ninterface CellRef {\n row: number;\n column: number;\n rowAbsolute?: boolean;\n columnAbsolute?: boolean;\n}\n\ninterface RangeRef {\n sheetName?: string;\n start: CellRef;\n end: CellRef;\n}\n\ninterface AxisDelete {\n start: number;\n count: number;\n}\n\nexport function renameSheetInReference(address: string, oldName: string, newName: string): string {\n const ref = parseReference(address);\n if (ref.sheetName !== oldName) return formatReference(ref);\n return formatReference({ ...ref, sheetName: newName });\n}\n\nexport function rewriteFormulaReferences(\n formula: string,\n rewrite: ExcelFormulaReferenceRewriter,\n): string {\n let output = '';\n let index = 0;\n while (index < formula.length) {\n const ch = formula[index];\n if (ch === '\"') {\n const literal = readFormulaStringLiteral(formula, index);\n output += literal.text;\n index = literal.end;\n continue;\n }\n\n const match = matchReferenceAt(formula, index);\n if (!match) {\n output += ch;\n index += 1;\n continue;\n }\n\n const rewritten = rewrite(match.reference);\n output += rewritten.ok ? rewritten.address : rewritten.address;\n index = match.end;\n }\n return output;\n}\n\nexport function renameSheetInFormula(formula: string, oldName: string, newName: string): string {\n return rewriteFormulaReferences(formula, (reference) => ({\n ok: true,\n address: renameSheetInReference(reference, oldName, newName),\n }));\n}\n\nexport function rewriteFormulaForRowInsert(\n formula: string,\n rowIndex: number,\n count = 1,\n options: ExcelReferenceRewriteOptions = {},\n): string {\n return rewriteFormulaReferences(formula, (reference) =>\n rewriteReferenceForRowInsert(reference, rowIndex, count, options),\n );\n}\n\nexport function rewriteFormulaForRowDelete(\n formula: string,\n rowIndex: number,\n count = 1,\n options: ExcelReferenceRewriteOptions = {},\n): string {\n return rewriteFormulaReferences(formula, (reference) =>\n rewriteReferenceForRowDelete(reference, rowIndex, count, options),\n );\n}\n\nexport function rewriteFormulaForColumnInsert(\n formula: string,\n columnIndex: number,\n count = 1,\n options: ExcelReferenceRewriteOptions = {},\n): string {\n return rewriteFormulaReferences(formula, (reference) =>\n rewriteReferenceForColumnInsert(reference, columnIndex, count, options),\n );\n}\n\nexport function rewriteFormulaForColumnDelete(\n formula: string,\n columnIndex: number,\n count = 1,\n options: ExcelReferenceRewriteOptions = {},\n): string {\n return rewriteFormulaReferences(formula, (reference) =>\n rewriteReferenceForColumnDelete(reference, columnIndex, count, options),\n );\n}\n\n/**\n * Rebase a formula as if its containing cell moved by the supplied offsets.\n * Relative row/column coordinates move; absolute coordinates and string literals stay unchanged.\n */\nexport function shiftFormulaReferences(\n formula: string,\n rowOffset: number,\n columnOffset: number,\n): string {\n assertInteger(rowOffset, 'rowOffset');\n assertInteger(columnOffset, 'columnOffset');\n return rewriteFormulaReferences(formula, (reference) => shiftReferenceRelative(reference, rowOffset, columnOffset));\n}\n\n/** Rewrites relative row references when a formula's source rows are reordered. */\nexport function rewriteFormulaForRowSort(\n formula: string,\n rowMap: ReadonlyMap<number, number>,\n options: ExcelReferenceRewriteOptions = {},\n): string {\n return rewriteFormulaReferences(formula, (reference) => {\n const ref = parseReference(reference);\n if (!isTargetSheet(ref, options.sheetName)) return { ok: true, address: formatReference(ref) };\n const rewriteCell = (cell: CellRef): CellRef => {\n const row = cell.rowAbsolute ? cell.row : rowMap.get(cell.row) ?? cell.row;\n return { ...cell, row };\n };\n return {\n ok: true,\n address: formatReference({ ...ref, start: rewriteCell(ref.start), end: rewriteCell(ref.end) }),\n };\n });\n}\n\nexport function shiftReferenceRelative(\n address: string,\n rowOffset: number,\n columnOffset: number,\n): ExcelReferenceRewriteResult {\n assertInteger(rowOffset, 'rowOffset');\n assertInteger(columnOffset, 'columnOffset');\n const ref = parseReference(address);\n const start = shiftCellRelative(ref.start, rowOffset, columnOffset);\n const end = shiftCellRelative(ref.end, rowOffset, columnOffset);\n if (!start || !end) return { ok: false, address: '#REF!' };\n return { ok: true, address: formatReference({ ...ref, start, end }) };\n}\n\nexport function rewriteReferenceForRowInsert(\n address: string,\n rowIndex: number,\n count = 1,\n options: ExcelReferenceRewriteOptions = {},\n): ExcelReferenceRewriteResult {\n assertPositiveInteger(rowIndex, 'rowIndex');\n assertPositiveInteger(count, 'count');\n const ref = parseReference(address);\n if (!isTargetSheet(ref, options.sheetName)) return { ok: true, address: formatReference(ref) };\n return {\n ok: true,\n address: formatReference({\n ...ref,\n start: shiftCellRowsForInsert(ref.start, rowIndex, count),\n end: shiftCellRowsForInsert(ref.end, rowIndex, count),\n }),\n };\n}\n\nexport function rewriteReferenceForRowDelete(\n address: string,\n rowIndex: number,\n count = 1,\n options: ExcelReferenceRewriteOptions = {},\n): ExcelReferenceRewriteResult {\n assertPositiveInteger(rowIndex, 'rowIndex');\n assertPositiveInteger(count, 'count');\n const ref = parseReference(address);\n if (!isTargetSheet(ref, options.sheetName)) return { ok: true, address: formatReference(ref) };\n const rows = rewriteAxisForDelete(ref.start.row, ref.end.row, { start: rowIndex, count });\n if (!rows) return { ok: false, address: '#REF!' };\n return {\n ok: true,\n address: formatReference({\n ...ref,\n start: { ...ref.start, row: rows.start },\n end: { ...ref.end, row: rows.end },\n }),\n };\n}\n\nexport function rewriteReferenceForColumnInsert(\n address: string,\n columnIndex: number,\n count = 1,\n options: ExcelReferenceRewriteOptions = {},\n): ExcelReferenceRewriteResult {\n assertPositiveInteger(columnIndex, 'columnIndex');\n assertPositiveInteger(count, 'count');\n const ref = parseReference(address);\n if (!isTargetSheet(ref, options.sheetName)) return { ok: true, address: formatReference(ref) };\n return {\n ok: true,\n address: formatReference({\n ...ref,\n start: shiftCellColumnsForInsert(ref.start, columnIndex, count),\n end: shiftCellColumnsForInsert(ref.end, columnIndex, count),\n }),\n };\n}\n\nexport function rewriteReferenceForColumnDelete(\n address: string,\n columnIndex: number,\n count = 1,\n options: ExcelReferenceRewriteOptions = {},\n): ExcelReferenceRewriteResult {\n assertPositiveInteger(columnIndex, 'columnIndex');\n assertPositiveInteger(count, 'count');\n const ref = parseReference(address);\n if (!isTargetSheet(ref, options.sheetName)) return { ok: true, address: formatReference(ref) };\n const columns = rewriteAxisForDelete(ref.start.column, ref.end.column, {\n start: columnIndex,\n count,\n });\n if (!columns) return { ok: false, address: '#REF!' };\n return {\n ok: true,\n address: formatReference({\n ...ref,\n start: { ...ref.start, column: columns.start },\n end: { ...ref.end, column: columns.end },\n }),\n };\n}\n\nfunction parseReference(address: string): RangeRef {\n const qualified = splitSheetQualifiedAddress(address);\n const parts = qualified.address.split(':');\n if (parts.length > 2 || !parts[0]) {\n throw new Error(`ExcelReference: invalid reference ${address}`);\n }\n const start = parseCellRef(parts[0]);\n const end = parseCellRef(parts[1] ?? parts[0]);\n const reversed = start.row > end.row || start.column > end.column;\n return {\n sheetName: qualified.sheetName,\n start: {\n row: Math.min(start.row, end.row),\n column: Math.min(start.column, end.column),\n rowAbsolute: reversed ? false : start.rowAbsolute,\n columnAbsolute: reversed ? false : start.columnAbsolute,\n },\n end: {\n row: Math.max(start.row, end.row),\n column: Math.max(start.column, end.column),\n rowAbsolute: reversed ? false : end.rowAbsolute,\n columnAbsolute: reversed ? false : end.columnAbsolute,\n },\n };\n}\n\nfunction parseCellRef(address: string): CellRef {\n const normalized = address.trim();\n const match = /^(\\$?)([A-Za-z]+)(\\$?)(\\d+)$/.exec(normalized);\n if (!match) {\n throw new Error(`ExcelReference: invalid cell reference ${address}`);\n }\n const row = Number(match[4]);\n if (!Number.isInteger(row) || row < 1) {\n throw new Error(`ExcelReference: invalid cell reference ${address}`);\n }\n return {\n row,\n column: columnNameToIndex(match[2]!),\n columnAbsolute: match[1] === '$',\n rowAbsolute: match[3] === '$',\n };\n}\n\nfunction formatReference(ref: RangeRef): string {\n const first = formatCellRef(ref.start);\n const last = formatCellRef(ref.end);\n const local = first === last ? first : `${first}:${last}`;\n return ref.sheetName ? `${quoteSheetName(ref.sheetName)}!${local}` : local;\n}\n\nfunction formatCellRef(ref: CellRef): string {\n return `${ref.columnAbsolute ? '$' : ''}${columnIndexToName(ref.column)}${ref.rowAbsolute ? '$' : ''}${ref.row}`;\n}\n\nfunction quoteSheetName(sheetName: string): string {\n if (/^[A-Za-z_][A-Za-z0-9_.]*$/.test(sheetName)) return sheetName;\n return `'${sheetName.replace(/'/g, \"''\")}'`;\n}\n\nfunction shiftCellRowsForInsert(cell: CellRef, rowIndex: number, count: number): CellRef {\n return cell.row >= rowIndex ? { ...cell, row: cell.row + count } : { ...cell };\n}\n\nfunction shiftCellColumnsForInsert(cell: CellRef, columnIndex: number, count: number): CellRef {\n return cell.column >= columnIndex ? { ...cell, column: cell.column + count } : { ...cell };\n}\n\nfunction shiftCellRelative(cell: CellRef, rowOffset: number, columnOffset: number): CellRef | null {\n const row = cell.rowAbsolute ? cell.row : cell.row + rowOffset;\n const column = cell.columnAbsolute ? cell.column : cell.column + columnOffset;\n if (row < 1 || column < 1 || column > 16384) return null;\n return { ...cell, row, column };\n}\n\nfunction rewriteAxisForDelete(start: number, end: number, deletion: AxisDelete): { start: number; end: number } | null {\n const deleteEnd = deletion.start + deletion.count - 1;\n const survivors: number[] = [];\n for (let value = start; value <= end; value++) {\n if (value >= deletion.start && value <= deleteEnd) continue;\n survivors.push(value > deleteEnd ? value - deletion.count : value);\n }\n if (survivors.length === 0) return null;\n return {\n start: Math.min(...survivors),\n end: Math.max(...survivors),\n };\n}\n\nfunction isTargetSheet(ref: RangeRef, sheetName: string | undefined): boolean {\n return sheetName === undefined || ref.sheetName === undefined || ref.sheetName === sheetName;\n}\n\nfunction assertPositiveInteger(value: number, name: string): void {\n if (!Number.isInteger(value) || value < 1) {\n throw new Error(`ExcelReference: ${name} must be a positive integer`);\n }\n}\n\nfunction assertInteger(value: number, name: string): void {\n if (!Number.isInteger(value)) {\n throw new Error(`ExcelReference: ${name} must be an integer`);\n }\n}\n\ninterface FormulaMatch {\n reference: string;\n end: number;\n}\n\nfunction readFormulaStringLiteral(formula: string, start: number): { text: string; end: number } {\n let index = start + 1;\n while (index < formula.length) {\n if (formula[index] !== '\"') {\n index += 1;\n continue;\n }\n if (formula[index + 1] === '\"') {\n index += 2;\n continue;\n }\n return { text: formula.slice(start, index + 1), end: index + 1 };\n }\n return { text: formula.slice(start), end: formula.length };\n}\n\nfunction matchReferenceAt(formula: string, start: number): FormulaMatch | null {\n if (!isReferenceLeftBoundary(formula[start - 1])) return null;\n const sheet = readSheetPrefix(formula, start);\n const cellStart = sheet ? sheet.end : start;\n const firstCell = readCellToken(formula, cellStart);\n if (!firstCell) return null;\n\n let end = firstCell.end;\n if (formula[end] === ':') {\n const secondCell = readCellToken(formula, end + 1);\n if (secondCell) end = secondCell.end;\n }\n if (!isReferenceRightBoundary(formula[end])) return null;\n if (formula[end] === '(') return null;\n\n return { reference: formula.slice(start, end), end };\n}\n\nfunction readSheetPrefix(formula: string, start: number): { end: number } | null {\n if (formula[start] === \"'\") {\n let index = start + 1;\n while (index < formula.length) {\n if (formula[index] !== \"'\") {\n index += 1;\n continue;\n }\n if (formula[index + 1] === \"'\") {\n index += 2;\n continue;\n }\n return formula[index + 1] === '!' ? { end: index + 2 } : null;\n }\n return null;\n }\n\n const match = /^[A-Za-z_][A-Za-z0-9_.]*!/.exec(formula.slice(start));\n return match ? { end: start + match[0].length } : null;\n}\n\nfunction readCellToken(formula: string, start: number): { end: number } | null {\n const match = /^\\$?[A-Za-z]{1,3}\\$?[1-9][0-9]*/.exec(formula.slice(start));\n if (!match) return null;\n const token = match[0];\n const normalized = token.replace(/\\$/g, '');\n const cell = /^([A-Za-z]+)([1-9][0-9]*)$/.exec(normalized);\n if (!cell) return null;\n const column = columnNameToIndex(cell[1]!);\n if (column > 16384) return null;\n return { end: start + token.length };\n}\n\nfunction isReferenceLeftBoundary(ch: string | undefined): boolean {\n return ch === undefined || !/[A-Za-z0-9_.$]/.test(ch);\n}\n\nfunction isReferenceRightBoundary(ch: string | undefined): boolean {\n return ch === undefined || !/[A-Za-z0-9_.$]/.test(ch);\n}\n","import { ExcelCell, ExcelRange } from './range.js';\nimport type { ExcelDrawingMarkerModel, ExcelSheetModel, ExcelSheetViewModel, ExcelWorkbookModel } from './model.js';\nimport type { ExcelMutationRecorder } from './mutations.js';\nimport {\n ExcelChartCollection,\n ExcelCommentCollection,\n ExcelConditionalFormatCollection,\n ExcelDataValidationCollection,\n ExcelDrawingCollection,\n ExcelHyperlinkCollection,\n ExcelImageCollection,\n ExcelShapeCollection,\n ExcelTableCollection,\n ExcelThreadedCommentCollection,\n} from './objects.js';\nimport { formatCellAddress, formatRangeAddress } from './address.js';\nimport {\n renameSheetInFormula,\n rewriteFormulaForColumnDelete,\n rewriteFormulaForColumnInsert,\n rewriteFormulaForRowDelete,\n rewriteFormulaForRowInsert,\n rewriteReferenceForColumnDelete,\n rewriteReferenceForColumnInsert,\n rewriteReferenceForRowDelete,\n rewriteReferenceForRowInsert,\n type ExcelReferenceRewriteResult,\n} from './reference-rewriter.js';\n\nexport class ExcelWorksheet {\n readonly hyperlinks: ExcelHyperlinkCollection;\n readonly tables: ExcelTableCollection;\n readonly dataValidations: ExcelDataValidationCollection;\n readonly conditionalFormats: ExcelConditionalFormatCollection;\n readonly comments: ExcelCommentCollection;\n readonly threadedComments: ExcelThreadedCommentCollection;\n readonly drawings: ExcelDrawingCollection;\n readonly charts: ExcelChartCollection;\n readonly images: ExcelImageCollection;\n readonly shapes: ExcelShapeCollection;\n private readonly model: ExcelSheetModel;\n private readonly workbook?: ExcelWorkbookModel;\n private readonly recordMutation?: ExcelMutationRecorder;\n\n constructor(model: ExcelSheetModel, workbook?: ExcelWorkbookModel, recordMutation?: ExcelMutationRecorder) {\n this.model = model;\n this.workbook = workbook;\n this.recordMutation = recordMutation;\n this.hyperlinks = new ExcelHyperlinkCollection(() => model.hyperlinks);\n this.tables = new ExcelTableCollection(() => model.tables);\n this.dataValidations = new ExcelDataValidationCollection(() => model.dataValidations);\n this.conditionalFormats = new ExcelConditionalFormatCollection(() => model.conditionalFormats);\n this.comments = new ExcelCommentCollection(() => model.comments);\n this.threadedComments = new ExcelThreadedCommentCollection(() => model.threadedComments);\n this.drawings = new ExcelDrawingCollection(() => model.drawings);\n this.charts = new ExcelChartCollection(\n () => model.charts,\n () => model.drawings,\n );\n this.images = new ExcelImageCollection(() => model.images);\n this.shapes = new ExcelShapeCollection(() => model.drawings);\n }\n\n id(): string {\n return this.model.id;\n }\n\n name(): string {\n return this.model.name;\n }\n\n rename(name: string): void {\n assertValidWorksheetName(name);\n this.assertUniqueWorksheetName(name, this.model);\n const oldName = this.model.name;\n this.model.name = name;\n this.rewriteWorkbookSheetFormulas((text) => renameSheetInFormula(text, oldName, name));\n this.rewriteDefinedNames((text) => renameSheetInFormula(text, oldName, name));\n this.recordMutation?.({\n kind: 'worksheet.rename',\n sheetId: this.model.id,\n sheetName: name,\n oldName,\n newName: name,\n });\n }\n\n insertRows(rowIndex: number, count = 1): void {\n assertPositiveIndex(rowIndex, 'rowIndex');\n assertPositiveCount(count, 'count');\n for (const cell of this.model.cells) {\n if (cell.row >= rowIndex) {\n cell.row += count;\n cell.address = formatCellAddress(cell.row, cell.column);\n }\n if (cell.formula) {\n cell.formula = rewriteFormulaForRowInsert(cell.formula, rowIndex, count, {\n sheetName: this.model.name,\n });\n }\n }\n this.rewriteDefinedNames((text) =>\n rewriteFormulaForRowInsert(text, rowIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteRuleFormulas((text) =>\n rewriteFormulaForRowInsert(text, rowIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteChartFormulaRefs((text) =>\n rewriteFormulaForRowInsert(text, rowIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteRangeReferences((address) =>\n rewriteReferenceForRowInsert(address, rowIndex, count, { sheetName: this.model.name }),\n );\n this.moveRowMetadataForInsert(rowIndex, count);\n this.moveDrawingAnchorsForRowInsert(rowIndex, count);\n normalizeSheetCells(this.model);\n this.recordMutation?.({\n kind: 'unsafe',\n scope: 'worksheet',\n sheetId: this.model.id,\n sheetName: this.model.name,\n reason: 'worksheet.insertRows is not replayable by first-phase mutation writeback',\n });\n }\n\n deleteRows(rowIndex: number, count = 1): void {\n assertPositiveIndex(rowIndex, 'rowIndex');\n assertPositiveCount(count, 'count');\n const endRow = rowIndex + count - 1;\n this.model.cells = this.model.cells.filter((cell) => {\n if (cell.row >= rowIndex && cell.row <= endRow) return false;\n if (cell.row > endRow) {\n cell.row -= count;\n cell.address = formatCellAddress(cell.row, cell.column);\n }\n if (cell.formula) {\n cell.formula = rewriteFormulaForRowDelete(cell.formula, rowIndex, count, {\n sheetName: this.model.name,\n });\n }\n return true;\n });\n this.rewriteDefinedNames((text) =>\n rewriteFormulaForRowDelete(text, rowIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteRuleFormulas((text) =>\n rewriteFormulaForRowDelete(text, rowIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteChartFormulaRefs((text) =>\n rewriteFormulaForRowDelete(text, rowIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteRangeReferences((address) =>\n rewriteReferenceForRowDelete(address, rowIndex, count, { sheetName: this.model.name }),\n );\n this.moveRowMetadataForDelete(rowIndex, count);\n this.moveDrawingAnchorsForRowDelete(rowIndex, count);\n normalizeSheetCells(this.model);\n this.recordMutation?.({\n kind: 'unsafe',\n scope: 'worksheet',\n sheetId: this.model.id,\n sheetName: this.model.name,\n reason: 'worksheet.deleteRows is not replayable by first-phase mutation writeback',\n });\n }\n\n insertColumns(columnIndex: number, count = 1): void {\n assertPositiveIndex(columnIndex, 'columnIndex');\n assertPositiveCount(count, 'count');\n for (const cell of this.model.cells) {\n if (cell.column >= columnIndex) {\n cell.column += count;\n cell.address = formatCellAddress(cell.row, cell.column);\n }\n if (cell.formula) {\n cell.formula = rewriteFormulaForColumnInsert(cell.formula, columnIndex, count, {\n sheetName: this.model.name,\n });\n }\n }\n this.rewriteDefinedNames((text) =>\n rewriteFormulaForColumnInsert(text, columnIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteRuleFormulas((text) =>\n rewriteFormulaForColumnInsert(text, columnIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteChartFormulaRefs((text) =>\n rewriteFormulaForColumnInsert(text, columnIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteRangeReferences((address) =>\n rewriteReferenceForColumnInsert(address, columnIndex, count, { sheetName: this.model.name }),\n );\n this.moveColumnMetadataForInsert(columnIndex, count);\n this.moveDrawingAnchorsForColumnInsert(columnIndex, count);\n normalizeSheetCells(this.model);\n this.recordMutation?.({\n kind: 'unsafe',\n scope: 'worksheet',\n sheetId: this.model.id,\n sheetName: this.model.name,\n reason: 'worksheet.insertColumns is not replayable by first-phase mutation writeback',\n });\n }\n\n deleteColumns(columnIndex: number, count = 1): void {\n assertPositiveIndex(columnIndex, 'columnIndex');\n assertPositiveCount(count, 'count');\n const endColumn = columnIndex + count - 1;\n this.model.cells = this.model.cells.filter((cell) => {\n if (cell.column >= columnIndex && cell.column <= endColumn) return false;\n if (cell.column > endColumn) {\n cell.column -= count;\n cell.address = formatCellAddress(cell.row, cell.column);\n }\n if (cell.formula) {\n cell.formula = rewriteFormulaForColumnDelete(cell.formula, columnIndex, count, {\n sheetName: this.model.name,\n });\n }\n return true;\n });\n this.rewriteDefinedNames((text) =>\n rewriteFormulaForColumnDelete(text, columnIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteRuleFormulas((text) =>\n rewriteFormulaForColumnDelete(text, columnIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteChartFormulaRefs((text) =>\n rewriteFormulaForColumnDelete(text, columnIndex, count, { sheetName: this.model.name }),\n );\n this.rewriteRangeReferences((address) =>\n rewriteReferenceForColumnDelete(address, columnIndex, count, { sheetName: this.model.name }),\n );\n this.moveColumnMetadataForDelete(columnIndex, count);\n this.moveDrawingAnchorsForColumnDelete(columnIndex, count);\n normalizeSheetCells(this.model);\n this.recordMutation?.({\n kind: 'unsafe',\n scope: 'worksheet',\n sheetId: this.model.id,\n sheetName: this.model.name,\n reason: 'worksheet.deleteColumns is not replayable by first-phase mutation writeback',\n });\n }\n\n visibility(): string | undefined {\n return this.model.visibility;\n }\n\n setVisibility(visibility: string | undefined): void {\n if (visibility !== undefined && !['visible', 'hidden', 'veryHidden'].includes(visibility)) {\n throw new Error(`ExcelWorksheet.setVisibility: invalid visibility: ${visibility}`);\n }\n this.model.visibility = visibility;\n this.recordMutation?.({\n kind: 'unsafe',\n scope: 'worksheet',\n sheetId: this.model.id,\n sheetName: this.model.name,\n reason: 'worksheet.setVisibility is not replayable by first-phase mutation writeback',\n });\n }\n\n path(): string | undefined {\n return this.model.path;\n }\n\n dimension(): string | undefined {\n return this.model.dimension;\n }\n\n getRange(address: string): ExcelRange {\n return new ExcelRange(this.model, address, this.workbook?.styles, this.recordMutation);\n }\n\n getCell(address: string): ExcelCell {\n return new ExcelCell(this.model, address, this.workbook?.styles, this.recordMutation);\n }\n\n getUsedRange(): ExcelRange | null {\n if (!this.model.dimension) return null;\n return this.getRange(this.model.dimension);\n }\n\n cells() {\n return this.model.cells.map((cell) => ({ ...cell }));\n }\n\n sheetViews() {\n return cloneSheetViews(this.model.sheetViews);\n }\n\n setSheetViews(sheetViews: ExcelSheetViewModel[]): void {\n this.model.sheetViews = cloneSheetViews(sheetViews);\n this.recordMutation?.({\n kind: 'unsafe',\n scope: 'worksheet',\n sheetId: this.model.id,\n sheetName: this.model.name,\n reason: 'worksheet.setSheetViews is not replayable by first-phase mutation writeback',\n });\n }\n\n columns() {\n return this.model.columns.map((column) => ({ ...column }));\n }\n\n rows() {\n return this.model.rows.map((row) => ({ ...row }));\n }\n\n mergedRanges() {\n return this.model.mergedRanges.map((range) => ({ ...range }));\n }\n\n toModel(): ExcelSheetModel {\n return {\n ...this.model,\n sheetViews: this.sheetViews(),\n columns: this.model.columns.map((column) => ({ ...column })),\n rows: this.model.rows.map((row) => ({ ...row })),\n mergedRanges: this.model.mergedRanges.map((range) => ({ ...range })),\n hyperlinks: this.hyperlinks.toModel(),\n tables: this.tables.toModel(),\n dataValidations: this.dataValidations.toModel(),\n conditionalFormats: this.conditionalFormats.toModel(),\n comments: this.comments.toModel(),\n threadedComments: this.threadedComments.toModel(),\n drawings: this.drawings.toModel(),\n charts: this.charts.toModel(),\n images: this.images.toModel(),\n cells: this.model.cells.map((cell) => ({ ...cell })),\n };\n }\n\n private rewriteDefinedNames(rewrite: (text: string) => string): void {\n if (!this.workbook) return;\n const localSheetIndex = this.workbook.sheets.indexOf(this.model);\n for (const name of this.workbook.definedNames) {\n if (name.localSheetId !== undefined && name.localSheetId !== localSheetIndex) continue;\n name.text = rewrite(name.text);\n }\n }\n\n private rewriteRuleFormulas(rewrite: (text: string) => string): void {\n for (const validation of this.model.dataValidations) {\n if (validation.formula1) validation.formula1 = rewrite(validation.formula1);\n if (validation.formula2) validation.formula2 = rewrite(validation.formula2);\n }\n for (const format of this.model.conditionalFormats) {\n for (const rule of format.rules) {\n rule.formulas = rule.formulas.map((formula) => rewrite(formula));\n }\n }\n }\n\n private rewriteWorkbookSheetFormulas(rewrite: (text: string) => string): void {\n const sheets = this.workbook?.sheets ?? [this.model];\n for (const sheet of sheets) {\n for (const cell of sheet.cells) {\n if (cell.formula) cell.formula = rewrite(cell.formula);\n }\n for (const validation of sheet.dataValidations) {\n if (validation.formula1) validation.formula1 = rewrite(validation.formula1);\n if (validation.formula2) validation.formula2 = rewrite(validation.formula2);\n }\n for (const format of sheet.conditionalFormats) {\n for (const rule of format.rules) {\n rule.formulas = rule.formulas.map((formula) => rewrite(formula));\n }\n }\n for (const chart of sheet.charts) {\n chart.formulaRefs = chart.formulaRefs.map((reference) => rewrite(reference));\n }\n }\n }\n\n private rewriteChartFormulaRefs(rewrite: (text: string) => string): void {\n for (const chart of this.model.charts) {\n chart.formulaRefs = chart.formulaRefs.map((reference) => rewrite(reference));\n }\n }\n\n private rewriteRangeReferences(rewrite: (address: string) => ExcelReferenceRewriteResult): void {\n this.model.mergedRanges = this.model.mergedRanges.flatMap((range) => {\n const result = rewrite(range.address);\n return result.ok ? [{ ...range, address: result.address }] : [];\n });\n this.model.hyperlinks = this.model.hyperlinks.flatMap((hyperlink) => {\n const result = rewrite(hyperlink.ref);\n return result.ok ? [{ ...hyperlink, ref: result.address }] : [];\n });\n this.model.comments = this.model.comments.flatMap((comment) => {\n const result = rewrite(comment.ref);\n return result.ok ? [{ ...comment, ref: result.address }] : [];\n });\n this.model.threadedComments = this.model.threadedComments.flatMap((comment) => {\n const result = rewrite(comment.ref);\n return result.ok ? [{ ...comment, ref: result.address }] : [];\n });\n for (const view of this.model.sheetViews) {\n if (view.pane?.topLeftCell) {\n const result = rewrite(view.pane.topLeftCell);\n view.pane.topLeftCell = result.ok ? result.address : undefined;\n }\n for (const selection of view.selections) {\n if (selection.activeCell) {\n const result = rewrite(selection.activeCell);\n selection.activeCell = result.ok ? result.address : undefined;\n }\n if (selection.sqref) {\n selection.sqref = rewriteSqref(selection.sqref, rewrite);\n }\n }\n }\n this.model.tables = this.model.tables.flatMap((table) => {\n const ref = table.ref ? rewrite(table.ref) : undefined;\n if (table.ref && !ref?.ok) return [];\n const autoFilterRef = table.autoFilterRef ? rewrite(table.autoFilterRef) : undefined;\n return [\n {\n ...table,\n ref: ref?.address,\n autoFilterRef: autoFilterRef?.ok ? autoFilterRef.address : undefined,\n autoFilter:\n table.autoFilter && autoFilterRef?.ok\n ? { ...table.autoFilter, ref: autoFilterRef.address }\n : table.autoFilter,\n },\n ];\n });\n this.model.dataValidations = this.model.dataValidations.flatMap((validation) => {\n const sqref = validation.sqref ? rewriteSqref(validation.sqref, rewrite) : undefined;\n if (validation.sqref && !sqref) return [];\n return [{ ...validation, sqref }];\n });\n this.model.conditionalFormats = this.model.conditionalFormats.flatMap((format) => {\n const sqref = format.sqref ? rewriteSqref(format.sqref, rewrite) : undefined;\n if (format.sqref && !sqref) return [];\n return [{ ...format, sqref }];\n });\n }\n\n private moveRowMetadataForInsert(rowIndex: number, count: number): void {\n for (const row of this.model.rows) {\n if (row.index >= rowIndex) row.index += count;\n }\n }\n\n private moveRowMetadataForDelete(rowIndex: number, count: number): void {\n const endRow = rowIndex + count - 1;\n this.model.rows = this.model.rows.flatMap((row) => {\n if (row.index >= rowIndex && row.index <= endRow) return [];\n if (row.index > endRow) return [{ ...row, index: row.index - count }];\n return [row];\n });\n }\n\n private moveColumnMetadataForInsert(columnIndex: number, count: number): void {\n this.model.columns = this.model.columns.map((column) => {\n if (column.min >= columnIndex) {\n return { ...column, min: column.min + count, max: column.max + count };\n }\n if (column.max >= columnIndex) {\n return { ...column, max: column.max + count };\n }\n return column;\n });\n }\n\n private moveColumnMetadataForDelete(columnIndex: number, count: number): void {\n const endColumn = columnIndex + count - 1;\n this.model.columns = this.model.columns.flatMap((column) => {\n if (column.min >= columnIndex && column.max <= endColumn) return [];\n if (column.min > endColumn) {\n return [{ ...column, min: column.min - count, max: column.max - count }];\n }\n if (column.min < columnIndex && column.max > endColumn) {\n return [{ ...column, max: column.max - count }];\n }\n if (column.min < columnIndex && column.max >= columnIndex) {\n return [{ ...column, max: columnIndex - 1 }];\n }\n if (column.min <= endColumn && column.max > endColumn) {\n return [{ ...column, min: columnIndex, max: column.max - count }];\n }\n return [column];\n });\n }\n\n private moveDrawingAnchorsForRowInsert(rowIndex: number, count: number): void {\n const markerIndex = rowIndex - 1;\n for (const marker of this.drawingMarkers()) {\n if (marker.row !== undefined && marker.row >= markerIndex) marker.row += count;\n }\n }\n\n private moveDrawingAnchorsForRowDelete(rowIndex: number, count: number): void {\n const markerIndex = rowIndex - 1;\n const endIndex = markerIndex + count - 1;\n for (const marker of this.drawingMarkers()) {\n if (marker.row === undefined) continue;\n if (marker.row > endIndex) marker.row -= count;\n else if (marker.row >= markerIndex) marker.row = markerIndex;\n }\n }\n\n private moveDrawingAnchorsForColumnInsert(columnIndex: number, count: number): void {\n const markerIndex = columnIndex - 1;\n for (const marker of this.drawingMarkers()) {\n if (marker.column !== undefined && marker.column >= markerIndex) marker.column += count;\n }\n }\n\n private moveDrawingAnchorsForColumnDelete(columnIndex: number, count: number): void {\n const markerIndex = columnIndex - 1;\n const endIndex = markerIndex + count - 1;\n for (const marker of this.drawingMarkers()) {\n if (marker.column === undefined) continue;\n if (marker.column > endIndex) marker.column -= count;\n else if (marker.column >= markerIndex) marker.column = markerIndex;\n }\n }\n\n private drawingMarkers(): ExcelDrawingMarkerModel[] {\n return this.model.drawings.flatMap((drawing) =>\n drawing.anchors.flatMap((anchor) => {\n const markers: ExcelDrawingMarkerModel[] = [];\n if (anchor.from) markers.push(anchor.from);\n if (anchor.to) markers.push(anchor.to);\n return markers;\n }),\n );\n }\n\n private assertUniqueWorksheetName(name: string, current: ExcelSheetModel): void {\n if (!this.workbook) return;\n if (this.workbook.sheets.some((sheet) => sheet !== current && sheet.name === name)) {\n throw new Error(`ExcelWorkbook: worksheet already exists: ${name}`);\n }\n }\n}\n\nfunction assertValidWorksheetName(name: string): void {\n if (name.length < 1) {\n throw new Error('ExcelWorksheet.rename: worksheet name must not be empty');\n }\n if (name.length > 31) {\n throw new Error('ExcelWorksheet.rename: worksheet name must be 31 characters or fewer');\n }\n if (/[:\\\\/?*[\\]]/.test(name)) {\n throw new Error(`ExcelWorksheet.rename: invalid worksheet name: ${name}`);\n }\n if (name.startsWith(\"'\") || name.endsWith(\"'\")) {\n throw new Error(`ExcelWorksheet.rename: worksheet name must not start or end with apostrophe`);\n }\n}\n\nfunction assertPositiveIndex(value: number, name: string): void {\n if (!Number.isInteger(value) || value < 1) {\n throw new Error(`ExcelWorksheet: ${name} must be a positive integer`);\n }\n}\n\nfunction assertPositiveCount(value: number, name: string): void {\n if (!Number.isInteger(value) || value < 1) {\n throw new Error(`ExcelWorksheet: ${name} must be a positive integer`);\n }\n}\n\nfunction normalizeSheetCells(sheet: ExcelSheetModel): void {\n sheet.cells.sort((a, b) => a.row - b.row || a.column - b.column);\n sheet.dimension = computeDimension(sheet);\n}\n\nfunction computeDimension(sheet: ExcelSheetModel): string | undefined {\n if (sheet.cells.length === 0) return undefined;\n let minRow = Number.POSITIVE_INFINITY;\n let minColumn = Number.POSITIVE_INFINITY;\n let maxRow = 0;\n let maxColumn = 0;\n for (const cell of sheet.cells) {\n minRow = Math.min(minRow, cell.row);\n minColumn = Math.min(minColumn, cell.column);\n maxRow = Math.max(maxRow, cell.row);\n maxColumn = Math.max(maxColumn, cell.column);\n }\n return formatRangeAddress(minRow, minColumn, maxRow - minRow + 1, maxColumn - minColumn + 1);\n}\n\nfunction rewriteSqref(\n sqref: string,\n rewrite: (address: string) => ExcelReferenceRewriteResult,\n): string | undefined {\n const refs: string[] = [];\n for (const ref of sqref.split(/\\s+/)) {\n if (!ref) continue;\n const result = rewrite(ref);\n if (result.ok) refs.push(result.address);\n }\n return refs.length ? refs.join(' ') : undefined;\n}\n\nexport class ExcelWorksheetCollection {\n private readonly worksheets: ExcelWorksheet[];\n private readonly sheets: ExcelSheetModel[];\n private readonly workbook?: ExcelWorkbookModel;\n private readonly recordMutation?: ExcelMutationRecorder;\n\n constructor(\n sheets: ExcelSheetModel[],\n workbook?: ExcelWorkbookModel,\n recordMutation?: ExcelMutationRecorder,\n ) {\n this.sheets = sheets;\n this.workbook = workbook;\n this.recordMutation = recordMutation;\n this.worksheets = sheets.map((sheet) => new ExcelWorksheet(sheet, workbook, recordMutation));\n }\n\n items(): ExcelWorksheet[] {\n return [...this.worksheets];\n }\n\n getItem(nameOrId: string): ExcelWorksheet {\n const sheet = this.getItemOrNullObject(nameOrId);\n if (!sheet) {\n throw new Error(`ExcelWorkbook: worksheet not found: ${nameOrId}`);\n }\n return sheet;\n }\n\n getItemOrNullObject(nameOrId: string): ExcelWorksheet | null {\n return (\n this.worksheets.find((sheet) => sheet.name() === nameOrId || sheet.id() === nameOrId) ?? null\n );\n }\n\n add(name: string): ExcelWorksheet {\n assertValidWorksheetName(name);\n if (this.getItemOrNullObject(name)) {\n throw new Error(`ExcelWorkbook: worksheet already exists: ${name}`);\n }\n const sheet = createBlankSheetModel(name, nextSheetId(this.sheets));\n this.sheets.push(sheet);\n const worksheet = new ExcelWorksheet(sheet, this.workbook, this.recordMutation);\n this.worksheets.push(worksheet);\n this.recordMutation?.({\n kind: 'worksheet.add',\n sheetId: sheet.id,\n sheetName: sheet.name,\n });\n return worksheet;\n }\n\n deleteItem(nameOrId: string): void {\n const index = this.worksheets.findIndex(\n (sheet) => sheet.name() === nameOrId || sheet.id() === nameOrId,\n );\n if (index === -1) throw new Error(`ExcelWorkbook: worksheet not found: ${nameOrId}`);\n if (this.worksheets.length === 1)\n throw new Error('ExcelWorkbook: cannot delete the last worksheet');\n const sheet = this.sheets[index]!;\n this.worksheets.splice(index, 1);\n this.sheets.splice(index, 1);\n this.recordMutation?.({\n kind: 'worksheet.delete',\n sheetId: sheet.id,\n sheetName: sheet.name,\n });\n }\n\n move(nameOrId: string, toIndex: number): void {\n if (!Number.isInteger(toIndex) || toIndex < 0 || toIndex >= this.worksheets.length) {\n throw new Error(`ExcelWorksheetCollection.move: toIndex out of bounds: ${toIndex}`);\n }\n const fromIndex = this.worksheets.findIndex(\n (sheet) => sheet.name() === nameOrId || sheet.id() === nameOrId,\n );\n if (fromIndex === -1) throw new Error(`ExcelWorkbook: worksheet not found: ${nameOrId}`);\n if (fromIndex === toIndex) return;\n const [worksheet] = this.worksheets.splice(fromIndex, 1);\n const [sheet] = this.sheets.splice(fromIndex, 1);\n this.worksheets.splice(toIndex, 0, worksheet!);\n this.sheets.splice(toIndex, 0, sheet!);\n }\n\n copy(nameOrId: string, newName?: string): ExcelWorksheet {\n const sourceIndex = this.worksheets.findIndex(\n (sheet) => sheet.name() === nameOrId || sheet.id() === nameOrId,\n );\n if (sourceIndex === -1) throw new Error(`ExcelWorkbook: worksheet not found: ${nameOrId}`);\n const source = this.sheets[sourceIndex]!;\n const name = newName ?? uniqueWorksheetName(source.name, this.sheets);\n assertValidWorksheetName(name);\n if (this.getItemOrNullObject(name)) {\n throw new Error(`ExcelWorkbook: worksheet already exists: ${name}`);\n }\n const clone = cloneSheetModel(source);\n clone.id = nextSheetId(this.sheets);\n clone.name = name;\n clone.relationshipId = undefined;\n clone.path = undefined;\n this.sheets.splice(sourceIndex + 1, 0, clone);\n const worksheet = new ExcelWorksheet(clone, this.workbook, this.recordMutation);\n this.worksheets.splice(sourceIndex + 1, 0, worksheet);\n this.recordMutation?.({\n kind: 'unsafe',\n scope: 'worksheet',\n sheetId: clone.id,\n sheetName: clone.name,\n reason: 'worksheet.copy is not replayable by first-phase mutation writeback',\n });\n return worksheet;\n }\n}\n\nfunction createBlankSheetModel(name: string, id: string): ExcelSheetModel {\n return {\n id,\n name,\n sheetViews: [{ workbookViewId: 0, selections: [{ activeCell: 'A1', sqref: 'A1' }] }],\n columns: [],\n rows: [],\n mergedRanges: [],\n hyperlinks: [],\n tables: [],\n dataValidations: [],\n conditionalFormats: [],\n comments: [],\n threadedComments: [],\n drawings: [],\n charts: [],\n images: [],\n cells: [],\n };\n}\n\nfunction cloneSheetViews(sheetViews: ExcelSheetViewModel[]): ExcelSheetViewModel[] {\n return sheetViews.map((view) => ({\n ...view,\n pane: view.pane ? { ...view.pane } : undefined,\n selections: view.selections.map((selection) => ({ ...selection })),\n }));\n}\n\nfunction nextSheetId(sheets: ExcelSheetModel[]): string {\n let max = 0;\n for (const sheet of sheets) {\n const value = Number(sheet.id);\n if (Number.isFinite(value)) max = Math.max(max, value);\n }\n return String(max + 1 || sheets.length + 1);\n}\n\nfunction uniqueWorksheetName(baseName: string, sheets: ExcelSheetModel[]): string {\n const names = new Set(sheets.map((sheet) => sheet.name));\n for (let index = 2; index < 1000; index++) {\n const name = `${baseName} (${index})`;\n if (name.length <= 31 && !names.has(name)) return name;\n }\n throw new Error(\n `ExcelWorksheetCollection.copy: unable to create unique worksheet name for ${baseName}`,\n );\n}\n\nfunction cloneSheetModel(sheet: ExcelSheetModel): ExcelSheetModel {\n return JSON.parse(JSON.stringify(sheet)) as ExcelSheetModel;\n}\n","import type { ExcelBorderModel, ExcelCellValue, ExcelColorModel } from './model.js';\n\nexport type ExcelWorkbookMutation =\n | ExcelRangeSetValuesMutation\n | ExcelRangeSetFormulasMutation\n | ExcelRangeClearMutation\n | ExcelRangeMergeMutation\n | ExcelRangeUnmergeMutation\n | ExcelRangeSetRowHeightMutation\n | ExcelRangeSetColumnWidthMutation\n | ExcelRangeSetFontColorMutation\n | ExcelRangeSetFillForegroundColorMutation\n | ExcelRangeSetBorderMutation\n | ExcelWorksheetAddMutation\n | ExcelWorksheetDeleteMutation\n | ExcelWorksheetRenameMutation\n | ExcelUnsafeMutation;\n\nexport interface ExcelMutationSheetRef {\n sheetId?: string;\n sheetName: string;\n}\n\nexport interface ExcelRangeMutationBase extends ExcelMutationSheetRef {\n address: string;\n}\n\nexport interface ExcelRangeSetValuesMutation extends ExcelRangeMutationBase {\n kind: 'range.setValues';\n values: ExcelCellValue[][];\n}\n\nexport interface ExcelRangeSetFormulasMutation extends ExcelRangeMutationBase {\n kind: 'range.setFormulas';\n formulas: (string | null)[][];\n}\n\nexport interface ExcelRangeClearMutation extends ExcelRangeMutationBase {\n kind: 'range.clear';\n}\n\nexport interface ExcelRangeMergeMutation extends ExcelRangeMutationBase {\n kind: 'range.merge';\n}\n\nexport interface ExcelRangeUnmergeMutation extends ExcelRangeMutationBase {\n kind: 'range.unmerge';\n}\n\nexport interface ExcelRangeSetRowHeightMutation extends ExcelRangeMutationBase {\n kind: 'range.setRowHeight';\n height: number | undefined;\n}\n\nexport interface ExcelRangeSetColumnWidthMutation extends ExcelRangeMutationBase {\n kind: 'range.setColumnWidth';\n width: number | undefined;\n}\n\nexport interface ExcelRangeSetFontColorMutation extends ExcelRangeMutationBase {\n kind: 'range.format.font.setColor';\n color: ExcelColorModel | undefined;\n}\n\nexport interface ExcelRangeSetFillForegroundColorMutation extends ExcelRangeMutationBase {\n kind: 'range.format.fill.setForegroundColor';\n color: ExcelColorModel | undefined;\n}\n\nexport interface ExcelRangeSetBorderMutation extends ExcelRangeMutationBase {\n kind: 'range.format.border.setValue';\n border: ExcelBorderModel;\n}\n\nexport interface ExcelWorksheetAddMutation extends ExcelMutationSheetRef {\n kind: 'worksheet.add';\n}\n\nexport interface ExcelWorksheetDeleteMutation extends ExcelMutationSheetRef {\n kind: 'worksheet.delete';\n}\n\nexport interface ExcelWorksheetRenameMutation extends ExcelMutationSheetRef {\n kind: 'worksheet.rename';\n oldName: string;\n newName: string;\n}\n\nexport interface ExcelUnsafeMutation {\n kind: 'unsafe';\n scope: 'workbook' | 'worksheet' | 'range' | 'object';\n sheetId?: string;\n sheetName?: string;\n reason: string;\n}\n\nexport type ExcelMutationRecorder = (mutation: ExcelWorkbookMutation) => void;\n\nexport class ExcelMutationLog {\n private readonly items: ExcelWorkbookMutation[] = [];\n\n record(mutation: ExcelWorkbookMutation): void {\n this.items.push(cloneMutation(mutation));\n }\n\n list(): ExcelWorkbookMutation[] {\n return this.items.map(cloneMutation);\n }\n\n clear(): void {\n this.items.length = 0;\n }\n\n hasUnsafe(): boolean {\n return this.items.some((item) => item.kind === 'unsafe');\n }\n}\n\nexport function cloneMutation(mutation: ExcelWorkbookMutation): ExcelWorkbookMutation {\n return JSON.parse(JSON.stringify(mutation)) as ExcelWorkbookMutation;\n}\n\nexport function changedSheetNamesFromMutations(mutations: readonly ExcelWorkbookMutation[]): string[] {\n const names = new Set<string>();\n for (const mutation of mutations) {\n if (mutation.kind === 'worksheet.rename') {\n names.add(mutation.oldName);\n names.add(mutation.newName);\n continue;\n }\n if ('sheetName' in mutation && mutation.sheetName) {\n names.add(mutation.sheetName);\n }\n }\n return [...names];\n}\n","import { createPackage, fromZip, toZip, type Package } from '../pack/index.js';\nimport type { ExcelStylesModel, ExcelWorkbookModel } from './model.js';\nimport { readWorkbookModel } from './xlsx-reader.js';\nimport { createWorkbookPackageFromModel, syncWorkbookModelToPackage } from './xlsx-writer.js';\nimport { ExcelNamedItemCollection } from './names.js';\nimport { ExcelWorksheetCollection } from './worksheet.js';\nimport { ExcelMutationLog, type ExcelWorkbookMutation } from './mutations.js';\n\nexport interface ExcelLoadOptions {\n workbookId?: string;\n}\n\nexport class ExcelWorkbookCore {\n readonly workbookId: string;\n readonly worksheets: ExcelWorksheetCollection;\n readonly names: ExcelNamedItemCollection;\n private readonly pkg: Package;\n private readonly model: ExcelWorkbookModel;\n private readonly mutationLog = new ExcelMutationLog();\n\n private constructor(init: { workbookId: string; pkg: Package; model: ExcelWorkbookModel }) {\n this.workbookId = init.workbookId;\n this.pkg = init.pkg;\n this.model = init.model;\n this.worksheets = new ExcelWorksheetCollection(init.model.sheets, init.model, (mutation) =>\n this.mutationLog.record(mutation),\n );\n this.names = new ExcelNamedItemCollection(init.model.definedNames);\n }\n\n static async fromZip(bytes: Uint8Array | ArrayBuffer, opts: ExcelLoadOptions = {}): Promise<ExcelWorkbookCore> {\n const pkg = await fromZip(bytes);\n return ExcelWorkbookCore.fromPackage(pkg, opts);\n }\n\n static fromPackage(pkg: Package, opts: ExcelLoadOptions = {}): ExcelWorkbookCore {\n return new ExcelWorkbookCore({\n workbookId: opts.workbookId ?? `excel:${Date.now()}`,\n pkg,\n model: readWorkbookModel(pkg),\n });\n }\n\n static fromModel(model: ExcelWorkbookModel, opts: ExcelLoadOptions = {}): ExcelWorkbookCore {\n return new ExcelWorkbookCore({\n workbookId: opts.workbookId ?? `excel:${Date.now()}`,\n pkg: createPackage(),\n model: structuredCloneModel(model),\n });\n }\n\n toModel(): ExcelWorkbookModel {\n return structuredCloneModel(this.model);\n }\n\n styles(): ExcelStylesModel {\n return cloneStyles(this.model.styles);\n }\n\n getMutations(): ExcelWorkbookMutation[] {\n return this.mutationLog.list();\n }\n\n _replaceModelForHistory(model: ExcelWorkbookModel): void {\n const next = structuredCloneModel(model);\n this.model.sharedStrings.splice(0, this.model.sharedStrings.length, ...next.sharedStrings);\n this.model.definedNames.splice(0, this.model.definedNames.length, ...next.definedNames);\n this.model.styles = next.styles;\n this.model.sheets.splice(0, this.model.sheets.length, ...next.sheets);\n Object.defineProperty(this, 'worksheets', {\n value: new ExcelWorksheetCollection(this.model.sheets, this.model, (mutation) =>\n this.mutationLog.record(mutation),\n ),\n writable: true,\n configurable: true,\n });\n Object.defineProperty(this, 'names', {\n value: new ExcelNamedItemCollection(this.model.definedNames),\n writable: true,\n configurable: true,\n });\n }\n\n clearMutations(): void {\n this.mutationLog.clear();\n }\n\n getPackage(): Package {\n return this.pkg;\n }\n\n async toZip(): Promise<Uint8Array> {\n if (this.pkg.parts.size === 0) {\n return toZip(createWorkbookPackageFromModel(this.model));\n }\n syncWorkbookModelToPackage(this.pkg, this.model);\n return toZip(this.pkg);\n }\n}\n\nfunction structuredCloneModel(model: ExcelWorkbookModel): ExcelWorkbookModel {\n return {\n sharedStrings: [...model.sharedStrings],\n definedNames: model.definedNames.map((name) => ({ ...name })),\n styles: cloneStyles(model.styles),\n sheets: model.sheets.map((sheet) => ({\n ...sheet,\n sheetViews: sheet.sheetViews.map((view) => {\n const result = {\n ...view,\n selections: view.selections.map((selection) => ({ ...selection })),\n };\n if (view.pane) {\n result.pane = { ...view.pane };\n }\n return result;\n }),\n columns: sheet.columns.map((column) => ({ ...column })),\n rows: sheet.rows.map((row) => ({ ...row })),\n mergedRanges: sheet.mergedRanges.map((range) => ({ ...range })),\n hyperlinks: sheet.hyperlinks.map((hyperlink) => ({ ...hyperlink })),\n tables: sheet.tables.map((table) => ({\n ...table,\n columns: table.columns.map((column) => ({ ...column })),\n autoFilter: table.autoFilter\n ? {\n ...table.autoFilter,\n filterColumns: table.autoFilter.filterColumns.map((column) => ({\n ...column,\n filters: column.filters ? [...column.filters] : undefined,\n })),\n sortState: table.autoFilter.sortState\n ? {\n ...table.autoFilter.sortState,\n conditions: table.autoFilter.sortState.conditions.map((condition) => ({ ...condition })),\n }\n : undefined,\n }\n : undefined,\n style: table.style ? { ...table.style } : undefined,\n })),\n dataValidations: sheet.dataValidations.map((validation) => ({ ...validation })),\n conditionalFormats: sheet.conditionalFormats.map((format) => ({\n ...format,\n rules: format.rules.map((rule) => ({\n ...rule,\n formulas: [...rule.formulas],\n })),\n })),\n comments: sheet.comments.map((comment) => ({ ...comment })),\n threadedComments: sheet.threadedComments.map((comment) => ({ ...comment })),\n drawings: sheet.drawings.map((drawing) => ({\n ...drawing,\n anchors: drawing.anchors.map((anchor) => ({\n ...anchor,\n from: anchor.from ? { ...anchor.from } : undefined,\n to: anchor.to ? { ...anchor.to } : undefined,\n object: anchor.object ? { ...anchor.object } : undefined,\n })),\n })),\n charts: sheet.charts.map((chart) => ({\n ...chart,\n formulaRefs: [...chart.formulaRefs],\n })),\n images: sheet.images.map((image) => ({ ...image })),\n cells: sheet.cells.map((cell) => ({ ...cell })),\n })),\n };\n}\n\nfunction cloneStyles(styles: ExcelStylesModel): ExcelStylesModel {\n return {\n numberFormats: styles.numberFormats.map((format) => ({ ...format })),\n fonts: styles.fonts.map((font) => ({\n ...font,\n color: font.color ? { ...font.color } : undefined,\n })),\n fills: styles.fills.map((fill) => ({\n ...fill,\n foregroundColor: fill.foregroundColor ? { ...fill.foregroundColor } : undefined,\n backgroundColor: fill.backgroundColor ? { ...fill.backgroundColor } : undefined,\n })),\n borders: styles.borders.map((border) => ({\n left: border.left ? { ...border.left, color: border.left.color ? { ...border.left.color } : undefined } : undefined,\n right: border.right ? { ...border.right, color: border.right.color ? { ...border.right.color } : undefined } : undefined,\n top: border.top ? { ...border.top, color: border.top.color ? { ...border.top.color } : undefined } : undefined,\n bottom: border.bottom\n ? { ...border.bottom, color: border.bottom.color ? { ...border.bottom.color } : undefined }\n : undefined,\n diagonal: border.diagonal\n ? { ...border.diagonal, color: border.diagonal.color ? { ...border.diagonal.color } : undefined }\n : undefined,\n })),\n cellFormats: styles.cellFormats.map((format) => ({\n ...format,\n alignment: format.alignment ? { ...format.alignment } : undefined,\n })),\n };\n}\n","export interface ExcelRpcRequest {\n kind: 'request';\n id: string;\n method: string;\n args: unknown[];\n}\n\nexport interface ExcelRpcResponse {\n kind: 'response';\n id: string;\n result: unknown;\n}\n\nexport interface ExcelRpcError {\n kind: 'error';\n id: string;\n error: ExcelSerializableError;\n}\n\nexport interface ExcelSerializableError {\n message: string;\n name?: string;\n stack?: string;\n}\n\nexport type ExcelRpcMessage = ExcelRpcRequest | ExcelRpcResponse | ExcelRpcError;\n\nexport function serializeExcelError(error: unknown): ExcelSerializableError {\n const err = error as Error | null | undefined;\n return {\n message: err?.message ?? String(error),\n name: err?.name,\n stack: err?.stack,\n };\n}\n\nexport function deserializeExcelError(error: ExcelSerializableError): Error {\n const err = new Error(error.message);\n err.name = error.name ?? 'Error';\n if (error.stack) err.stack = error.stack;\n return err;\n}\n","import type { ExcelWorkbookCore } from './excel-workbook.js';\n\nexport async function executeExcelScript(\n workbook: ExcelWorkbookCore,\n code: string,\n args: Record<string, unknown> | undefined,\n timeoutMs: number,\n signal?: AbortSignal,\n): Promise<unknown> {\n if (signal?.aborted) {\n throw new Error('excel script aborted before dispatch');\n }\n\n const runner = new Function(\n 'workbook',\n 'args',\n `\"use strict\"; return (async () => {\\n${code}\\n})()`,\n ) as (workbook: ExcelWorkbookCore, args: Record<string, unknown> | undefined) => Promise<unknown>;\n\n const execution = runner(workbook, args);\n const races: Promise<unknown>[] = [execution];\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n let abortHandler: (() => void) | undefined;\n\n if (timeoutMs > 0) {\n races.push(\n new Promise((_, reject) => {\n timeoutHandle = setTimeout(\n () => reject(new Error(`excel script timeout after ${timeoutMs}ms`)),\n timeoutMs,\n );\n }),\n );\n }\n\n if (signal) {\n races.push(\n new Promise((_, reject) => {\n abortHandler = () => reject(new Error('excel script aborted'));\n signal.addEventListener('abort', abortHandler, { once: true });\n }),\n );\n }\n\n try {\n return await Promise.race(races);\n } finally {\n if (timeoutHandle) clearTimeout(timeoutHandle);\n if (signal && abortHandler) signal.removeEventListener('abort', abortHandler);\n }\n}\n","import { ExcelWorkbookCore } from './excel-workbook.js';\nimport type { ExcelWorkbookModel } from './model.js';\nimport {\n serializeExcelError,\n type ExcelRpcError,\n type ExcelRpcMessage,\n type ExcelRpcRequest,\n type ExcelRpcResponse,\n} from './runtime-rpc.js';\nimport { executeExcelScript } from './runtime-script.js';\n\nexport type ExcelWorkerPost = (data: unknown) => void;\n\nexport function createExcelRuntimeDispatcher(post: ExcelWorkerPost): (raw: unknown) => Promise<void> {\n let workbook: ExcelWorkbookCore | null = null;\n\n return async function dispatch(raw: unknown): Promise<void> {\n if (raw === null || typeof raw !== 'object') return;\n const msg = raw as ExcelRpcMessage;\n if (msg.kind !== 'request') return;\n const req = msg as ExcelRpcRequest;\n\n try {\n let result: unknown;\n switch (req.method) {\n case 'load.zip': {\n const [bytes, opts] = req.args as [Uint8Array | ArrayBuffer, { workbookId?: string }];\n workbook = await ExcelWorkbookCore.fromZip(bytes, opts);\n result = {\n workbookId: workbook.workbookId,\n };\n break;\n }\n case 'load.model': {\n const [model, opts] = req.args as [ExcelWorkbookModel, { workbookId?: string }];\n workbook = ExcelWorkbookCore.fromModel(model, opts);\n result = {\n workbookId: workbook.workbookId,\n };\n break;\n }\n case 'to.model': {\n assertWorkbook(workbook);\n result = workbook.toModel();\n break;\n }\n case 'mutations.list': {\n assertWorkbook(workbook);\n result = workbook.getMutations();\n break;\n }\n case 'mutations.clear': {\n assertWorkbook(workbook);\n workbook.clearMutations();\n result = undefined;\n break;\n }\n case 'to.zip': {\n assertWorkbook(workbook);\n result = await workbook.toZip();\n break;\n }\n case 'script.execute': {\n assertWorkbook(workbook);\n const [code, args, timeoutMs] = req.args as [\n string,\n Record<string, unknown> | undefined,\n number,\n ];\n result = await executeExcelScript(workbook, code, args, timeoutMs);\n break;\n }\n case 'dispose': {\n workbook = null;\n result = undefined;\n break;\n }\n default:\n throw new Error(`unknown excel runtime method: ${req.method}`);\n }\n post({ kind: 'response', id: req.id, result } satisfies ExcelRpcResponse);\n } catch (error) {\n post({ kind: 'error', id: req.id, error: serializeExcelError(error) } satisfies ExcelRpcError);\n }\n };\n}\n\nfunction assertWorkbook(workbook: ExcelWorkbookCore | null): asserts workbook is ExcelWorkbookCore {\n if (!workbook) throw new Error('ExcelRuntimeWorkbook is not loaded');\n}\n","import { createExcelRuntimeDispatcher } from './runtime-worker-shared.js';\n\nconst ctx = self as unknown as DedicatedWorkerGlobalScope;\nif (typeof ctx.postMessage !== 'function' || typeof ctx.addEventListener !== 'function') {\n throw new Error('excel runtime browser worker entry must run inside a DedicatedWorkerGlobalScope');\n}\n\nconst dispatch = createExcelRuntimeDispatcher((data) => {\n ctx.postMessage(data);\n});\n\nctx.addEventListener('message', (event: MessageEvent): void => {\n void dispatch(event.data);\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAS,WAAW,MAAoB;AACtC,MAAI,OAAO,SAAS,YAAY,KAAK,WAAW,GAAG;AACjD,UAAM,IAAI,MAAM,qDAAqD,KAAK,UAAU,IAAI,CAAC,EAAE;AAAA,EAC7F;AACA,MAAI,KAAK,WAAW,GAAG,GAAG;AACxB,UAAM,IAAI,MAAM,oDAAoD,IAAI,EAAE;AAAA,EAC5E;AACF;AAPS;AAST,SAAS,kBAAkB,aAA2B;AACpD,MAAI,OAAO,gBAAgB,YAAY,YAAY,WAAW,GAAG;AAC/D,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AACF;AAJS;AAOF,SAAS,cAAc,MAA+B;AAC3D,aAAW,KAAK,IAAI;AACpB,oBAAkB,KAAK,WAAW;AAClC,MAAI,CAAC,KAAK,QAAQ;AAChB,UAAM,IAAI,MAAM,sCAAsC,KAAK,IAAI,EAAE;AAAA,EACnE;AACA,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,QAAQ,KAAK;AAAA,IACb,gBAAgB,KAAK;AAAA,IACrB,QAAQ,KAAK,kBAAkB;AAAA,EACjC;AACF;AAbgB;AAgBT,SAAS,iBAAiB,MAAkC;AAvEnE;AAwEE,aAAW,KAAK,IAAI;AACpB,oBAAkB,KAAK,WAAW;AAClC,MAAI,CAAC,KAAK,OAAO;AACf,UAAM,IAAI,MAAM,wCAAwC,KAAK,IAAI,EAAE;AAAA,EACrE;AACA,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,OAAO,KAAK;AAAA,IACZ,iBAAgB,UAAK,kBAAL,YAAsB,KAAK;AAAA,IAC3C,QAAQ;AAAA,EACV;AACF;AAbgB;AAgBT,SAAS,UAAU,MAAkB;AAC1C,OAAK,SAAS;AAChB;AAFgB;AAUT,SAAS,UAAU,MAAqB;AAC7C,SAAO,KAAK,WAAW;AACzB;AAFgB;;;ACzFT,SAAS,gBAAyB;AACvC,SAAO,EAAE,OAAO,oBAAI,IAAI,EAAE;AAC5B;AAFgB;AAKT,SAAS,QAAQ,KAAc,MAAkB;AACtD,MAAI,MAAM,IAAI,KAAK,MAAM,IAAI;AAC/B;AAFgB;AAKT,SAAS,QAAQ,KAAc,MAAgC;AACpE,SAAO,IAAI,MAAM,IAAI,IAAI;AAC3B;AAFgB;AAUT,SAAS,WAAW,KAAc,MAAuB;AAC9D,SAAO,IAAI,MAAM,OAAO,IAAI;AAC9B;AAFgB;;;ACpBhB,OAAO,WAAW;AAClB,SAAS,oBAAAA,mBAAkB,mCAAmC;;;ACI9D,SAAS,wBAAwB;AAKjC,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;AAG5B,SAAS,QAAQ,GAAmB;AAClC,SAAO,EACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ;AAC3B;AANS;AAeF,SAAS,mBAAmB,KAAuB;AACxD,MAAI,QAAQ,KAAK,kBAAkB,EAAG,QAAO;AAE7C,QAAM,YAAsB,CAAC;AAC7B,aAAW,QAAQ,IAAI,MAAM,OAAO,GAAG;AACrC,QAAI,KAAK,SAAS,mBAAoB;AACtC,cAAU;AAAA,MACR,0BAA0B,QAAQ,KAAK,IAAI,CAAC,kBAAkB,QAAQ,KAAK,WAAW,CAAC;AAAA,IACzF;AAAA,EACF;AAEA,QAAM,MACJ;AAAA,gBACiB,gBAAgB;AAAA,IACjC,UAAU,KAAK,IAAI,KAClB,UAAU,SAAS,IAAI,OAAO,MAC/B;AAEF;AAAA,IACE;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,QAAQ,iBAAiB,GAAG;AAAA,MAC5B,eAAe,IAAI,YAAY,EAAE,OAAO,GAAG;AAAA,IAC7C,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AA7BgB;;;ADtBhB,IAAMC,sBAAqB;AAC3B,IAAMC,oBAAmB;AACzB,IAAMC,uBAAsB;AAO5B,SAAS,iBAAiB,IAAqB;AAC7C,QAAM,aAAa,GAAG,YAAY;AAClC,MACE,WAAW,WAAW,QAAQ,KAC9B,WAAW,WAAW,QAAQ,KAC9B,WAAW,WAAW,QAAQ,KAC9B,eAAe,8BACf,eAAe,6DACf,WAAW,WAAW,4BAA4B,GAClD;AACA,WAAO;AAAA,EACT;AACA,SAAO,WAAW,SAAS,MAAM,KAAK,eAAe,qBAAqB,eAAe;AAC3F;AAbS;AAqBT,SAAS,kBAAkB,KAAkC;AAC3D,QAAM,MAAMC,kBAAiB,GAAG;AAChC,QAAM,WAAW,oBAAI,IAAoB;AACzC,QAAM,YAAY,oBAAI,IAAoB;AAE1C,QAAM,aAAa,IAAI,uBAAuBF,mBAAkB,SAAS;AACzE,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,KAAK,WAAW,CAAC;AACvB,QAAI,CAAC,GAAI;AACT,UAAM,MAAM,GAAG,aAAa,WAAW;AACvC,UAAM,KAAK,GAAG,aAAa,aAAa;AACxC,QAAI,OAAO,GAAI,UAAS,IAAI,IAAI,YAAY,GAAG,EAAE;AAAA,EACnD;AAEA,QAAM,cAAc,IAAI,uBAAuBA,mBAAkB,UAAU;AAC3E,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,UAAM,KAAK,YAAY,CAAC;AACxB,QAAI,CAAC,GAAI;AACT,UAAM,WAAW,GAAG,aAAa,UAAU;AAC3C,UAAM,KAAK,GAAG,aAAa,aAAa;AACxC,QAAI,YAAY,IAAI;AAElB,gBAAU,IAAI,SAAS,QAAQ,OAAO,EAAE,GAAG,EAAE;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO;AAAA,IACL,QAAQ,UAAsC;AAC5C,YAAM,WAAW,UAAU,IAAI,QAAQ;AACvC,UAAI,SAAU,QAAO;AACrB,YAAM,MAAM,SAAS,YAAY,GAAG;AACpC,UAAI,QAAQ,GAAI,QAAO;AACvB,aAAO,SAAS,IAAI,SAAS,MAAM,MAAM,CAAC,EAAE,YAAY,CAAC;AAAA,IAC3D;AAAA,EACF;AACF;AAnCS;AA8CT,eAAsB,QAAQ,KAAiD;AAC7E,QAAM,QAAQ,eAAe,aAAa,MAAM,IAAI,WAAW,GAAG;AAClE,QAAM,MAAM,MAAM,MAAM,UAAU,KAAK;AACvC,QAAM,MAAM,cAAc;AAE1B,QAAM,SAAS,IAAI,KAAKD,mBAAkB;AAC1C,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,oBAAoBA,mBAAkB,6BAA6B;AAAA,EACrF;AACA,QAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ;AACzC,QAAM,WAAW,kBAAkB,KAAK;AACxC,QAAM,UAAU,MAAM,OAAO,MAAM,YAAY;AAC/C;AAAA,IACE;AAAA,IACA,cAAc;AAAA,MACZ,MAAMA;AAAA,MACN,aAAaE;AAAA,MACb,QAAQC,kBAAiB,KAAK;AAAA,MAC9B,eAAe;AAAA,IACjB,CAAC;AAAA,EACH;AAGA,QAAM,aAAuB,CAAC;AAC9B,MAAI,QAAQ,CAAC,cAAc,UAAU;AACnC,QAAI,MAAM,IAAK;AACf,QAAI,iBAAiBH,oBAAoB;AACzC,eAAW,KAAK,YAAY;AAAA,EAC9B,CAAC;AAED,aAAW,QAAQ,YAAY;AAC7B,UAAM,QAAQ,IAAI,KAAK,IAAI;AAC3B,QAAI,CAAC,MAAO;AACZ,UAAM,cAAc,SAAS,QAAQ,IAAI;AACzC,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI;AAAA,QACR,qCAAqC,IAAI;AAAA,MAC3C;AAAA,IACF;AACA,UAAM,aAAa,MAAM,MAAM,MAAM,YAAY;AAEjD,QAAI,iBAAiB,WAAW,GAAG;AACjC,YAAMI,WAAU,MAAM,MAAM,MAAM,QAAQ;AAC1C,YAAM,SAASD,kBAAiBC,QAAO;AACvC,cAAQ,KAAK,cAAc,EAAE,MAAM,aAAa,QAAQ,eAAe,WAAW,CAAC,CAAC;AAAA,IACtF,OAAO;AACL,cAAQ,KAAK,iBAAiB,EAAE,MAAM,aAAa,OAAO,WAAW,CAAC,CAAC;AAAA,IACzE;AAAA,EACF;AAEA,SAAO;AACT;AAnDsB;AA6DtB,eAAsB,MAAM,KAAmC;AAG7D,qBAAmB,GAAG;AAEtB,QAAM,MAAM,IAAI,MAAM;AAEtB,aAAW,QAAQ,IAAI,MAAM,OAAO,GAAG;AACrC,UAAM,QAAQ,YAAY,IAAI;AAI9B,QAAI,KAAK,KAAK,MAAM,OAAO,EAAE,eAAe,MAAM,CAAC;AAAA,EACrD;AAGA,SAAO,MAAM,IAAI,cAAc;AAAA,IAC7B,MAAM;AAAA,IACN,aAAa;AAAA,IACb,oBAAoB,EAAE,OAAO,EAAE;AAAA,EACjC,CAAC;AACH;AArBsB;AAuBtB,SAAS,YAAY,MAAwB;AAE3C,MAAI,CAAC,KAAK,UAAU,KAAK,gBAAgB;AACvC,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,UAAU,IAAI,GAAG;AACnB,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,IAAI,MAAM,oBAAoB,KAAK,IAAI,kBAAkB;AAAA,IACjE;AAGA,UAAM,OAAO,4BAA4B,KAAK,MAAe;AAC7D,WAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AAAA,EACtC;AAGA,MAAI,KAAK,MAAO,QAAO,KAAK;AAC5B,MAAI,KAAK,eAAgB,QAAO,KAAK;AACrC,QAAM,IAAI,MAAM,uBAAuB,KAAK,IAAI,gBAAgB;AAClE;AApBS;;;AEhLF,IAAM,QAAQ;AACd,IAAM,SAAS;AACf,IAAM,gBAAgB;;;ACkBtB,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AAEzB,SAAS,kBAAkB,YAA4B;AAC5D,MAAI,QAAQ;AACZ,aAAW,MAAM,WAAW,YAAY,GAAG;AACzC,UAAM,OAAO,GAAG,WAAW,CAAC;AAC5B,QAAI,OAAO,MAAM,OAAO,GAAI;AAC5B,YAAQ,QAAQ,MAAM,OAAO;AAAA,EAC/B;AACA,MAAI,SAAS,GAAG;AACd,UAAM,IAAI,MAAM,sCAAsC,UAAU,EAAE;AAAA,EACpE;AACA,SAAO;AACT;AAXgB;AAaT,SAAS,kBAAkB,QAAwB;AACxD,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,SAAS,GAAG;AAC3C,UAAM,IAAI,MAAM,uCAAuC,MAAM,EAAE;AAAA,EACjE;AACA,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,SAAO,QAAQ,GAAG;AAChB,UAAM,OAAO,QAAQ,KAAK;AAC1B,WAAO,OAAO,aAAa,KAAK,GAAG,IAAI;AACvC,YAAQ,KAAK,OAAO,QAAQ,KAAK,EAAE;AAAA,EACrC;AACA,SAAO;AACT;AAZgB;AAcT,SAAS,iBAAiB,SAA8B;AAC7D,QAAM,YAAY,2BAA2B,OAAO;AACpD,QAAM,aAAa,UAAU,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AAC7D,QAAM,QAAQ,qBAAqB,KAAK,UAAU;AAClD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,uCAAuC,OAAO,EAAE;AAAA,EAClE;AACA,QAAM,SAAS,kBAAkB,MAAM,CAAC,CAAE;AAC1C,QAAM,MAAM,OAAO,MAAM,CAAC,CAAC;AAC3B,MAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,GAAG;AACrC,UAAM,IAAI,MAAM,uCAAuC,OAAO,EAAE;AAAA,EAClE;AACA,SAAO;AAAA,IACL,SAAS,GAAG,kBAAkB,MAAM,CAAC,GAAG,GAAG;AAAA,IAC3C;AAAA,IACA;AAAA,EACF;AACF;AAjBgB;AAmBT,SAAS,kBAAkB,KAAa,QAAwB;AACrE,MAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,GAAG;AACrC,UAAM,IAAI,MAAM,oCAAoC,GAAG,EAAE;AAAA,EAC3D;AACA,SAAO,GAAG,kBAAkB,MAAM,CAAC,GAAG,GAAG;AAC3C;AALgB;AAOT,SAAS,kBAAkB,SAA+B;AAC/D,QAAM,YAAY,2BAA2B,OAAO;AACpD,QAAM,QAAQ,UAAU,QAAQ,MAAM,GAAG;AACzC,MAAI,MAAM,SAAS,GAAG;AACpB,UAAM,IAAI,MAAM,wCAAwC,OAAO,EAAE;AAAA,EACnE;AACA,QAAM,CAAC,UAAU,MAAM,IAAI;AAC3B,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,wCAAwC,OAAO,EAAE;AAAA,EACnE;AACA,QAAM,cAAc,sBAAsB,OAAO,OAAO;AACxD,MAAI,aAAa;AACf,WAAO,iCAAK,cAAL,EAAkB,WAAW,UAAU,UAAU;AAAA,EAC1D;AACA,QAAM,WAAW,mBAAmB,OAAO,OAAO;AAClD,MAAI,UAAU;AACZ,WAAO,iCAAK,WAAL,EAAe,WAAW,UAAU,UAAU;AAAA,EACvD;AACA,QAAM,QAAQ,iBAAiB,QAAQ;AACvC,QAAM,MAAM,SAAS,iBAAiB,MAAM,IAAI;AAChD,QAAM,WAAW,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG;AAC5C,QAAM,SAAS,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG;AAC1C,QAAM,cAAc,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM;AACrD,QAAM,YAAY,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM;AACnD,QAAM,QAAQ,kBAAkB,UAAU,WAAW;AACrD,QAAM,OAAO,kBAAkB,QAAQ,SAAS;AAChD,SAAO;AAAA,IACL,SAAS,UAAU,OAAO,QAAQ,GAAG,KAAK,IAAI,IAAI;AAAA,IAClD,WAAW,UAAU;AAAA,IACrB;AAAA,IACA;AAAA,IACA,UAAU,SAAS,WAAW;AAAA,IAC9B,aAAa,YAAY,cAAc;AAAA,EACzC;AACF;AAlCgB;AAoChB,SAAS,sBACP,OACA,iBACwC;AACxC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,CAAC,UAAU,MAAM,IAAI;AAC3B,QAAM,cAAc,qBAAqB,QAAQ;AACjD,QAAM,YAAY,SAAS,qBAAqB,MAAM,IAAI;AAC1D,MAAI,gBAAgB,QAAQ,cAAc,KAAM,QAAO;AACvD,MAAI,gBAAgB,QAAQ,cAAc,MAAM;AAC9C,UAAM,IAAI,MAAM,wCAAwC,eAAe,EAAE;AAAA,EAC3E;AACA,QAAM,cAAc,KAAK,IAAI,aAAa,SAAS;AACnD,QAAM,aAAa,KAAK,IAAI,aAAa,SAAS;AAClD,SAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,cAAc;AAAA,IAC7B;AAAA,IACA,UAAU;AAAA,IACV,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aAAa,aAAa,cAAc;AAAA,EAC1C;AACF;AA1BS;AA4BT,SAAS,mBACP,OACA,iBACwC;AACxC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,CAAC,UAAU,MAAM,IAAI;AAC3B,QAAM,WAAW,kBAAkB,QAAQ;AAC3C,QAAM,SAAS,SAAS,kBAAkB,MAAM,IAAI;AACpD,MAAI,aAAa,QAAQ,WAAW,KAAM,QAAO;AACjD,MAAI,aAAa,QAAQ,WAAW,MAAM;AACxC,UAAM,IAAI,MAAM,wCAAwC,eAAe,EAAE;AAAA,EAC3E;AACA,QAAM,WAAW,KAAK,IAAI,UAAU,MAAM;AAC1C,QAAM,UAAU,KAAK,IAAI,UAAU,MAAM;AACzC,SAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA,UAAU,WAAW;AAAA,MACrB;AAAA,IACF;AAAA,IACA,UAAU;AAAA,IACV,aAAa;AAAA,IACb,UAAU,UAAU,WAAW;AAAA,IAC/B,aAAa;AAAA,EACf;AACF;AA1BS;AA4BT,SAAS,qBAAqB,OAA0C;AACtE,QAAM,aAAa,+BAAO,QAAQ,OAAO,IAAI;AAC7C,MAAI,CAAC,cAAc,CAAC,cAAc,KAAK,UAAU,EAAG,QAAO;AAC3D,SAAO,kBAAkB,UAAU;AACrC;AAJS;AAMT,SAAS,kBAAkB,OAA0C;AACnE,QAAM,aAAa,+BAAO,QAAQ,OAAO,IAAI;AAC7C,MAAI,CAAC,cAAc,CAAC,QAAQ,KAAK,UAAU,EAAG,QAAO;AACrD,QAAM,MAAM,OAAO,UAAU;AAC7B,MAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,GAAG;AACrC,UAAM,IAAI,MAAM,wCAAwC,KAAK,EAAE;AAAA,EACjE;AACA,SAAO;AACT;AARS;AAUF,SAAS,2BAA2B,OAAsC;AAC/E,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,kCAAkC,KAAK,EAAE;AAAA,EAC3D;AAEA,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,KAAK,QAAQ,CAAC;AACpB,QAAI,OAAO,KAAK;AACd,UAAI,WAAW,QAAQ,IAAI,CAAC,MAAM,KAAK;AACrC,aAAK;AAAA,MACP,OAAO;AACL,kBAAU,CAAC;AAAA,MACb;AACA;AAAA,IACF;AACA,QAAI,OAAO,OAAO,CAAC,SAAS;AAC1B,YAAM,WAAW,QAAQ,MAAM,GAAG,CAAC,EAAE,KAAK;AAC1C,YAAM,UAAU,QAAQ,MAAM,IAAI,CAAC,EAAE,KAAK;AAC1C,UAAI,CAAC,YAAY,CAAC,SAAS;AACzB,cAAM,IAAI,MAAM,kDAAkD,KAAK,EAAE;AAAA,MAC3E;AACA,aAAO,EAAE,WAAW,iBAAiB,QAAQ,GAAG,QAAQ;AAAA,IAC1D;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,QAAQ;AAC5B;AA5BgB;AA8BT,SAAS,mBACd,UACA,aACA,UACA,aACQ;AACR,MAAI,CAAC,OAAO,UAAU,QAAQ,KAAK,WAAW,GAAG;AAC/C,UAAM,IAAI,MAAM,oCAAoC,QAAQ,EAAE;AAAA,EAChE;AACA,MAAI,CAAC,OAAO,UAAU,WAAW,KAAK,cAAc,GAAG;AACrD,UAAM,IAAI,MAAM,uCAAuC,WAAW,EAAE;AAAA,EACtE;AACA,QAAM,QAAQ,kBAAkB,UAAU,WAAW;AACrD,QAAM,OAAO,kBAAkB,WAAW,WAAW,GAAG,cAAc,cAAc,CAAC;AACrF,SAAO,UAAU,OAAO,QAAQ,GAAG,KAAK,IAAI,IAAI;AAClD;AAfgB;AAiBhB,SAAS,iBAAiB,KAAqB;AAC7C,MAAI,CAAC,IAAI,WAAW,GAAG,EAAG,QAAO;AACjC,MAAI,CAAC,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG;AACxC,UAAM,IAAI,MAAM,4CAA4C,GAAG,EAAE;AAAA,EACnE;AACA,SAAO,IAAI,MAAM,GAAG,EAAE,EAAE,QAAQ,OAAO,GAAG;AAC5C;AANS;;;ACrOT,IAAM,cAAc;AAEb,SAAS,oBACd,OACA,UAAU,eACmB;AAC7B,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,YAAY,KAAK,MAAM,GAAG,GAAG;AACvE,UAAM,IAAI,MAAM,GAAG,OAAO,qCAAqC;AAAA,EACjE;AACA,MAAI,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,QAAQ,QAAQ,KAAK,GAAG;AACnD,UAAM,IAAI,MAAM,GAAG,OAAO,mCAAmC;AAAA,EAC/D;AACA,SAAO,EAAE,KAAK,MAAM,IAAI,YAAY,EAAE;AACxC;AAZgB;AAcT,SAAS,sBAAsB,OAAwD;AAC5F,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,aAAa,MAAM,KAAK,EAAE,QAAQ,MAAM,EAAE;AAChD,MAAI,mBAAmB,KAAK,UAAU,GAAG;AACvC,WAAO,EAAE,KAAK,IAAI,WAAW,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG;AAAA,EACxD;AACA,MAAI,mBAAmB,KAAK,UAAU,GAAG;AACvC,WAAO,EAAE,KAAK,IAAI,WAAW,YAAY,CAAC,GAAG;AAAA,EAC/C;AACA,SAAO;AACT;AAVgB;AAYT,SAAS,sBAAsB,OAAwB,UAAU,eAAuB;AAC7F,QAAM,aAAa,oBAAoB,OAAO,OAAO;AACrD,SAAO,KAAK,WAAW,IAAI,MAAM,CAAC,CAAC;AACrC;AAHgB;AAKT,SAAS,eAAe,OAAwB,MAA2C;AAChG,MAAI,SAAS,UAAa,SAAS,KAAK,CAAC,OAAO,SAAS,IAAI,EAAG,QAAO;AACvE,QAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;AAC5C,QAAM,WAAW,CAAC,GAAG,GAAG,CAAC,EAAE;AAAA,IAAI,CAAC,WAC9B,OAAO,SAAS,MAAM,IAAI,MAAM,QAAQ,SAAS,CAAC,GAAG,EAAE;AAAA,EACzD;AACA,QAAM,WAAW,SAAS;AAAA,IAAI,CAAC,YAC7B,KAAK,MAAM,QAAQ,IAAI,WAAW,IAAI,SAAS,WAAW,MAAM,WAAW,KAAK;AAAA,EAClF;AACA,SAAO;AAAA,IACL,KAAK,IAAI,SACN,IAAI,CAAC,YAAY,QAAQ,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EACtD,KAAK,EAAE,EACP,YAAY,CAAC;AAAA,EAClB;AACF;AAfgB;;;ACnBhB,IAAM,aAAa;AACnB,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIA,SAAS,aAAa,QAAiB,IAAY,WAAmC;AApGtF;AAqGE,UAAO,YAAO,uBAAuB,IAAI,SAAS,EAAE,CAAC,MAA9C,YAAmD;AAC5D;AAFS;AAIT,SAAS,gBAAgB,QAAiB,IAAY,WAA8B;AAClF,QAAM,WAAW,OAAO,uBAAuB,IAAI,SAAS;AAC5D,SAAO,MAAM,KAAK,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,kBAAkB,MAAM;AACxE;AAHS;AAKT,SAAS,oBAAoB,KAAwC;AACnE,MAAI,QAAQ,QAAQ,QAAQ,GAAI,QAAO;AACvC,QAAM,QAAQ,OAAO,GAAG;AACxB,SAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AAC1C;AAJS;AAMT,SAAS,iBAAiB,KAAyC;AACjE,MAAI,QAAQ,KAAM,QAAO;AACzB,SAAO,QAAQ,OAAO,QAAQ;AAChC;AAHS;AAKT,SAAS,aACP,QACA,KACA,OACM;AACN,MAAI,UAAU,OAAW,QAAO,GAAG,IAAI;AACzC;AANS;AAQT,SAAS,WACP,IACA,aAC6B;AAnI/B;AAoIE,MAAI,CAAC,GAAI,QAAO;AAChB,MAAI,QAAQ,uBAAsB,QAAG,aAAa,KAAK,MAArB,YAA0B,MAAS;AACrE,QAAM,QAAQ,oBAAoB,GAAG,aAAa,OAAO,CAAC;AAC1D,MAAI,CAAC,SAAS,UAAU,OAAW,SAAQ,YAAY,IAAI,KAAK;AAChE,QAAM,UAAU,oBAAoB,GAAG,aAAa,SAAS,CAAC;AAC9D,MAAI,CAAC,SAAS,YAAY,QAAW;AACnC,UAAM,OACJ,oBAAe,OAAO,MAAtB,YACC,YAAY,KAAK,WAAW,YAAY,KAAK,WAAW;AAC3D,QAAI,IAAK,SAAQ,EAAE,KAAK,IAAI,GAAG,GAAG;AAAA,EACpC;AACA,MAAI,CAAC,SAAS,iBAAiB,GAAG,aAAa,MAAM,CAAC,EAAG,SAAQ,EAAE,KAAK,UAAU;AAClF,SAAO,QAAQ,eAAe,OAAO,oBAAoB,GAAG,aAAa,MAAM,CAAC,CAAC,IAAI;AACvF;AAjBS;AAmBT,SAAS,iBAAiB,KAA2B;AAnJrD;AAoJE,QAAM,cAA2B,oBAAI,IAAI;AACzC,QAAM,YAAW,aAAQ,KAAK,qBAAqB,MAAlC,mBAAqC;AACtD,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,SAAS,SAAS,uBAAuB,YAAY,WAAW,EAAE,CAAC;AACzE,MAAI,CAAC,OAAQ,QAAO;AACpB,oBAAkB,QAAQ,CAAC,MAAM,UAAU;AAzJ7C,QAAAC,KAAA;AA0JI,UAAM,OAAO,MAAM,KAAK,OAAO,uBAAuB,YAAY,IAAI,CAAC,EAAE;AAAA,MACvE,CAAC,YAAY,QAAQ,kBAAkB;AAAA,IACzC;AACA,UAAM,SAAS,6BAAM;AACrB,UAAM,OAAM,MAAAA,MAAA,iCAAQ,aAAa,WAArB,OAAAA,MAA+B,iCAAQ,aAAa,eAApD,YAAkE;AAC9E,UAAM,QAAQ,sBAAsB,GAAG;AACvC,QAAI,MAAO,aAAY,IAAI,OAAO,KAAK;AAAA,EACzC,CAAC;AACD,SAAO;AACT;AAhBS;AAkBT,SAAS,eAAe,QAAiB,MAAkC;AArK3E;AAsKE,SAAO,qBAAoB,wBAAa,QAAQ,OAAO,IAAI,MAAhC,mBAAmC,aAAa,WAAhD,YAA0D,IAAI;AAC3F;AAFS;AAIT,SAAS,eAAe,QAAiB,MAAkC;AAzK3E;AA0KE,UAAO,wBAAa,QAAQ,OAAO,IAAI,MAAhC,mBAAmC,aAAa,WAAhD,YAA0D;AACnE;AAFS;AAIT,SAAS,cAAgC;AACvC,SAAO;AAAA,IACL,eAAe,CAAC;AAAA,IAChB,OAAO,CAAC;AAAA,IACR,OAAO,CAAC;AAAA,IACR,SAAS,CAAC;AAAA,IACV,aAAa,CAAC;AAAA,EAChB;AACF;AARS;AAUT,SAAS,mBAAmB,WAG1B;AACA,QAAM,OAAiC,CAAC;AACxC,QAAM,OAAO,oBAAI,IAAoB;AACrC,QAAM,YAAY,UAAU,uBAAuB,OAAO,QAAQ;AAClE,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,KAAK,UAAU,CAAC;AACtB,QAAI,CAAC,GAAI;AACT,UAAM,KAAK,oBAAoB,GAAG,aAAa,UAAU,CAAC;AAC1D,UAAM,OAAO,GAAG,aAAa,YAAY;AACzC,QAAI,OAAO,UAAa,SAAS,KAAM;AACvC,SAAK,KAAK,EAAE,IAAI,KAAK,CAAC;AACtB,SAAK,IAAI,IAAI,IAAI;AAAA,EACnB;AACA,SAAO,EAAE,MAAM,KAAK;AACtB;AAjBS;AAmBT,SAAS,WAAW,WAAqB,aAA4C;AACnF,QAAM,UAAU,UAAU,uBAAuB,OAAO,OAAO,EAAE,CAAC;AAClE,MAAI,CAAC,QAAS,QAAO,CAAC;AACtB,SAAO,gBAAgB,SAAS,OAAO,MAAM,EAAE,IAAI,CAAC,WAAW;AAC7D,UAAM,OAAuB,CAAC;AAC9B,iBAAa,MAAM,QAAQ,eAAe,QAAQ,MAAM,CAAC;AACzD,iBAAa,MAAM,QAAQ,eAAe,QAAQ,IAAI,CAAC;AACvD,iBAAa,MAAM,UAAU,eAAe,QAAQ,QAAQ,CAAC;AAC7D,iBAAa,MAAM,WAAW,eAAe,QAAQ,SAAS,CAAC;AAC/D,iBAAa,MAAM,UAAU,eAAe,QAAQ,QAAQ,CAAC;AAC7D,iBAAa,MAAM,QAAQ,aAAa,QAAQ,OAAO,GAAG,IAAI,OAAO,MAAS;AAC9E,iBAAa,MAAM,UAAU,aAAa,QAAQ,OAAO,GAAG,IAAI,OAAO,MAAS;AAChF,iBAAa,MAAM,aAAa,aAAa,QAAQ,OAAO,GAAG,IAAI,OAAO,MAAS;AACnF,iBAAa,MAAM,SAAS,WAAW,aAAa,QAAQ,OAAO,OAAO,GAAG,WAAW,CAAC;AACzF,WAAO;AAAA,EACT,CAAC;AACH;AAhBS;AAkBT,SAAS,WAAW,WAAqB,aAA4C;AACnF,QAAM,UAAU,UAAU,uBAAuB,OAAO,OAAO,EAAE,CAAC;AAClE,MAAI,CAAC,QAAS,QAAO,CAAC;AACtB,SAAO,gBAAgB,SAAS,OAAO,MAAM,EAAE,IAAI,CAAC,WAAW;AA/NjE;AAgOI,UAAM,UAAU,aAAa,QAAQ,OAAO,aAAa;AACzD,UAAM,OAAuB,CAAC;AAC9B,QAAI,CAAC,QAAS,QAAO;AACrB,iBAAa,MAAM,gBAAe,aAAQ,aAAa,aAAa,MAAlC,YAAuC,MAAS;AAClF;AAAA,MACE;AAAA,MACA;AAAA,MACA,WAAW,aAAa,SAAS,OAAO,SAAS,GAAG,WAAW;AAAA,IACjE;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,WAAW,aAAa,SAAS,OAAO,SAAS,GAAG,WAAW;AAAA,IACjE;AACA,WAAO;AAAA,EACT,CAAC;AACH;AApBS;AAsBT,SAAS,gBACP,UACA,MACA,aACkC;AAtPpC;AAuPE,QAAM,SAAS,aAAa,UAAU,OAAO,IAAI;AACjD,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,OAA6B,CAAC;AACpC,eAAa,MAAM,UAAS,YAAO,aAAa,OAAO,MAA3B,YAAgC,MAAS;AACrE,eAAa,MAAM,SAAS,WAAW,aAAa,QAAQ,OAAO,OAAO,GAAG,WAAW,CAAC;AACzF,SAAO,OAAO,KAAK,IAAI,EAAE,SAAS,OAAO;AAC3C;AAXS;AAaT,SAAS,aAAa,WAAqB,aAA8C;AACvF,QAAM,YAAY,UAAU,uBAAuB,OAAO,SAAS,EAAE,CAAC;AACtE,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,SAAO,gBAAgB,WAAW,OAAO,QAAQ,EAAE,IAAI,CAAC,aAAa;AACnE,UAAM,SAA2B,CAAC;AAClC,iBAAa,QAAQ,QAAQ,gBAAgB,UAAU,QAAQ,WAAW,CAAC;AAC3E,iBAAa,QAAQ,SAAS,gBAAgB,UAAU,SAAS,WAAW,CAAC;AAC7E,iBAAa,QAAQ,OAAO,gBAAgB,UAAU,OAAO,WAAW,CAAC;AACzE,iBAAa,QAAQ,UAAU,gBAAgB,UAAU,UAAU,WAAW,CAAC;AAC/E,iBAAa,QAAQ,YAAY,gBAAgB,UAAU,YAAY,WAAW,CAAC;AACnF,WAAO;AAAA,EACT,CAAC;AACH;AAZS;AAcT,SAAS,eAAe,MAAgD;AA7QxE;AA8QE,QAAM,cAAc,aAAa,MAAM,OAAO,WAAW;AACzD,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,YAAiC,CAAC;AACxC,eAAa,WAAW,eAAc,iBAAY,aAAa,YAAY,MAArC,YAA0C,MAAS;AACzF,eAAa,WAAW,aAAY,iBAAY,aAAa,UAAU,MAAnC,YAAwC,MAAS;AACrF;AAAA,IACE;AAAA,IACA;AAAA,IACA,oBAAoB,YAAY,aAAa,cAAc,CAAC;AAAA,EAC9D;AACA,eAAa,WAAW,YAAY,iBAAiB,YAAY,aAAa,UAAU,CAAC,CAAC;AAC1F,eAAa,WAAW,eAAe,iBAAiB,YAAY,aAAa,aAAa,CAAC,CAAC;AAChG,eAAa,WAAW,UAAU,oBAAoB,YAAY,aAAa,QAAQ,CAAC,CAAC;AACzF,SAAO,OAAO,KAAK,SAAS,EAAE,SAAS,YAAY;AACrD;AAfS;AAiBT,SAAS,iBACP,WACA,mBACwB;AACxB,QAAM,YAAY,UAAU,uBAAuB,OAAO,SAAS,EAAE,CAAC;AACtE,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,SAAO,gBAAgB,WAAW,OAAO,IAAI,EAAE,IAAI,CAAC,SAAS;AApS/D;AAqSI,UAAM,iBAAiB,oBAAoB,KAAK,aAAa,UAAU,CAAC;AACxE,UAAM,SAA+B,CAAC;AACtC,iBAAa,QAAQ,kBAAkB,cAAc;AACrD;AAAA,MACE;AAAA,MACA;AAAA,MACA,mBAAmB,SACf,UACC,uBAAkB,IAAI,cAAc,MAApC,YAAyC,wBAAwB,cAAc;AAAA,IACtF;AACA,iBAAa,QAAQ,UAAU,oBAAoB,KAAK,aAAa,QAAQ,CAAC,CAAC;AAC/E,iBAAa,QAAQ,UAAU,oBAAoB,KAAK,aAAa,QAAQ,CAAC,CAAC;AAC/E,iBAAa,QAAQ,YAAY,oBAAoB,KAAK,aAAa,UAAU,CAAC,CAAC;AACnF,iBAAa,QAAQ,QAAQ,oBAAoB,KAAK,aAAa,MAAM,CAAC,CAAC;AAC3E;AAAA,MACE;AAAA,MACA;AAAA,MACA,iBAAiB,KAAK,aAAa,mBAAmB,CAAC;AAAA,IACzD;AACA,iBAAa,QAAQ,aAAa,iBAAiB,KAAK,aAAa,WAAW,CAAC,CAAC;AAClF,iBAAa,QAAQ,aAAa,iBAAiB,KAAK,aAAa,WAAW,CAAC,CAAC;AAClF,iBAAa,QAAQ,eAAe,iBAAiB,KAAK,aAAa,aAAa,CAAC,CAAC;AACtF,iBAAa,QAAQ,kBAAkB,iBAAiB,KAAK,aAAa,gBAAgB,CAAC,CAAC;AAC5F,iBAAa,QAAQ,aAAa,eAAe,IAAI,CAAC;AACtD,WAAO;AAAA,EACT,CAAC;AACH;AAjCS;AAmCT,SAAS,wBAAwB,IAAgC;AAC/D,QAAM,WAAmC;AAAA,IACvC,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,IAAI;AAAA,EACN;AACA,SAAO,SAAS,EAAE;AACpB;AAXS;AAaF,SAAS,YAAY,KAAgC;AAC1D,QAAM,OAAO,QAAQ,KAAK,eAAe;AACzC,MAAI,EAAC,6BAAM,QAAQ,QAAO,YAAY;AACtC,QAAM,gBAAgB,mBAAmB,KAAK,MAAM;AACpD,QAAM,cAAc,iBAAiB,GAAG;AACxC,SAAO;AAAA,IACL,eAAe,cAAc;AAAA,IAC7B,OAAO,WAAW,KAAK,QAAQ,WAAW;AAAA,IAC1C,OAAO,WAAW,KAAK,QAAQ,WAAW;AAAA,IAC1C,SAAS,aAAa,KAAK,QAAQ,WAAW;AAAA,IAC9C,aAAa,iBAAiB,KAAK,QAAQ,cAAc,IAAI;AAAA,EAC/D;AACF;AAZgB;;;AC1ThB,SAAS,eAAe,KAAc,MAAoB;AACxD,QAAM,OAAO,QAAQ,KAAK,IAAI;AAC9B,MAAI,EAAC,6BAAM,SAAQ;AACjB,UAAM,IAAI,MAAM,mCAAmC,IAAI,EAAE;AAAA,EAC3D;AACA,SAAO;AACT;AANS;AAQT,SAAS,gBAAgB,KAAc,MAAgC;AACrE,QAAM,OAAO,QAAQ,KAAK,IAAI;AAC9B,UAAO,6BAAM,UAAS,OAAO;AAC/B;AAHS;AAKT,SAAS,OAAO,IAAwC;AAjCxD;AAkCE,MAAI,CAAC,GAAI,QAAO;AAChB,UAAO,QAAG,gBAAH,YAAkB;AAC3B;AAHS;AAKT,SAASC,cAAa,QAAiB,IAAY,WAAmC;AAtCtF;AAuCE,UAAO,YAAO,uBAAuB,IAAI,SAAS,EAAE,CAAC,MAA9C,YAAmD;AAC5D;AAFS,OAAAA,eAAA;AAIT,SAASC,iBAAgB,QAAiB,IAAY,WAA8B;AAClF,QAAM,WAAW,OAAO,uBAAuB,IAAI,SAAS;AAC5D,SAAO,MAAM,KAAK,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,kBAAkB,MAAM;AACxE;AAHS,OAAAA,kBAAA;AAKT,SAAS,mBAAmB,MAAwC;AAClE,QAAM,OAAO,oBAAI,IAA0B;AAC3C,MAAI,EAAC,6BAAM,QAAQ,QAAO;AAC1B,QAAM,SAAS,KAAK,OAAO,uBAAuB,QAAQ,cAAc;AACxE,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,MAAM,OAAO,CAAC;AACpB,QAAI,CAAC,IAAK;AACV,UAAM,KAAK,IAAI,aAAa,IAAI;AAChC,UAAM,OAAO,IAAI,aAAa,MAAM;AACpC,UAAM,SAAS,IAAI,aAAa,QAAQ;AACxC,QAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAQ;AAC7B,UAAM,QAAsB,EAAE,IAAI,MAAM,OAAO;AAC/C,UAAM,aAAa,IAAI,aAAa,YAAY;AAChD,QAAI,WAAY,OAAM,aAAa;AACnC,SAAK,IAAI,IAAI,KAAK;AAAA,EACpB;AACA,SAAO;AACT;AAjBS;AAmBT,SAAS,QAAQ,MAAsB;AACrC,QAAM,QAAQ,KAAK,YAAY,GAAG;AAClC,SAAO,UAAU,KAAK,KAAK,KAAK,MAAM,GAAG,KAAK;AAChD;AAHS;AAKT,SAAS,cAAc,MAAsB;AAC3C,QAAM,QAAkB,CAAC;AACzB,aAAW,QAAQ,KAAK,MAAM,GAAG,GAAG;AAClC,QAAI,CAAC,QAAQ,SAAS,IAAK;AAC3B,QAAI,SAAS,MAAM;AACjB,YAAM,IAAI;AACV;AAAA,IACF;AACA,UAAM,KAAK,IAAI;AAAA,EACjB;AACA,SAAO,MAAM,KAAK,GAAG;AACvB;AAXS;AAaT,SAAS,0BAA0B,gBAAwB,QAAwB;AACjF,MAAI,OAAO,WAAW,GAAG,EAAG,QAAO,cAAc,OAAO,MAAM,CAAC,CAAC;AAChE,SAAO,cAAc,GAAG,QAAQ,cAAc,CAAC,IAAI,MAAM,EAAE;AAC7D;AAHS;AAKF,SAAS,oBAAoB,KAAkC;AACpE,QAAM,WAAW,eAAe,KAAK,iBAAiB;AACtD,QAAM,OAAO,mBAAmB,gBAAgB,KAAK,4BAA4B,CAAC;AAClF,QAAM,WAAWD,cAAa,SAAS,OAAQ,iBAAiB,OAAO,QAAQ;AAC/E,MAAI,CAAC,SAAU,QAAO,CAAC;AAEvB,SAAOC,iBAAgB,UAAU,OAAO,OAAO,EAAE,IAAI,CAAC,SAAS,UAAU;AA/F3E;AAgGI,UAAM,kBAAiB,aAAQ,eAAe,eAAe,IAAI,MAA1C,YAA+C;AACtE,UAAM,MAAM,iBAAiB,KAAK,IAAI,cAAc,IAAI;AACxD,UAAM,OAAO,MAAM,0BAA0B,mBAAmB,IAAI,MAAM,IAAI;AAC9E,UAAM,QAAO,aAAQ,aAAa,MAAM,MAA3B,YAAgC,QAAQ,QAAQ,CAAC;AAC9D,UAAM,MAAK,aAAQ,aAAa,SAAS,MAA9B,YAAmC,OAAO,QAAQ,CAAC;AAC9D,UAAM,cAAa,aAAQ,aAAa,OAAO,MAA5B,YAAiC;AACpD,WAAO,EAAE,IAAI,MAAM,YAAY,gBAAgB,KAAK;AAAA,EACtD,CAAC;AACH;AAfgB;AAiBT,SAAS,kBAAkB,KAAuC;AACvE,QAAM,eAAe,eAAe,KAAK,iBAAiB;AAC1D,QAAM,iBAAiB,aAAa,OAAQ,uBAAuB,OAAO,aAAa;AACvF,QAAM,SAAkC,CAAC;AACzC,WAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,UAAM,KAAK,eAAe,CAAC;AAC3B,QAAI,CAAC,GAAI;AACT,UAAM,OAAO,GAAG,aAAa,MAAM;AACnC,QAAI,CAAC,KAAM;AACX,UAAM,QAA+B;AAAA,MACnC;AAAA,MACA,MAAM,OAAO,EAAE;AAAA,IACjB;AACA,UAAM,eAAe,GAAG,aAAa,cAAc;AACnD,QAAI,iBAAiB,QAAQ,iBAAiB,IAAI;AAChD,YAAM,QAAQ,OAAO,YAAY;AACjC,UAAI,OAAO,SAAS,KAAK,EAAG,OAAM,eAAe;AAAA,IACnD;AACA,WAAO,KAAK,KAAK;AAAA,EACnB;AACA,SAAO;AACT;AArBgB;AAuBT,SAAS,mBAAmB,KAAwB;AACzD,QAAM,OAAO,gBAAgB,KAAK,sBAAsB;AACxD,MAAI,EAAC,6BAAM,QAAQ,QAAO,CAAC;AAC3B,QAAM,UAAoB,CAAC;AAC3B,QAAM,QAAQ,KAAK,OAAO,uBAAuB,OAAO,IAAI;AAC5D,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,KAAK,MAAM,CAAC;AAClB,QAAI,CAAC,GAAI;AACT,UAAM,OAAO,GAAG,uBAAuB,OAAO,GAAG;AACjD,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAQ,OAAO,KAAK,CAAC,CAAC;AAAA,IACxB;AACA,YAAQ,KAAK,IAAI;AAAA,EACnB;AACA,SAAO;AACT;AAhBgB;;;AC3EhB,SAASC,iBAAgB,KAAc,MAAgC;AACrE,QAAM,OAAO,QAAQ,KAAK,IAAI;AAC9B,UAAO,6BAAM,UAAS,OAAO;AAC/B;AAHS,OAAAA,kBAAA;AAKT,SAASC,QAAO,IAAwC;AA3DxD;AA4DE,MAAI,CAAC,GAAI,QAAO;AAChB,UAAO,QAAG,gBAAH,YAAkB;AAC3B;AAHS,OAAAA,SAAA;AAKT,SAASC,cAAa,QAAiB,IAAY,WAAmC;AAhEtF;AAiEE,UAAO,YAAO,uBAAuB,IAAI,SAAS,EAAE,CAAC,MAA9C,YAAmD;AAC5D;AAFS,OAAAA,eAAA;AAIT,SAASC,iBAAgB,QAAiB,IAAY,WAA8B;AAClF,QAAM,SAAoB,CAAC;AAC3B,WAAS,IAAI,GAAG,IAAI,OAAO,WAAW,QAAQ,KAAK;AACjD,UAAM,QAAQ,OAAO,WAAW,CAAC;AACjC,SAAI,+BAAO,cAAa,EAAG;AAC3B,UAAM,KAAK;AACX,QAAI,GAAG,iBAAiB,MAAM,GAAG,cAAc,WAAW;AACxD,aAAO,KAAK,EAAE;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAXS,OAAAA,kBAAA;AAaT,SAASC,oBAAmB,MAAwC;AAjFpE;AAkFE,QAAM,SAAS,oBAAI,IAA0B;AAC7C,MAAI,EAAC,6BAAM,QAAQ,QAAO;AAE1B,QAAM,OAAO,KAAK,OAAO,uBAAuB,QAAQ,cAAc;AACtE,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,CAAC,IAAK;AACV,UAAM,KAAK,IAAI,aAAa,IAAI;AAChC,UAAM,OAAO,IAAI,aAAa,MAAM;AACpC,UAAM,SAAS,IAAI,aAAa,QAAQ;AACxC,QAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAQ;AAC7B,WAAO,IAAI,IAAI;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAY,SAAI,aAAa,YAAY,MAA7B,YAAkC;AAAA,IAChD,CAAC;AAAA,EACH;AACA,SAAO;AACT;AApBS,OAAAA,qBAAA;AAsBT,SAASC,SAAQ,MAAsB;AACrC,QAAM,MAAM,KAAK,YAAY,GAAG;AAChC,SAAO,QAAQ,KAAK,KAAK,KAAK,MAAM,GAAG,GAAG;AAC5C;AAHS,OAAAA,UAAA;AAKT,SAASC,eAAc,MAAsB;AAC3C,QAAM,QAAkB,CAAC;AACzB,aAAW,QAAQ,KAAK,MAAM,GAAG,GAAG;AAClC,QAAI,CAAC,QAAQ,SAAS,IAAK;AAC3B,QAAI,SAAS,KAAM,OAAM,IAAI;AAAA,QACxB,OAAM,KAAK,IAAI;AAAA,EACtB;AACA,SAAO,MAAM,KAAK,GAAG;AACvB;AARS,OAAAA,gBAAA;AAUT,SAASC,2BAA0B,gBAAwB,QAAwB;AACjF,MAAI,OAAO,WAAW,GAAG,EAAG,QAAOD,eAAc,OAAO,MAAM,CAAC,CAAC;AAChE,QAAM,OAAOD,SAAQ,cAAc;AACnC,SAAOC,eAAc,OAAO,GAAG,IAAI,IAAI,MAAM,KAAK,MAAM;AAC1D;AAJS,OAAAC,4BAAA;AAMT,SAAS,YAAY,KAAwC;AAC3D,MAAI,QAAQ,UAAa,QAAQ,GAAI,QAAO;AAC5C,QAAM,QAAQ,OAAO,GAAG;AACxB,SAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AAC1C;AAJS;AAMT,SAASC,qBAAoB,KAAwC;AACnE,MAAI,QAAQ,QAAQ,QAAQ,GAAI,QAAO;AACvC,QAAM,QAAQ,OAAO,GAAG;AACxB,SAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AAC1C;AAJS,OAAAA,sBAAA;AAMT,SAASC,kBAAiB,KAAyC;AACjE,MAAI,QAAQ,KAAM,QAAO;AACzB,SAAO,QAAQ,OAAO,QAAQ;AAChC;AAHS,OAAAA,mBAAA;AAKT,SAASC,cAAkD,QAAW,KAAQ,OAA+B;AAC3G,MAAI,UAAU,OAAW,QAAO,GAAG,IAAI;AACzC;AAFS,OAAAA,eAAA;AAIT,SAAS,UAAU,MAAe,eAAgD;AAjJlF;AAkJE,QAAM,UAAU,KAAK,aAAa,GAAG;AACrC,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,EAAE,KAAK,OAAO,IAAI,iBAAiB,OAAO;AAChD,QAAM,YAAW,UAAK,aAAa,GAAG,MAArB,YAA0B;AAC3C,QAAM,aAAa,KAAK,aAAa,GAAG;AACxC,QAAM,UAAUT,QAAOC,cAAa,MAAM,OAAO,GAAG,CAAC,KAAK;AAC1D,QAAM,WAAWD,QAAOC,cAAa,MAAM,OAAO,GAAG,CAAC,KAAK;AAC3D,MAAI,OAAsB,UAAU,YAAY;AAChD,MAAI,QAA0C;AAC9C,MAAI;AAEJ,MAAI,aAAa,KAAK;AACpB,wBAAoB,aAAa,SAAY,SAAY,OAAO,QAAQ;AACxE,YACE,sBAAsB,UAAa,CAAC,OAAO,UAAU,iBAAiB,IAClE,QACC,mBAAc,iBAAiB,MAA/B,YAAoC;AAC3C,WAAO,UAAU,YAAY;AAAA,EAC/B,WAAW,aAAa,aAAa;AACnC,UAAM,SAASA,cAAa,MAAM,OAAO,IAAI;AAC7C,UAAM,QAAO,sCAAQ,uBAAuB,OAAO,SAAtC,YAA8C,CAAC;AAC5D,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,SAAQD,QAAO,KAAK,CAAC,CAAC;AAC5D,YAAQ;AACR,WAAO,UAAU,YAAY;AAAA,EAC/B,WAAW,aAAa,KAAK;AAC3B,YAAQ,aAAa;AACrB,WAAO,UAAU,YAAY;AAAA,EAC/B,WAAW,aAAa,OAAO;AAC7B,YAAQ,8BAAY;AACpB,WAAO,UAAU,YAAY;AAAA,EAC/B,WAAW,aAAa,KAAK;AAC3B,YAAQ,8BAAY;AACpB,WAAO;AAAA,EACT,WAAW,aAAa,QAAW;AACjC,YAAQ,YAAY,QAAQ;AAC5B,WAAO,UAAU,YAAY;AAAA,EAC/B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,eAAe,OAAO,SAAY,OAAO,UAAU;AAAA,IAC5D;AAAA,EACF;AACF;AApDS;AAsDT,SAAS,aAAa,UAAwC;AAC5D,QAAM,SAAS,SAAS,uBAAuB,OAAO,KAAK;AAC3D,QAAM,UAA8B,CAAC;AACrC,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,MAAM,OAAO,CAAC;AACpB,QAAI,CAAC,IAAK;AACV,UAAM,MAAMO,qBAAoB,IAAI,aAAa,KAAK,CAAC;AACvD,UAAM,MAAMA,qBAAoB,IAAI,aAAa,KAAK,CAAC;AACvD,QAAI,QAAQ,UAAa,QAAQ,OAAW;AAC5C,UAAM,SAA2B,EAAE,KAAK,IAAI;AAC5C,IAAAE,cAAa,QAAQ,SAASF,qBAAoB,IAAI,aAAa,OAAO,CAAC,CAAC;AAC5E,IAAAE,cAAa,QAAQ,UAAUD,kBAAiB,IAAI,aAAa,QAAQ,CAAC,CAAC;AAC3E,IAAAC,cAAa,QAAQ,WAAWF,qBAAoB,IAAI,aAAa,OAAO,CAAC,CAAC;AAC9E,IAAAE,cAAa,QAAQ,eAAeD,kBAAiB,IAAI,aAAa,aAAa,CAAC,CAAC;AACrF,YAAQ,KAAK,MAAM;AAAA,EACrB;AACA,SAAO;AACT;AAjBS;AAmBT,SAAS,UAAU,UAAqC;AACtD,QAAM,SAAS,SAAS,uBAAuB,OAAO,KAAK;AAC3D,QAAM,OAAwB,CAAC;AAC/B,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,MAAM,OAAO,CAAC;AACpB,QAAI,CAAC,IAAK;AACV,UAAM,QAAQD,qBAAoB,IAAI,aAAa,GAAG,CAAC;AACvD,QAAI,UAAU,OAAW;AACzB,UAAM,WAA0B,EAAE,MAAM;AACxC,IAAAE,cAAa,UAAU,UAAUF,qBAAoB,IAAI,aAAa,IAAI,CAAC,CAAC;AAC5E,IAAAE,cAAa,UAAU,UAAUD,kBAAiB,IAAI,aAAa,QAAQ,CAAC,CAAC;AAC7E,IAAAC,cAAa,UAAU,WAAWF,qBAAoB,IAAI,aAAa,GAAG,CAAC,CAAC;AAC5E,IAAAE,cAAa,UAAU,gBAAgBD,kBAAiB,IAAI,aAAa,cAAc,CAAC,CAAC;AACzF,SAAK,KAAK,QAAQ;AAAA,EACpB;AACA,SAAO;AACT;AAhBS;AAkBT,SAAS,kBAAkB,UAA6C;AA5OxE;AA6OE,QAAM,eAAe,SAAS,uBAAuB,OAAO,WAAW;AACvE,QAAM,eAAwC,CAAC;AAC/C,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,UAAM,OAAM,kBAAa,CAAC,MAAd,mBAAiB,aAAa;AAC1C,QAAI,IAAK,cAAa,KAAK,EAAE,SAAS,IAAI,CAAC;AAAA,EAC7C;AACA,SAAO;AACT;AARS;AAUT,SAAS,0BAA0B,WAA2B;AAC5D,SAAO,GAAGJ,SAAQ,SAAS,CAAC,UAAU,UAAU,MAAM,UAAU,YAAY,GAAG,IAAI,CAAC,CAAC;AACvF;AAFS;AAIT,SAAS,gBAAgB,KAAc,WAAmB,UAA2C;AA1PrG;AA2PE,QAAM,OAAOD,oBAAmBJ,iBAAgB,KAAK,0BAA0B,SAAS,CAAC,CAAC;AAC1F,QAAM,eAAe,SAAS,uBAAuB,OAAO,WAAW;AACvE,QAAM,aAAoC,CAAC;AAC3C,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,UAAM,YAAY,aAAa,CAAC;AAChC,QAAI,CAAC,UAAW;AAChB,UAAM,MAAM,UAAU,aAAa,KAAK;AACxC,QAAI,CAAC,IAAK;AACV,UAAM,kBAAiB,eAAU,eAAe,eAAe,IAAI,MAA5C,YAAiD;AACxE,UAAM,MAAM,iBAAiB,KAAK,IAAI,cAAc,IAAI;AACxD,UAAM,QAA6B,EAAE,IAAI;AACzC,IAAAU,cAAa,OAAO,kBAAkB,cAAc;AACpD,IAAAA;AAAA,MACE;AAAA,MACA;AAAA,MACA,MAAO,IAAI,eAAe,aAAa,IAAI,SAASH,2BAA0B,WAAW,IAAI,MAAM,IAAK;AAAA,IAC1G;AACA,IAAAG,cAAa,OAAO,cAAc,2BAAK,UAAU;AACjD,IAAAA,cAAa,OAAO,aAAY,eAAU,aAAa,UAAU,MAAjC,YAAsC,MAAS;AAC/E,IAAAA,cAAa,OAAO,YAAW,eAAU,aAAa,SAAS,MAAhC,YAAqC,MAAS;AAC7E,IAAAA,cAAa,OAAO,YAAW,eAAU,aAAa,SAAS,MAAhC,YAAqC,MAAS;AAC7E,eAAW,KAAK,KAAK;AAAA,EACvB;AACA,SAAO;AACT;AAzBS;AA2BT,SAAS,kBAAkB,UAA6C;AArRxE;AAsRE,QAAM,iBAAiB,SAAS,uBAAuB,OAAO,aAAa;AAC3E,QAAM,UAAmC,CAAC;AAC1C,WAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,UAAM,KAAK,eAAe,CAAC;AAC3B,QAAI,CAAC,GAAI;AACT,UAAM,KAAKF,qBAAoB,GAAG,aAAa,IAAI,CAAC;AACpD,UAAM,OAAO,GAAG,aAAa,MAAM;AACnC,QAAI,OAAO,UAAa,SAAS,KAAM;AACvC,UAAM,SAAgC,EAAE,IAAI,KAAK;AACjD,IAAAE,cAAa,QAAQ,mBAAkB,QAAG,aAAa,gBAAgB,MAAhC,YAAqC,MAAS;AACrF,IAAAA,cAAa,QAAQ,sBAAqB,QAAG,aAAa,mBAAmB,MAAnC,YAAwC,MAAS;AAC3F,YAAQ,KAAK,MAAM;AAAA,EACrB;AACA,SAAO;AACT;AAfS;AAiBT,SAAS,gBAAgB,UAAsD;AAtS/E;AAuSE,QAAM,UAAU,SAAS,uBAAuB,OAAO,gBAAgB,EAAE,CAAC;AAC1E,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,QAA8B,CAAC;AACrC,EAAAA,cAAa,OAAO,SAAQ,aAAQ,aAAa,MAAM,MAA3B,YAAgC,MAAS;AACrE,EAAAA,cAAa,OAAO,mBAAmBD,kBAAiB,QAAQ,aAAa,iBAAiB,CAAC,CAAC;AAChG,EAAAC,cAAa,OAAO,kBAAkBD,kBAAiB,QAAQ,aAAa,gBAAgB,CAAC,CAAC;AAC9F,EAAAC,cAAa,OAAO,kBAAkBD,kBAAiB,QAAQ,aAAa,gBAAgB,CAAC,CAAC;AAC9F,EAAAC,cAAa,OAAO,qBAAqBD,kBAAiB,QAAQ,aAAa,mBAAmB,CAAC,CAAC;AACpG,SAAO,OAAO,KAAK,KAAK,EAAE,SAAS,QAAQ;AAC7C;AAVS;AAYT,SAAS,qBAAqB,UAA2D;AAlTzF;AAmTE,QAAM,UAAU,SAAS,uBAAuB,OAAO,OAAO,EAAE,CAAC;AACjE,QAAM,eAAe,UAAUP,cAAa,SAAS,OAAO,YAAY,IAAI;AAC5E,MAAI,CAAC,aAAc,QAAO;AAC1B,QAAM,QAAmC;AAAA,IACvC,MAAK,kBAAa,aAAa,KAAK,MAA/B,YAAoC;AAAA,IACzC,eAAe,mBAAmB,YAAY;AAAA,EAChD;AACA,EAAAQ,cAAa,OAAO,aAAa,eAAe,YAAY,CAAC;AAC7D,MAAI,CAAC,MAAM,cAAc,UAAU,CAAC,MAAM,UAAW,QAAO;AAC5D,SAAO;AACT;AAXS;AAaT,SAAS,mBAAmB,cAAsD;AAChF,SAAOP,iBAAgB,cAAc,OAAO,cAAc,EAAE,QAAQ,CAAC,mBAAmB;AACtF,UAAM,QAAQK,qBAAoB,eAAe,aAAa,OAAO,CAAC;AACtE,QAAI,UAAU,OAAW,QAAO,CAAC;AACjC,UAAM,eAA4C,EAAE,MAAM;AAC1D,IAAAE,cAAa,cAAc,gBAAgBD,kBAAiB,eAAe,aAAa,cAAc,CAAC,CAAC;AACxG,IAAAC,cAAa,cAAc,cAAcD,kBAAiB,eAAe,aAAa,YAAY,CAAC,CAAC;AACpG,UAAM,YAAYP,cAAa,gBAAgB,OAAO,SAAS;AAC/D,UAAM,UAAU,YACZC,iBAAgB,WAAW,OAAO,QAAQ,EACvC,IAAI,CAAC,aAAU;AAzU1B;AAyU6B,4BAAS,aAAa,KAAK,MAA3B,YAAgC;AAAA,KAAS,EAC3D,OAAO,CAAC,UAA2B,UAAU,MAAS,IACzD,CAAC;AACL,QAAI,QAAQ,OAAQ,cAAa,UAAU;AAC3C,WAAO,CAAC,YAAY;AAAA,EACtB,CAAC;AACH;AAhBS;AAkBT,SAAS,eAAe,cAA6D;AAjVrF;AAkVE,QAAM,cAAcD,cAAa,cAAc,OAAO,WAAW;AACjE,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,QAAkC,EAAE,YAAY,CAAC,EAAE;AACzD,EAAAQ,cAAa,OAAO,QAAO,iBAAY,aAAa,KAAK,MAA9B,YAAmC,MAAS;AACvE,EAAAA,cAAa,OAAO,iBAAiBD,kBAAiB,YAAY,aAAa,eAAe,CAAC,CAAC;AAChG,EAAAC,cAAa,OAAO,eAAc,iBAAY,aAAa,YAAY,MAArC,YAA0C,MAAS;AACrF,QAAM,aAAaP,iBAAgB,aAAa,OAAO,eAAe,EAAE,IAAI,CAAC,gBAAgB;AAxV/F,QAAAQ,KAAAC;AAyVI,UAAM,YAA0C,CAAC;AACjD,IAAAF,cAAa,WAAW,QAAOC,MAAA,YAAY,aAAa,KAAK,MAA9B,OAAAA,MAAmC,MAAS;AAC3E,IAAAD,cAAa,WAAW,cAAcD,kBAAiB,YAAY,aAAa,YAAY,CAAC,CAAC;AAC9F,IAAAC,cAAa,WAAW,WAAUE,MAAA,YAAY,aAAa,QAAQ,MAAjC,OAAAA,MAAsC,MAAS;AACjF,WAAO;AAAA,EACT,CAAC;AACD,SAAO;AACT;AAfS;AAiBT,SAAS,eAAe,KAAc,gBAAwB,MAA+B;AAlW7F;AAmWE,QAAM,OAAOZ,iBAAgB,KAAK,IAAI;AACtC,MAAI,EAAC,6BAAM,SAAQ;AACjB,WAAO,EAAE,gBAAgB,MAAM,SAAS,CAAC,EAAE;AAAA,EAC7C;AAEA,QAAM,UAAU,KAAK,OAAO,uBAAuB,OAAO,OAAO,EAAE,CAAC;AACpE,MAAI,CAAC,SAAS;AACZ,WAAO,EAAE,gBAAgB,MAAM,SAAS,CAAC,EAAE;AAAA,EAC7C;AAEA,QAAM,QAAyB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,SAAS,kBAAkB,KAAK,MAAM;AAAA,EACxC;AACA,EAAAU,cAAa,OAAO,MAAMF,qBAAoB,QAAQ,aAAa,IAAI,CAAC,CAAC;AACzE,EAAAE,cAAa,OAAO,SAAQ,aAAQ,aAAa,MAAM,MAA3B,YAAgC,MAAS;AACrE,EAAAA,cAAa,OAAO,gBAAe,aAAQ,aAAa,aAAa,MAAlC,YAAuC,MAAS;AACnF,EAAAA,cAAa,OAAO,QAAO,aAAQ,aAAa,KAAK,MAA1B,YAA+B,MAAS;AACnE,EAAAA,cAAa,OAAO,kBAAkBF,qBAAoB,QAAQ,aAAa,gBAAgB,CAAC,CAAC;AACjG,EAAAE,cAAa,OAAO,kBAAkBF,qBAAoB,QAAQ,aAAa,gBAAgB,CAAC,CAAC;AACjG,EAAAE,cAAa,OAAO,kBAAkBD,kBAAiB,QAAQ,aAAa,gBAAgB,CAAC,CAAC;AAC9F,QAAM,eAAeP,cAAa,SAAS,OAAO,YAAY;AAC9D,QAAM,aAAa,qBAAqB,KAAK,MAAM;AACnD,EAAAQ,cAAa,OAAO,kBAAiB,kDAAc,aAAa,WAA3B,YAAqC,MAAS;AACnF,EAAAA,cAAa,OAAO,cAAc,UAAU;AAC5C,EAAAA,cAAa,OAAO,SAAS,gBAAgB,KAAK,MAAM,CAAC;AACzD,SAAO;AACT;AA7BS;AA+BT,SAAS,YAAY,KAAc,WAAmB,UAAuC;AAjY7F;AAkYE,QAAM,OAAON,oBAAmBJ,iBAAgB,KAAK,0BAA0B,SAAS,CAAC,CAAC;AAC1F,QAAM,eAAe,SAAS,uBAAuB,OAAO,WAAW;AACvE,QAAM,SAA4B,CAAC;AACnC,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,UAAM,kBAAiB,wBAAa,CAAC,MAAd,mBAAiB,eAAe,eAAe,UAA/C,YAAwD;AAC/E,QAAI,CAAC,eAAgB;AACrB,UAAM,MAAM,KAAK,IAAI,cAAc;AACnC,QAAI,CAAC,KAAK;AACR,aAAO,KAAK,EAAE,gBAAgB,SAAS,CAAC,EAAE,CAAC;AAC3C;AAAA,IACF;AACA,WAAO,KAAK,eAAe,KAAK,gBAAgBO,2BAA0B,WAAW,IAAI,MAAM,CAAC,CAAC;AAAA,EACnG;AACA,SAAO;AACT;AAfS;AAiBT,SAAS,qBAAqB,UAAgD;AAlZ9E;AAmZE,QAAM,gBAAgB,SAAS,uBAAuB,OAAO,gBAAgB;AAC7E,QAAM,cAA0C,CAAC;AACjD,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,UAAM,KAAK,cAAc,CAAC;AAC1B,QAAI,CAAC,GAAI;AACT,UAAM,aAAuC,CAAC;AAC9C,IAAAG,cAAa,YAAY,UAAS,QAAG,aAAa,OAAO,MAAvB,YAA4B,MAAS;AACvE,IAAAA,cAAa,YAAY,SAAQ,QAAG,aAAa,MAAM,MAAtB,YAA2B,MAAS;AACrE,IAAAA,cAAa,YAAY,aAAY,QAAG,aAAa,UAAU,MAA1B,YAA+B,MAAS;AAC7E,IAAAA,cAAa,YAAY,cAAcD,kBAAiB,GAAG,aAAa,YAAY,CAAC,CAAC;AACtF,IAAAC,cAAa,YAAY,gBAAgBD,kBAAiB,GAAG,aAAa,cAAc,CAAC,CAAC;AAC1F,IAAAC,cAAa,YAAY,oBAAoBD,kBAAiB,GAAG,aAAa,kBAAkB,CAAC,CAAC;AAClG,IAAAC,cAAa,YAAY,oBAAoBD,kBAAiB,GAAG,aAAa,kBAAkB,CAAC,CAAC;AAClG,IAAAC,cAAa,YAAY,eAAc,QAAG,aAAa,YAAY,MAA5B,YAAiC,MAAS;AACjF,IAAAA,cAAa,YAAY,eAAc,QAAG,aAAa,YAAY,MAA5B,YAAiC,MAAS;AACjF,IAAAA,cAAa,YAAY,UAAS,QAAG,aAAa,OAAO,MAAvB,YAA4B,MAAS;AACvE,IAAAA,cAAa,YAAY,gBAAe,QAAG,aAAa,aAAa,MAA7B,YAAkC,MAAS;AACnF,IAAAA,cAAa,YAAY,WAAU,QAAG,aAAa,QAAQ,MAAxB,YAA6B,MAAS;AACzE,IAAAA,cAAa,YAAY,YAAYT,QAAOC,cAAa,IAAI,OAAO,UAAU,CAAC,KAAK,MAAS;AAC7F,IAAAQ,cAAa,YAAY,YAAYT,QAAOC,cAAa,IAAI,OAAO,UAAU,CAAC,KAAK,MAAS;AAC7F,gBAAY,KAAK,UAAU;AAAA,EAC7B;AACA,SAAO;AACT;AAxBS;AA0BT,SAAS,2BAA2B,QAAkD;AA5atF;AA6aE,QAAM,OAAwC,EAAE,UAAU,CAAC,EAAE;AAC7D,EAAAQ,cAAa,MAAM,SAAQ,YAAO,aAAa,MAAM,MAA1B,YAA+B,MAAS;AACnE,EAAAA,cAAa,MAAM,YAAYF,qBAAoB,OAAO,aAAa,UAAU,CAAC,CAAC;AACnF,EAAAE,cAAa,MAAM,aAAY,YAAO,aAAa,UAAU,MAA9B,YAAmC,MAAS;AAC3E,EAAAA,cAAa,MAAM,SAASF,qBAAoB,OAAO,aAAa,OAAO,CAAC,CAAC;AAC7E,EAAAE,cAAa,MAAM,cAAcD,kBAAiB,OAAO,aAAa,YAAY,CAAC,CAAC;AACpF,EAAAC,cAAa,MAAM,gBAAgBD,kBAAiB,OAAO,aAAa,cAAc,CAAC,CAAC;AACxF,EAAAC,cAAa,MAAM,WAAWD,kBAAiB,OAAO,aAAa,SAAS,CAAC,CAAC;AAC9E,EAAAC,cAAa,MAAM,UAAUD,kBAAiB,OAAO,aAAa,QAAQ,CAAC,CAAC;AAC5E,EAAAC,cAAa,MAAM,QAAQF,qBAAoB,OAAO,aAAa,MAAM,CAAC,CAAC;AAC3E,EAAAE,cAAa,MAAM,SAAQ,YAAO,aAAa,MAAM,MAA1B,YAA+B,MAAS;AACnE,EAAAA,cAAa,MAAM,eAAc,YAAO,aAAa,YAAY,MAAhC,YAAqC,MAAS;AAC/E,QAAM,aAAaP,iBAAgB,QAAQ,OAAO,SAAS;AAC3D,OAAK,WAAW,WAAW,IAAI,CAAC,YAAYF,QAAO,OAAO,CAAC;AAC3D,SAAO;AACT;AAhBS;AAkBT,SAAS,wBAAwB,UAAmD;AA9bpF;AA+bE,QAAM,2BAA2B,SAAS,uBAAuB,OAAO,uBAAuB;AAC/F,QAAM,qBAAoD,CAAC;AAC3D,WAAS,IAAI,GAAG,IAAI,yBAAyB,QAAQ,KAAK;AACxD,UAAM,KAAK,yBAAyB,CAAC;AACrC,QAAI,CAAC,GAAI;AACT,UAAM,SAAsC;AAAA,MAC1C,OAAOE,iBAAgB,IAAI,OAAO,QAAQ,EAAE,IAAI,CAAC,SAAS,2BAA2B,IAAI,CAAC;AAAA,IAC5F;AACA,IAAAO,cAAa,QAAQ,UAAS,QAAG,aAAa,OAAO,MAAvB,YAA4B,MAAS;AACnE,uBAAmB,KAAK,MAAM;AAAA,EAChC;AACA,SAAO;AACT;AAbS;AAeT,SAAS,0BAA0B,KAAc,WAAmB,YAAyD;AAC3H,QAAM,OAAON,oBAAmBJ,iBAAgB,KAAK,0BAA0B,SAAS,CAAC,CAAC;AAC1F,QAAM,UAA+C,CAAC;AACtD,aAAW,OAAO,KAAK,OAAO,GAAG;AAC/B,QAAI,IAAI,KAAK,SAAS,UAAU,GAAG;AACjC,cAAQ,KAAK,EAAE,IAAI,IAAI,IAAI,MAAMO,2BAA0B,WAAW,IAAI,MAAM,EAAE,CAAC;AAAA,IACrF;AAAA,EACF;AACA,SAAO;AACT;AATS;AAWT,SAAS,cAAc,KAAc,WAAwC;AAC3E,QAAM,UAAU,0BAA0B,KAAK,WAAW,WAAW;AACrE,QAAM,WAAgC,CAAC;AACvC,aAAW,UAAU,SAAS;AAC5B,UAAM,OAAOP,iBAAgB,KAAK,OAAO,IAAI;AAC7C,QAAI,EAAC,6BAAM,QAAQ;AACnB,UAAM,UAAU,MAAM,KAAK,KAAK,OAAO,uBAAuB,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,WAAWC,QAAO,MAAM,CAAC;AAC9G,UAAM,aAAa,KAAK,OAAO,uBAAuB,OAAO,SAAS;AACtE,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,YAAM,KAAK,WAAW,CAAC;AACvB,UAAI,CAAC,GAAI;AACT,YAAM,MAAM,GAAG,aAAa,KAAK;AACjC,UAAI,CAAC,IAAK;AACV,YAAM,WAAWO,qBAAoB,GAAG,aAAa,UAAU,CAAC;AAChE,YAAM,UAA6B;AAAA,QACjC;AAAA,QACA,MAAMP,QAAOC,cAAa,IAAI,OAAO,MAAM,CAAC;AAAA,MAC9C;AACA,MAAAQ,cAAa,SAAS,YAAY,QAAQ;AAC1C,MAAAA,cAAa,SAAS,UAAU,aAAa,SAAY,SAAY,QAAQ,QAAQ,CAAC;AACtF,MAAAA,cAAa,SAAS,WAAWF,qBAAoB,GAAG,aAAa,SAAS,CAAC,CAAC;AAChF,eAAS,KAAK,OAAO;AAAA,IACvB;AAAA,EACF;AACA,SAAO;AACT;AAzBS;AA2BT,SAAS,sBAAsB,KAAc,WAAgD;AAnf7F;AAofE,QAAM,UAAU,0BAA0B,KAAK,WAAW,kBAAkB;AAC5E,QAAM,WAAwC,CAAC;AAC/C,aAAW,UAAU,SAAS;AAC5B,UAAM,OAAOR,iBAAgB,KAAK,OAAO,IAAI;AAC7C,QAAI,EAAC,6BAAM,QAAQ;AACnB,UAAM,aAAa,KAAK,OAAO,uBAAuB,KAAK,iBAAiB;AAC5E,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,YAAM,KAAK,WAAW,CAAC;AACvB,UAAI,CAAC,GAAI;AACT,YAAM,MAAM,GAAG,aAAa,KAAK;AACjC,UAAI,CAAC,IAAK;AACV,YAAM,UAAqC;AAAA,QACzC;AAAA,QACA,MAAMC,QAAOC,cAAa,KAAI,QAAG,iBAAH,YAAmB,IAAI,MAAM,CAAC,KAAKD,QAAO,GAAG,uBAAuB,KAAK,MAAM,EAAE,CAAC,CAAC;AAAA,MACnH;AACA,MAAAS,cAAa,SAAS,OAAM,QAAG,aAAa,IAAI,MAApB,YAAyB,MAAS;AAC9D,MAAAA,cAAa,SAAS,aAAY,QAAG,aAAa,UAAU,MAA1B,YAA+B,MAAS;AAC1E,MAAAA,cAAa,SAAS,aAAY,QAAG,aAAa,IAAI,MAApB,YAAyB,MAAS;AACpE,eAAS,KAAK,OAAO;AAAA,IACvB;AAAA,EACF;AACA,SAAO;AACT;AAvBS;AAyBT,SAAS,qBAAqB,QAAiB,WAAmC;AA5gBlF;AA6gBE,UAAO,YAAO,uBAAuB,KAAK,SAAS,EAAE,CAAC,MAA/C,YAAoD;AAC7D;AAFS;AAIT,SAAS,iBAAiB,QAA4B,WAA8B;AAClF,SAAO,MAAM,KAAK,OAAO,uBAAuB,KAAK,SAAS,CAAC;AACjE;AAFS;AAIT,SAAS,mBAAmB,QAAiB,WAAwD;AAphBrG;AAqhBE,QAAM,WAAW,qBAAqB,QAAQ,SAAS;AACvD,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,SAAkC,CAAC;AACzC,EAAAA,cAAa,QAAQ,UAAUF,sBAAoB,gCAAqB,UAAU,KAAK,MAApC,mBAAuC,gBAAvC,YAAsD,IAAI,CAAC;AAC9G,EAAAE,cAAa,QAAQ,gBAAgBF,sBAAoB,gCAAqB,UAAU,QAAQ,MAAvC,mBAA0C,gBAA1C,YAAyD,IAAI,CAAC;AACvH,EAAAE,cAAa,QAAQ,OAAOF,sBAAoB,gCAAqB,UAAU,KAAK,MAApC,mBAAuC,gBAAvC,YAAsD,IAAI,CAAC;AAC3G,EAAAE,cAAa,QAAQ,aAAaF,sBAAoB,gCAAqB,UAAU,QAAQ,MAAvC,mBAA0C,gBAA1C,YAAyD,IAAI,CAAC;AACpH,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,SAAS;AAC/C;AATS;AAWT,SAAS,kBAAkB,QAAqC;AA/hBhE;AAgiBE,UAAO,gCAAqB,QAAQ,OAAO,MAApC,mBAAuC,aAAa,YAApD,YAA+D;AACxE;AAFS;AAIT,SAAS,mBAAmB,UAAmB,MAAiC,aAA0D;AAniB1I;AAoiBE,QAAM,UAAU,qBAAqB,UAAU,OAAO;AACtD,MAAI,SAAS;AACX,UAAM,kBAAiB,aAAQ,eAAe,eAAe,IAAI,MAA1C,YAA+C;AACtE,UAAM,MAAM,iBAAiB,KAAK,IAAI,cAAc,IAAI;AACxD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM,kBAAkB,QAAQ;AAAA,MAChC;AAAA,MACA,YAAY,MAAMD,2BAA0B,aAAa,IAAI,MAAM,IAAI;AAAA,MACvE,YAAY,2BAAK;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,SAAS,qBAAqB,UAAU,MAAM;AACpD,MAAI,QAAQ;AACV,UAAM,kBACJ,kBAAO,eAAe,eAAe,OAAO,MAA5C,YAAiD,OAAO,eAAe,eAAe,MAAM,MAA5F,YAAiG;AACnG,UAAM,MAAM,iBAAiB,KAAK,IAAI,cAAc,IAAI;AACxD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM,kBAAkB,QAAQ;AAAA,MAChC;AAAA,MACA,YAAY,MAAMA,2BAA0B,aAAa,IAAI,MAAM,IAAI;AAAA,MACvE,YAAY,2BAAK;AAAA,IACnB;AAAA,EACF;AAEA,MAAI,qBAAqB,UAAU,IAAI,GAAG;AACxC,WAAO,EAAE,MAAM,SAAS,MAAM,kBAAkB,QAAQ,EAAE;AAAA,EAC5D;AACA,MAAI,qBAAqB,UAAU,cAAc,GAAG;AAClD,WAAO,EAAE,MAAM,gBAAgB,MAAM,kBAAkB,QAAQ,EAAE;AAAA,EACnE;AACA,SAAO;AACT;AAnCS;AAqCT,SAAS,oBAAoB,YAAsB,MAAiC,aAAgD;AAClI,QAAM,UAAqC,CAAC;AAC5C,QAAM,QAAQ;AAAA,IACZ,CAAC,iBAAiB,SAAS;AAAA,IAC3B,CAAC,iBAAiB,SAAS;AAAA,IAC3B,CAAC,kBAAkB,UAAU;AAAA,EAC/B;AAEA,aAAW,CAAC,WAAW,IAAI,KAAK,OAAO;AACrC,eAAW,YAAY,iBAAiB,YAAY,SAAS,GAAG;AAC9D,YAAM,SAAkC,EAAE,KAAK;AAC/C,MAAAG,cAAa,QAAQ,QAAQ,mBAAmB,UAAU,MAAM,CAAC;AACjE,MAAAA,cAAa,QAAQ,MAAM,mBAAmB,UAAU,IAAI,CAAC;AAC7D,MAAAA,cAAa,QAAQ,UAAU,mBAAmB,UAAU,MAAM,WAAW,CAAC;AAC9E,cAAQ,KAAK,MAAM;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;AAlBS;AAoBT,SAAS,4BAA4B,aAA6B;AAChE,SAAO,GAAGL,SAAQ,WAAW,CAAC,UAAU,YAAY,MAAM,YAAY,YAAY,GAAG,IAAI,CAAC,CAAC;AAC7F;AAFS;AAIT,SAAS,WAAW,UAAwC;AAC1D,QAAM,UAAU,iBAAiB,UAAU,OAAO,EAAE,CAAC;AACrD,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,OAAO,iBAAiB,SAAS,GAAG,EAAE,IAAI,CAAC,OAAOJ,QAAO,EAAE,CAAC,EAAE,KAAK,EAAE;AAC3E,SAAO,QAAQ;AACjB;AALS;AAOT,SAAS,eAAe,KAAc,gBAAoC,aAAqB,MAA+B;AAC5H,QAAM,OAAOD,iBAAgB,KAAK,IAAI;AACtC,QAAM,QAAyB,EAAE,gBAAgB,aAAa,MAAM,aAAa,CAAC,EAAE;AACpF,MAAI,EAAC,6BAAM,QAAQ,QAAO;AAC1B,EAAAU,cAAa,OAAO,SAAS,WAAW,KAAK,MAAM,CAAC;AACpD,QAAM,cAAc,iBAAiB,KAAK,QAAQ,GAAG,EAAE,IAAI,CAAC,OAAOT,QAAO,EAAE,CAAC,EAAE,OAAO,OAAO;AAC7F,SAAO;AACT;AAPS;AAST,SAAS,cAAc,KAAc,WAAmB,UAItD;AApnBF;AAqnBE,QAAM,YAAYG,oBAAmBJ,iBAAgB,KAAK,0BAA0B,SAAS,CAAC,CAAC;AAC/F,QAAM,WAAgC,CAAC;AACvC,QAAM,SAA4B,CAAC;AACnC,QAAM,SAA4B,CAAC;AAEnC,aAAW,aAAa,iBAAiB,UAAU,SAAS,GAAG;AAC7D,UAAM,kBAAiB,eAAU,eAAe,eAAe,IAAI,MAA5C,YAAiD;AACxE,QAAI,CAAC,eAAgB;AACrB,UAAM,WAAW,UAAU,IAAI,cAAc;AAC7C,UAAM,cAAc,WAAWO,2BAA0B,WAAW,SAAS,MAAM,IAAI;AACvF,QAAI,CAAC,aAAa;AAChB,eAAS,KAAK,EAAE,gBAAgB,SAAS,CAAC,EAAE,CAAC;AAC7C;AAAA,IACF;AAEA,UAAM,cAAcP,iBAAgB,KAAK,WAAW;AACpD,UAAM,cAAcI,oBAAmBJ,iBAAgB,KAAK,4BAA4B,WAAW,CAAC,CAAC;AACrG,UAAM,WAAU,2CAAa,UAAS,oBAAoB,YAAY,QAAQ,aAAa,WAAW,IAAI,CAAC;AAC3G,aAAS,KAAK,EAAE,gBAAgB,MAAM,aAAa,QAAQ,CAAC;AAE5D,eAAW,UAAU,SAAS;AAC5B,YAAI,YAAO,WAAP,mBAAe,UAAS,WAAW,OAAO,OAAO,YAAY;AAC/D,eAAO,KAAK,eAAe,KAAK,OAAO,OAAO,gBAAgB,aAAa,OAAO,OAAO,UAAU,CAAC;AAAA,MACtG,aAAW,YAAO,WAAP,mBAAe,UAAS,WAAW,OAAO,OAAO,YAAY;AACtE,eAAO,KAAK;AAAA,UACV,gBAAgB,OAAO,OAAO;AAAA,UAC9B;AAAA,UACA,MAAM,OAAO,OAAO;AAAA,UACpB,YAAY,OAAO,OAAO;AAAA,UAC1B,MAAM,OAAO,OAAO;AAAA,QACtB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,QAAQ,OAAO;AACpC;AAzCS;AA2CT,SAAS,UAAU,aAAkD;AA3pBrE;AA4pBE,QAAM,SAASE,cAAa,aAAa,OAAO,MAAM;AACtD,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,OAAuB,CAAC;AAC9B,EAAAQ,cAAa,MAAM,UAAUF,qBAAoB,OAAO,aAAa,QAAQ,CAAC,CAAC;AAC/E,EAAAE,cAAa,MAAM,UAAUF,qBAAoB,OAAO,aAAa,QAAQ,CAAC,CAAC;AAC/E,EAAAE,cAAa,MAAM,gBAAe,YAAO,aAAa,aAAa,MAAjC,YAAsC,MAAS;AACjF,EAAAA,cAAa,MAAM,eAAc,YAAO,aAAa,YAAY,MAAhC,YAAqC,MAAS;AAC/E,EAAAA,cAAa,MAAM,UAAS,YAAO,aAAa,OAAO,MAA3B,YAAgC,MAAS;AACrE,SAAO,OAAO,KAAK,IAAI,EAAE,SAAS,OAAO;AAC3C;AAVS;AAYT,SAAS,gBAAgB,aAA6C;AACpE,SAAOP,iBAAgB,aAAa,OAAO,WAAW,EAAE,IAAI,CAAC,gBAAgB;AAxqB/E;AAyqBI,UAAM,YAAiC,CAAC;AACxC,IAAAO,cAAa,WAAW,SAAQ,iBAAY,aAAa,MAAM,MAA/B,YAAoC,MAAS;AAC7E,IAAAA,cAAa,WAAW,eAAc,iBAAY,aAAa,YAAY,MAArC,YAA0C,MAAS;AACzF,IAAAA,cAAa,WAAW,gBAAgBF,qBAAoB,YAAY,aAAa,cAAc,CAAC,CAAC;AACrG,IAAAE,cAAa,WAAW,UAAS,iBAAY,aAAa,OAAO,MAAhC,YAAqC,MAAS;AAC/E,WAAO;AAAA,EACT,CAAC;AACH;AATS;AAWT,SAAS,gBAAgB,UAA2C;AAlrBpE;AAmrBE,QAAM,eAAe,SAAS,uBAAuB,OAAO,WAAW;AACvE,QAAM,QAA+B,CAAC;AACtC,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,UAAM,KAAK,aAAa,CAAC;AACzB,QAAI,CAAC,GAAI;AACT,UAAM,OAA4B,EAAE,YAAY,gBAAgB,EAAE,EAAE;AACpE,IAAAA,cAAa,MAAM,kBAAkBF,qBAAoB,GAAG,aAAa,gBAAgB,CAAC,CAAC;AAC3F,IAAAE,cAAa,MAAM,SAAQ,QAAG,aAAa,MAAM,MAAtB,YAA2B,MAAS;AAC/D,IAAAA,cAAa,MAAM,eAAeD,kBAAiB,GAAG,aAAa,aAAa,CAAC,CAAC;AAClF,IAAAC,cAAa,MAAM,iBAAiBD,kBAAiB,GAAG,aAAa,eAAe,CAAC,CAAC;AACtF,IAAAC,cAAa,MAAM,qBAAqBD,kBAAiB,GAAG,aAAa,mBAAmB,CAAC,CAAC;AAC9F,IAAAC,cAAa,MAAM,aAAaF,qBAAoB,GAAG,aAAa,WAAW,CAAC,CAAC;AACjF,IAAAE,cAAa,MAAM,mBAAmBF,qBAAoB,GAAG,aAAa,iBAAiB,CAAC,CAAC;AAC7F,IAAAE,cAAa,MAAM,gBAAe,QAAG,aAAa,aAAa,MAA7B,YAAkC,MAAS;AAC7E,IAAAA,cAAa,MAAM,QAAQ,UAAU,EAAE,CAAC;AACxC,UAAM,KAAK,IAAI;AAAA,EACjB;AACA,SAAO;AACT;AAnBS;AAqBT,SAAS,WAAW,KAAc,KAAuB,eAA0C;AAvsBnG;AAwsBE,MAAI,CAAC,IAAI,MAAM;AACb,WAAO,iCACF,MADE;AAAA,MAEL,YAAY,CAAC;AAAA,MACb,SAAS,CAAC;AAAA,MACV,MAAM,CAAC;AAAA,MACP,cAAc,CAAC;AAAA,MACf,YAAY,CAAC;AAAA,MACb,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,MAClB,oBAAoB,CAAC;AAAA,MACrB,UAAU,CAAC;AAAA,MACX,kBAAkB,CAAC;AAAA,MACnB,UAAU,CAAC;AAAA,MACX,QAAQ,CAAC;AAAA,MACT,QAAQ,CAAC;AAAA,MACT,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AACA,QAAM,OAAOV,iBAAgB,KAAK,IAAI,IAAI;AAC1C,MAAI,EAAC,6BAAM,SAAQ;AACjB,WAAO,iCACF,MADE;AAAA,MAEL,YAAY,CAAC;AAAA,MACb,SAAS,CAAC;AAAA,MACV,MAAM,CAAC;AAAA,MACP,cAAc,CAAC;AAAA,MACf,YAAY,CAAC;AAAA,MACb,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,MAClB,oBAAoB,CAAC;AAAA,MACrB,UAAU,CAAC;AAAA,MACX,kBAAkB,CAAC;AAAA,MACnB,UAAU,CAAC;AAAA,MACX,QAAQ,CAAC;AAAA,MACT,QAAQ,CAAC;AAAA,MACT,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AACA,QAAM,aAAY,gBAAK,OAAO,uBAAuB,OAAO,WAAW,EAAE,CAAC,MAAxD,mBAA2D,aAAa,WAAxE,YAAkF;AACpG,QAAM,UAAU,KAAK,OAAO,uBAAuB,OAAO,GAAG;AAC7D,QAAM,QAA0B,CAAC;AACjC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,SAAS,QAAQ,CAAC,IAAI,UAAU,QAAQ,CAAC,GAAI,aAAa,IAAI;AACpE,QAAI,OAAQ,OAAM,KAAK,MAAM;AAAA,EAC/B;AACA,QAAM,cAAc,cAAc,KAAK,IAAI,MAAM,KAAK,MAAM;AAC5D,SAAO,iCACF,MADE;AAAA,IAEL;AAAA,IACA,YAAY,gBAAgB,KAAK,MAAM;AAAA,IACvC,SAAS,aAAa,KAAK,MAAM;AAAA,IACjC,MAAM,UAAU,KAAK,MAAM;AAAA,IAC3B,cAAc,kBAAkB,KAAK,MAAM;AAAA,IAC3C,YAAY,gBAAgB,KAAK,IAAI,MAAM,KAAK,MAAM;AAAA,IACtD,QAAQ,YAAY,KAAK,IAAI,MAAM,KAAK,MAAM;AAAA,IAC9C,iBAAiB,qBAAqB,KAAK,MAAM;AAAA,IACjD,oBAAoB,wBAAwB,KAAK,MAAM;AAAA,IACvD,UAAU,cAAc,KAAK,IAAI,IAAI;AAAA,IACrC,kBAAkB,sBAAsB,KAAK,IAAI,IAAI;AAAA,IACrD,UAAU,YAAY;AAAA,IACtB,QAAQ,YAAY;AAAA,IACpB,QAAQ,YAAY;AAAA,IACpB;AAAA,EACF;AACF;AAlES;AAoEF,SAAS,kBAAkB,KAAkC;AAClE,QAAM,gBAAgB,mBAAmB,GAAG;AAC5C,QAAM,YAAY,oBAAoB,GAAG;AACzC,SAAO;AAAA,IACL;AAAA,IACA,cAAc,kBAAkB,GAAG;AAAA,IACnC,QAAQ,YAAY,GAAG;AAAA,IACvB,QAAQ,UAAU,IAAI,CAAC,UAAU,WAAW,KAAK,OAAO,aAAa,CAAC;AAAA,EACxE;AACF;AATgB;;;ACjwBhB,SAAS,oBAAAa,yBAAwB;AAgCjC,IAAM,WAAW;AACjB,IAAMC,oBAAmB;AACzB,IAAM,6BAA6B;AACnC,IAAM,wBACJ;AACF,IAAM,yBACJ;AACF,IAAM,sBACJ;AACF,IAAM,QAAQ;AACd,IAAM,oBAAoB;AAC1B,IAAM,qBACJ;AACF,IAAM,wBACJ;AACF,IAAM,oBACJ;AACF,IAAM,6BACJ;AACF,IAAM,qBAAqB;AAC3B,IAAM,iBAAiB;AACvB,IAAM,qBACJ;AACF,IAAM,uBACJ;AACF,IAAM,mBACJ;AACF,IAAM,qBACJ;AACF,IAAM,iBACJ;AACF,IAAMC,cAAa;AACnB,IAAM,OAAO;AACb,IAAM,WAAW;AASV,SAAS,2BAA2B,KAAc,OAAiC;AACxF,iBAAe,KAAK,MAAM,MAAM;AAChC,4BAA0B,KAAK,KAAK;AACpC,mBAAiB,KAAK,KAAK;AAC3B,aAAW,SAAS,MAAM,QAAQ;AAChC,+BAA2B,KAAK,KAAK;AACrC,oCAAgC,KAAK,KAAK;AAC1C,sCAAkC,KAAK,KAAK;AAC5C,8CAA0C,KAAK,KAAK;AACpD,sCAAkC,KAAK,KAAK;AAC5C,sBAAkB,KAAK,KAAK;AAC5B,mBAAe,KAAK,KAAK;AACzB,qBAAiB,KAAK,KAAK;AAC3B,6BAAyB,KAAK,KAAK;AACnC,qBAAiB,KAAK,KAAK;AAC3B,mBAAe,KAAK,KAAK;AAAA,EAC3B;AACF;AAjBgB;AAmBhB,SAAS,0BAA0B,KAAc,OAAiC;AAvGlF;AAwGE,QAAM,WAAW;AACjB,QAAM,OAAOC,oBAAmB,QAAQ,KAAK,QAAQ,CAAC;AACtD,QAAM,kBAAkB,oBAAI,IAAY;AACxC,MAAI,UAAU;AAEd,aAAW,SAAS,MAAM,QAAQ;AAChC,gBAAM,SAAN,kBAAM,OAAS,oBAAoB,KAAK,uBAAuB,MAAM;AACrE,UAAM,SAAS,2BAA2B,mBAAmB,MAAM,IAAI;AACvE,UAAM,KAAK,MAAM,kBAAkB,2BAA2B,MAAM,oBAAoB,MAAM;AAC9F,QAAI,IAAI;AACN,YAAM,iBAAiB;AAAA,IACzB,OAAO;AACL,YAAM,iBAAiB,mBAAmB,IAAI;AAC9C,gBAAU;AAAA,IACZ;AACA,oBAAgB,IAAI,MAAM,cAAc;AACxC,UAAM,UAAwB;AAAA,MAC5B,IAAI,MAAM;AAAA,MACV,MAAM;AAAA,MACN;AAAA,IACF;AACA,UAAM,WAAW,KAAK,IAAI,QAAQ,EAAE;AACpC,QAAI,CAAC,YAAY,CAAC,iBAAiB,UAAU,OAAO,GAAG;AACrD,WAAK,IAAI,QAAQ,IAAI,OAAO;AAC5B,gBAAU;AAAA,IACZ;AACA,QAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG;AAC7B;AAAA,QACE;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA,GAAG,QAAQ,qBAAqB,KAAK,cAAc,aAAa;AAAA,MAClE;AACA;AAAA,QACE;AAAA,QACA,qBAAqB,MAAM,IAAI;AAAA,QAC/B;AAAA,QACA,uBAAuB,oBAAI,IAAI,CAAC;AAAA,MAClC;AACA,gBAAU;AAAA,IACZ;AACA,8BAA0B,KAAK,MAAM,MAAM,sBAAsB;AAAA,EACnE;AAEA,aAAW,OAAO,MAAM,KAAK,KAAK,OAAO,CAAC,GAAG;AAC3C,QAAI,IAAI,SAAS,sBAAsB,gBAAgB,IAAI,IAAI,EAAE,EAAG;AACpE,UAAM,aAAaC,2BAA0B,mBAAmB,IAAI,MAAM;AAC1E,SAAK,OAAO,IAAI,EAAE;AAClB,eAAW,KAAK,UAAU;AAC1B,eAAW,KAAK,qBAAqB,UAAU,CAAC;AAChD,8BAA0B,KAAK,UAAU;AACzC,cAAU;AAAA,EACZ;AAEA,MAAI,QAAS,wBAAuB,KAAK,UAAU,IAAI;AACzD;AAxDS;AA0DT,SAAS,eAAe,KAAc,QAAgC;AACpE,QAAM,aAAa,gBAAgB,MAAM;AACzC,SAAO,gBAAgB,WAAW;AAClC,SAAO,QAAQ,WAAW;AAC1B,SAAO,QAAQ,WAAW;AAC1B,SAAO,UAAU,WAAW;AAC5B,SAAO,cAAc,WAAW;AAChC,QAAM,MAAM,gBAAgB,MAAM;AAClC,QAAM,OAAO,QAAQ,KAAK,eAAe;AACzC,MAAI,6BAAM,QAAQ;AAChB,mBAAe,MAAM,GAAG;AAAA,EAC1B,OAAO;AACL,eAAW,KAAK,iBAAiB,qBAAqB,GAAG;AAAA,EAC3D;AACA,4BAA0B,KAAK,iBAAiB,mBAAmB;AACrE;AAfS;AAiBF,SAAS,+BAA+B,OAAoC;AACjF,QAAM,MAAM,cAAc;AAC1B,QAAM,kBAAkB,6BAA6B,KAAK;AAC1D,sBAAoB,KAAK,eAAe;AACxC,6BAA2B,KAAK,eAAe;AAC/C,SAAO;AACT;AANgB;AAQhB,SAAS,6BAA6B,OAA+C;AACnF,QAAM,QAAQ,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAC9C,aAAW,SAAS,MAAM,QAAQ;AAChC,UAAM,mBAAmB,CAAC;AAC1B,UAAM,kBAAkB,MAAM,OAAO,OAAO,CAAC,UAAU,MAAM,IAAI;AACjE,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,SACpB,IAAI,CAAC,YAAa,iCACd,UADc;AAAA,MAEjB,SAAS,QAAQ,QAAQ;AAAA,QACvB,CAAC,WAAQ;AApMnB;AAqMY,+BAAO,WAAP,mBAAe,UAAS,WACxB,gBAAgB,KAAK,CAAC,UAAO;AAtMzC,gBAAAC,KAAA;AAsM4C,yBAAM,WAASA,MAAA,OAAO,WAAP,gBAAAA,IAAe,eAAc,MAAM,YAAU,YAAO,WAAP,mBAAe;AAAA,WAAI;AAAA;AAAA,MACnH;AAAA,IACF,EAAE,EACD,OAAO,CAAC,YAAY,QAAQ,QAAQ,SAAS,CAAC;AACjD,UAAM,SAAS,CAAC;AAAA,EAClB;AACA,SAAO;AACT;AAnBS;AAqBT,SAAS,oBAAoB,KAAc,OAAiC;AAC1E;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,0BAA0B,KAAK;AAAA,EACjC;AACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,oBAAI,IAAI;AAAA,QACN;AAAA,UACE;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,eAAe,oBAAI,IAA0B;AACnD,QAAM,OAAO,QAAQ,CAAC,OAAO,UAAU;AACrC,UAAM,mBAAN,MAAM,iBAAmB,MAAM,QAAQ,CAAC;AACxC,UAAM,SAAN,MAAM,OAAS,sBAAsB,QAAQ,CAAC;AAC9C,iBAAa,IAAI,MAAM,gBAAgB;AAAA,MACrC,IAAI,MAAM;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,mBAAmB,QAAQ,CAAC;AAAA,IACtC,CAAC;AACD;AAAA,MACE;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,GAAG,QAAQ,qBAAqB,KAAK,cAAc,aAAa;AAAA,IAClE;AACA;AAAA,MACE;AAAA,MACA,qBAAqB,MAAM,IAAI;AAAA,MAC/B;AAAA,MACA,uBAAuB,oBAAI,IAAI,CAAC;AAAA,IAClC;AAAA,EACF,CAAC;AAED;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,QAAQ,oBAAoB,KAAK,cAAc,aAAa;AAAA,EACjE;AACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB,YAAY;AAAA,EACrC;AACF;AA5DS;AA8DT,SAAS,0BAA0B,OAAmC;AACpE,QAAM,YAAqC;AAAA,IACzC,CAAC,oBAAoB,qBAAqB;AAAA,IAC1C,GAAG,MAAM,OAAO,IAAI,CAAC,OAAO,UAAO;AAhRvC;AAgR0C;AAAA,QACpC,KAAI,WAAM,SAAN,YAAc,sBAAsB,QAAQ,CAAC,MAAM;AAAA,QACvD;AAAA,MACF;AAAA,KAAC;AAAA,EACH;AACA,SAAO,GAAG,QAAQ,iBAAiBJ,iBAAgB,4CAA4C,iBAAiB,8DAA8D,UAC3K;AAAA,IACC,CAAC,CAAC,UAAU,WAAW,MACrB,uBAAuBK,SAAQ,QAAQ,CAAC,kBAAkBA,SAAQ,WAAW,CAAC;AAAA,EAClF,EACC,KAAK,EAAE,CAAC;AACb;AAdS;AAgBT,SAAS,WAAW,KAAc,MAAc,aAAqB,KAAmB;AACtF;AAAA,IACE;AAAA,IACA,cAAc;AAAA,MACZ;AAAA,MACA;AAAA,MACA,QAAQC,kBAAiB,GAAG;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;AATS;AAWT,SAAS,gCAAgC,KAAc,OAA8B;AAxSrF;AAySE,MAAI,CAAC,MAAM,KAAM;AACjB,QAAM,WAAW,qBAAqB,MAAM,IAAI;AAChD,QAAM,OAAOJ,oBAAmB,QAAQ,KAAK,QAAQ,CAAC;AACtD,MAAI,CAAC,MAAM,OAAO,UAAU,CAAC,MAAM,KAAK,KAAK,OAAO,CAAC,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS,cAAc;AAC9F;AACF,QAAM,kBAAkB,oBAAI,IAAY;AACxC,MAAI,UAAU;AAEd,aAAW,SAAS,MAAM,QAAQ;AAChC,gBAAM,OAAN,kBAAM,KAAO,YAAY,KAAK;AAC9B,gBAAM,SAAN,kBAAM,OAAS,oBAAoB,KAAK,mBAAmB,MAAM;AACjE,UAAM,SAAS,2BAA2B,MAAM,MAAM,MAAM,IAAI;AAChE,UAAM,KAAK,MAAM,kBAAkB,2BAA2B,MAAM,gBAAgB,MAAM;AAC1F,QAAI,IAAI;AACN,YAAM,iBAAiB;AAAA,IACzB,OAAO;AACL,YAAM,iBAAiB,mBAAmB,IAAI;AAC9C,gBAAU;AAAA,IACZ;AACA,oBAAgB,IAAI,MAAM,cAAc;AACxC,UAAM,UAAwB;AAAA,MAC5B,IAAI,MAAM;AAAA,MACV,MAAM;AAAA,MACN;AAAA,IACF;AACA,UAAM,WAAW,KAAK,IAAI,QAAQ,EAAE;AACpC,QAAI,CAAC,YAAY,CAAC,iBAAiB,UAAU,OAAO,GAAG;AACrD,WAAK,IAAI,QAAQ,IAAI,OAAO;AAC5B,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,aAAW,OAAO,MAAM,KAAK,KAAK,OAAO,CAAC,GAAG;AAC3C,QAAI,IAAI,SAAS,kBAAkB,CAAC,gBAAgB,IAAI,IAAI,EAAE,GAAG;AAC/D,YAAM,aAAaC,2BAA0B,MAAM,MAAM,IAAI,MAAM;AACnE,WAAK,OAAO,IAAI,EAAE;AAClB,iBAAW,KAAK,UAAU;AAC1B,gCAA0B,KAAK,UAAU;AACzC,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,MAAI,QAAS,wBAAuB,KAAK,UAAU,IAAI;AACzD;AA3CS;AA6CT,SAAS,kCAAkC,KAAc,OAA8B;AACrF,MAAI,CAAC,MAAM,KAAM;AACjB,QAAM,WAAW,qBAAqB,MAAM,IAAI;AAChD,QAAM,OAAOD,oBAAmB,QAAQ,KAAK,QAAQ,CAAC;AACtD,QAAM,cAAc,MAAM,KAAK,KAAK,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,iBAAiB;AAC5F,MAAI,MAAM,SAAS,UAAU,CAAC,YAAY,OAAQ;AAElD,aAAW,OAAO,aAAa;AAC7B,UAAM,aAAaC,2BAA0B,MAAM,MAAM,IAAI,MAAM;AACnE,SAAK,OAAO,IAAI,EAAE;AAClB,eAAW,KAAK,UAAU;AAC1B,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AACA,yBAAuB,KAAK,UAAU,IAAI;AAC5C;AAdS;AAgBT,SAAS,0CAA0C,KAAc,OAA8B;AAC7F,MAAI,CAAC,MAAM,KAAM;AACjB,QAAM,WAAW,qBAAqB,MAAM,IAAI;AAChD,QAAM,OAAOD,oBAAmB,QAAQ,KAAK,QAAQ,CAAC;AACtD,QAAM,cAAc,MAAM,KAAK,KAAK,OAAO,CAAC,EAAE;AAAA,IAC5C,CAAC,QAAQ,IAAI,SAAS;AAAA,EACxB;AACA,MAAI,MAAM,iBAAiB,UAAU,CAAC,YAAY,OAAQ;AAE1D,aAAW,OAAO,aAAa;AAC7B,UAAM,aAAaC,2BAA0B,MAAM,MAAM,IAAI,MAAM;AACnE,SAAK,OAAO,IAAI,EAAE;AAClB,eAAW,KAAK,UAAU;AAC1B,8BAA0B,KAAK,UAAU;AAAA,EAC3C;AACA,yBAAuB,KAAK,UAAU,IAAI;AAC5C;AAhBS;AAkBT,SAAS,kCAAkC,KAAc,OAA8B;AAvXvF;AAwXE,MAAI,CAAC,MAAM,KAAM;AACjB,QAAM,eAAe,MAAM,SAAS,KAAK,CAACI,aAAYA,SAAQ,QAAQ,SAAS,CAAC,KAAK,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,IAAI;AAC5H,MAAI,CAAC,aAAc;AACnB,QAAM,WAAU,WAAM,SAAS,CAAC,MAAhB,YAAqB,EAAE,SAAS,CAAC,EAAE;AACnD,MAAI,CAAC,MAAM,SAAS,CAAC,EAAG,OAAM,SAAS,KAAK,OAAO;AAEnD,gBAAQ,SAAR,oBAAQ,OAAS,oBAAoB,KAAK,uBAAuB,MAAM;AACvE,QAAM,gBAAgB,qBAAqB,MAAM,IAAI;AACrD,QAAM,YAAYL,oBAAmB,QAAQ,KAAK,aAAa,CAAC;AAChE,QAAM,gBAAgB,2BAA2B,MAAM,MAAM,QAAQ,IAAI;AACzE,UAAQ,mBAAR,QAAQ,iBAAmB,2BAA2B,WAAW,kBAAkB,aAAa;AAChG,UAAQ,mBAAR,QAAQ,iBAAmB,mBAAmB,SAAS;AACvD,YAAU,IAAI,QAAQ,gBAAgB;AAAA,IACpC,IAAI,QAAQ;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,EACV,CAAC;AACD,yBAAuB,KAAK,eAAe,SAAS;AACpD,4BAA0B,KAAK,QAAQ,MAAM,oBAAoB;AAEjE,QAAM,kBAAkB,qBAAqB,QAAQ,IAAI;AACzD,QAAM,cAAcA,oBAAmB,QAAQ,KAAK,eAAe,CAAC;AACpE,QAAM,eAAe,QAAQ,QAAQ,OAAO,CAAC,WAAQ;AA9YvD,QAAAE;AA8Y0D,aAAAA,MAAA,OAAO,WAAP,gBAAAA,IAAe,UAAS;AAAA,GAAO;AACvF,QAAM,iBAAiB,IAAI,IAAI,MAAM,OAAO,IAAI,CAAC,UAAU,MAAM,IAAI,EAAE,OAAO,CAAC,SAAyB,QAAQ,IAAI,CAAC,CAAC;AACtH,WAAS,IAAI,GAAG,IAAI,MAAM,OAAO,QAAQ,KAAK;AAC5C,UAAM,QAAQ,MAAM,OAAO,CAAC;AAC5B,QAAI,EAAC,+BAAO,MAAM;AAClB,gBAAM,SAAN,kBAAM,OAAS,4BAA4B,KAAK,mBAAmB,QAAQ,cAAc;AACzF,mBAAe,IAAI,MAAM,IAAI;AAC7B,UAAM,cAAc,QAAQ;AAC5B,UAAM,cAAc,2BAA2B,QAAQ,MAAM,MAAM,IAAI;AACvE,UAAM,mBAAN,MAAM,iBAAmB,2BAA2B,aAAa,gBAAgB,WAAW;AAC5F,UAAM,mBAAN,MAAM,iBAAmB,mBAAmB,WAAW;AACvD,gBAAY,IAAI,MAAM,gBAAgB;AAAA,MACpC,IAAI,MAAM;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,IACV,CAAC;AACD,UAAM,UACJ,kBAAa,CAAC,MAAd,YACC;AAAA,MACC,MAAM;AAAA,MACN,OAAM,WAAM,aAAN,mBAAgB;AAAA,MACtB,KAAI,WAAM,aAAN,mBAAgB;AAAA,MACpB,QAAQ,EAAE,MAAM,QAAQ;AAAA,IAC1B;AACF,QAAI,CAAC,aAAa,CAAC,EAAG,SAAQ,QAAQ,KAAK,MAAM;AACjD,iBAAO,WAAP,mBAAO,SAAW,EAAE,MAAM,QAAQ;AAClC,WAAO,OAAO,OAAO;AACrB,WAAO,OAAO,QAAO,YAAO,OAAO,SAAd,YAAsB,MAAM;AACjD,WAAO,OAAO,iBAAiB,MAAM;AACrC,WAAO,OAAO,aAAa,MAAM;AACjC,QAAI,MAAM,UAAU;AAClB,aAAO,OAAO,mBAAK,MAAM,SAAS;AAClC,aAAO,KAAK,mBAAK,MAAM,SAAS;AAAA,IAClC;AAAA,EACF;AACA,yBAAuB,KAAK,iBAAiB,WAAW;AAC1D;AA3DS;AA6DT,SAAS,2BAA2B,KAAc,OAA8B;AApbhF;AAqbE,MAAI,CAAC,MAAM,KAAM;AACjB,QAAM,WAAW,qBAAqB,MAAM,IAAI;AAChD,QAAM,WAAW,QAAQ,KAAK,QAAQ;AACtC,QAAM,OAAOF,oBAAmB,QAAQ;AACxC,QAAM,mBAAmB,oBAAI,IAAY;AACzC,MAAI,UAAU;AAEd,aAAW,aAAa,MAAM,YAAY;AACxC,QAAI,CAAC,UAAU,OAAQ;AACvB,UAAM,KAAK,UAAU,kBAAkB,2BAA2B,MAAM,SAAS;AACjF,QAAI,IAAI;AACN,gBAAU,iBAAiB;AAAA,IAC7B,OAAO;AACL,gBAAU,iBAAiB,mBAAmB,IAAI;AAClD,gBAAU;AAAA,IACZ;AACA,qBAAiB,IAAI,UAAU,cAAc;AAC7C,UAAM,UAAwB;AAAA,MAC5B,IAAI,UAAU;AAAA,MACd,MAAM;AAAA,MACN,QAAQ,UAAU;AAAA,MAClB,aAAY,eAAU,eAAV,YAAwB;AAAA,IACtC;AACA,UAAM,WAAW,KAAK,IAAI,QAAQ,EAAE;AACpC,QAAI,CAAC,YAAY,CAAC,iBAAiB,UAAU,OAAO,GAAG;AACrD,WAAK,IAAI,QAAQ,IAAI,OAAO;AAC5B,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,aAAW,OAAO,MAAM,KAAK,KAAK,OAAO,CAAC,GAAG;AAC3C,QAAI,IAAI,SAAS,sBAAsB,CAAC,iBAAiB,IAAI,IAAI,EAAE,GAAG;AACpE,WAAK,OAAO,IAAI,EAAE;AAClB,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,MAAI,CAAC,WAAW,SAAU;AAC1B,MAAI,CAAC,YAAY,CAAC,KAAK,KAAM;AAC7B,yBAAuB,KAAK,UAAU,IAAI;AAC5C;AAxCS;AA0CT,SAAS,uBACP,KACA,UACA,MACM;AACN,QAAM,WAAW,QAAQ,KAAK,QAAQ;AACtC,QAAM,MAAM,uBAAuB,IAAI;AACvC,MAAI,UAAU;AACZ,mBAAe,UAAU,GAAG;AAAA,EAC9B,OAAO;AACL;AAAA,MACE;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,QAAQI,kBAAiB,GAAG;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAnBS;AAqBT,SAAS,iBAAiB,KAAc,OAAiC;AACvE,QAAM,OAAO,QAAQ,KAAK,iBAAiB;AAC3C,MAAI,EAAC,6BAAM,QAAQ;AACnB,QAAM,YAAY,MAAM,OACrB,IAAI,CAAC,UAAU;AACd,UAAM,QAAQ;AAAA,MACZ,SAASD,SAAQ,MAAM,IAAI,CAAC;AAAA,MAC5B,YAAYA,SAAQ,MAAM,EAAE,CAAC;AAAA,MAC7B,MAAM,aAAa,UAAUA,SAAQ,MAAM,UAAU,CAAC,MAAM;AAAA,MAC5D,MAAM,iBAAiB,SAASA,SAAQ,MAAM,cAAc,CAAC,MAAM;AAAA,IACrE,EAAE,OAAO,OAAO;AAChB,WAAO,UAAU,MAAM,KAAK,GAAG,CAAC;AAAA,EAClC,CAAC,EACA,KAAK,EAAE;AACV,QAAM,kBAAkB,MAAM,aAAa,SACvC,iBAAiB,MAAM,aACpB,IAAI,CAAC,SAAS;AACb,UAAM,QAAQ;AAAA,MACZ,SAASA,SAAQ,KAAK,IAAI,CAAC;AAAA,MAC3B,KAAK,iBAAiB,SAAY,KAAK,iBAAiB,KAAK,YAAY;AAAA,IAC3E,EAAE,OAAO,OAAO;AAChB,WAAO,gBAAgB,MAAM,KAAK,GAAG,CAAC,IAAI,QAAQ,KAAK,IAAI,CAAC;AAAA,EAC9D,CAAC,EACA,KAAK,EAAE,CAAC,oBACX;AACJ;AAAA,IACE;AAAA,IACA,GAAG,QAAQ,oBAAoB,KAAK,cAAc,aAAa,aAAa,SAAS,YAAY,eAAe;AAAA,EAClH;AACF;AA7BS;AA+BT,SAAS,kBAAkB,KAAc,OAA8B;AACrE,MAAI,CAAC,MAAM,KAAM;AACjB,QAAM,OAAO,QAAQ,KAAK,MAAM,IAAI;AACpC,MAAI,EAAC,6BAAM,QAAQ;AACnB,iBAAe,MAAM,mBAAmB,KAAK,CAAC;AAChD;AALS;AAOT,SAAS,mBAAmB,OAAgC;AAC1D,SAAO,GAAG,QAAQ,qBAAqB,KAAK,cAAc,aAAa,KAAK;AAAA,IAC1E,MAAM,YAAY,mBAAmBA,SAAQ,MAAM,SAAS,CAAC,QAAQ;AAAA,IACrE,oBAAoB,MAAM,UAAU;AAAA,IACpC,iBAAiB,MAAM,OAAO;AAAA,IAC9B,mBAAmB,KAAK;AAAA,IACxB,sBAAsB,KAAK;AAAA,IAC3B,4BAA4B,MAAM,kBAAkB;AAAA,IACpD,oBAAoB,MAAM,UAAU;AAAA,IACpC,yBAAyB,MAAM,eAAe;AAAA,IAC9C,oBAAoB,MAAM,MAAM;AAAA,IAChC,oBAAoB,MAAM,QAAQ;AAAA,EACpC,EACG,OAAO,OAAO,EACd,KAAK,EAAE,CAAC;AACb;AAfS;AAiBT,SAAS,gBAAgB,QAAkC;AACzD,QAAM,sBAAsB,OAAO,cAAc,OAAO,CAAC,WAAW,OAAO,MAAM,GAAG;AACpF,SAAO,GAAG,QAAQ,sBAAsB,KAAK,KAAK;AAAA,IAChD,oBAAoB,SAChB,mBAAmB,oBAAoB,MAAM,KAAK,oBAC/C,IAAI,CAAC,WAAW,qBAAqB,OAAO,EAAE,iBAAiBA,SAAQ,OAAO,IAAI,CAAC,KAAK,EACxF,KAAK,EAAE,CAAC,eACX;AAAA,IACJ,iBAAiB,OAAO,MAAM,MAAM,KAAK,OAAO,MAAM,IAAI,aAAa,EAAE,KAAK,EAAE,CAAC;AAAA,IACjF,iBAAiB,OAAO,MAAM,MAAM,KAAK,OAAO,MAAM,IAAI,aAAa,EAAE,KAAK,EAAE,CAAC;AAAA,IACjF,mBAAmB,OAAO,QAAQ,MAAM,KAAK,OAAO,QAAQ,IAAI,eAAe,EAAE,KAAK,EAAE,CAAC;AAAA,IACzF;AAAA,IACA,mBAAmB,OAAO,YAAY,MAAM,KAAK,OAAO,YAAY,IAAI,mBAAmB,EAAE,KAAK,EAAE,CAAC;AAAA,IACrG;AAAA,EACF,EACG,OAAO,OAAO,EACd,KAAK,EAAE,CAAC;AACb;AAjBS;AAmBT,SAAS,cAAc,MAA8B;AACnD,SAAO,SAAS;AAAA,IACd,KAAK,SAAS,SAAY,KAAK,YAAY,KAAK,IAAI;AAAA,IACpD,KAAK,QAAQ,eAAe,SAAS,KAAK,KAAK,IAAI;AAAA,IACnD,KAAK,SAAS,SAAY,KAAK,cAAcA,SAAQ,KAAK,IAAI,CAAC;AAAA,IAC/D,KAAK,WAAW,SAAY,KAAK,gBAAgB,KAAK,MAAM;AAAA,IAC5D,KAAK,YAAY,SAAY,KAAK,iBAAiB,KAAK,OAAO;AAAA,IAC/D,KAAK,WAAW,SAAY,KAAK,gBAAgBA,SAAQ,KAAK,MAAM,CAAC;AAAA,IACrE,KAAK,OAAO,SAAS;AAAA,IACrB,KAAK,SAAS,SAAS;AAAA,IACvB,KAAK,YAAY,SAAS;AAAA,EAC5B,EACG,OAAO,OAAO,EACd,KAAK,EAAE,CAAC;AACb;AAdS;AAgBT,SAAS,cAAc,MAA8B;AACnD,SAAO,sBAAsB,WAAW,eAAe,KAAK,WAAW,CAAC,IAAI;AAAA,IAC1E,KAAK,kBAAkB,eAAe,WAAW,KAAK,eAAe,IAAI;AAAA,IACzE,KAAK,kBAAkB,eAAe,WAAW,KAAK,eAAe,IAAI;AAAA,EAC3E,EACG,OAAO,OAAO,EACd,KAAK,EAAE,CAAC;AACb;AAPS;AAST,SAAS,gBAAgB,QAAkC;AACzD,SAAO,WAAW,CAAC,QAAQ,SAAS,OAAO,UAAU,UAAU,EAC5D;AAAA,IAAI,CAAC,SACJ;AAAA,MACE;AAAA,MACA,OAAO,IAA8B;AAAA,IACvC;AAAA,EACF,EACC,KAAK,EAAE,CAAC;AACb;AATS;AAWT,SAAS,oBAAoB,MAAc,MAAgD;AACzF,MAAI,CAAC,KAAM,QAAO,IAAI,IAAI;AAC1B,SAAO,IAAI,IAAI,IAAI,WAAW,SAAS,KAAK,KAAK,CAAC,IAAI,KAAK,QAAQ,eAAe,SAAS,KAAK,KAAK,IAAI,EAAE,KAAK,IAAI;AACtH;AAHS;AAKT,SAAS,oBAAoB,QAAyD;AAtmBtF;AAumBE,QAAM,QAAQ;AAAA,IACZ,WAAW,aAAY,YAAO,mBAAP,YAAyB,CAAC;AAAA,IACjD,WAAW,WAAU,YAAO,WAAP,YAAiB,CAAC;AAAA,IACvC,WAAW,WAAU,YAAO,WAAP,YAAiB,CAAC;AAAA,IACvC,WAAW,aAAY,YAAO,aAAP,YAAmB,CAAC;AAAA,IAC3C,WAAW,SAAQ,YAAO,SAAP,YAAe,CAAC;AAAA,IACnC,YAAY,qBAAqB,OAAO,iBAAiB;AAAA,IACzD,YAAY,aAAa,OAAO,SAAS;AAAA,IACzC,YAAY,aAAa,OAAO,SAAS;AAAA,IACzC,YAAY,eAAe,OAAO,WAAW;AAAA,IAC7C,YAAY,kBAAkB,OAAO,cAAc;AAAA,EACrD,EAAE,OAAO,OAAO;AAChB,QAAM,YAAY,OAAO,YAAY,mBAAmB,OAAO,SAAS,IAAI;AAC5E,SAAO,YAAY,OAAO,MAAM,KAAK,GAAG,CAAC,IAAI,SAAS,UAAU,OAAO,MAAM,KAAK,GAAG,CAAC;AACxF;AAfS;AAiBT,SAAS,mBAAmB,WAAwC;AAClE,QAAM,QAAQ;AAAA,IACZ,WAAW,cAAc,UAAU,UAAU;AAAA,IAC7C,WAAW,YAAY,UAAU,QAAQ;AAAA,IACzC,WAAW,gBAAgB,UAAU,YAAY;AAAA,IACjD,YAAY,YAAY,UAAU,QAAQ;AAAA,IAC1C,YAAY,eAAe,UAAU,WAAW;AAAA,IAChD,WAAW,UAAU,UAAU,MAAM;AAAA,EACvC,EAAE,OAAO,OAAO;AAChB,SAAO,cAAc,MAAM,KAAK,GAAG,CAAC;AACtC;AAVS;AAYT,SAAS,eAAe,MAAc,OAAgC;AACpE,SAAO,IAAI,IAAI,SAAS,sBAAsB,OAAO,SAAS,IAAI,EAAE,CAAC;AACvE;AAFS;AAIT,SAAS,gBAAgB,QAA4C;AACnE,SAAO;AAAA,IACL,eAAe,OAAO;AAAA,IACtB,OAAO,OAAO,MAAM,SAAS,OAAO,QAAQ,CAAC,CAAC,CAAC;AAAA,IAC/C,OAAO,OAAO,MAAM,SAAS,OAAO,QAAQ,CAAC,CAAC,GAAG,EAAE,aAAa,UAAU,CAAC;AAAA,IAC3E,SAAS,OAAO,QAAQ,SAAS,OAAO,UAAU,CAAC,CAAC,CAAC;AAAA,IACrD,aAAa,OAAO,YAAY,SAAS,OAAO,cAAc,CAAC,CAAC,CAAC;AAAA,EACnE;AACF;AARS;AAUT,SAAS,oBAAoB,OAAsC;AACjE,MAAI,CAAC,MAAM,OAAQ,QAAO;AAC1B,SAAO,eAAe,MACnB,IAAI,CAAC,SAAS;AACb,UAAM,QAAQ;AAAA,MACZ,WAAW,kBAAkB,KAAK,cAAc;AAAA,MAChD,WAAW,QAAQ,KAAK,IAAI;AAAA,MAC5B,YAAY,eAAe,KAAK,WAAW;AAAA,MAC3C,YAAY,iBAAiB,KAAK,aAAa;AAAA,MAC/C,YAAY,qBAAqB,KAAK,iBAAiB;AAAA,MACvD,WAAW,aAAa,KAAK,SAAS;AAAA,MACtC,WAAW,mBAAmB,KAAK,eAAe;AAAA,MAClD,WAAW,eAAe,KAAK,WAAW;AAAA,IAC5C,EAAE,OAAO,OAAO;AAChB,UAAM,OAAO,KAAK,OACd,SAAS;AAAA,MACP,WAAW,UAAU,KAAK,KAAK,MAAM;AAAA,MACrC,WAAW,UAAU,KAAK,KAAK,MAAM;AAAA,MACrC,WAAW,eAAe,KAAK,KAAK,WAAW;AAAA,MAC/C,WAAW,cAAc,KAAK,KAAK,UAAU;AAAA,MAC7C,WAAW,SAAS,KAAK,KAAK,KAAK;AAAA,IACrC,EACG,OAAO,OAAO,EACd,KAAK,GAAG,CAAC,OACZ;AACJ,UAAM,aAAa,KAAK,WACrB;AAAA,MACC,CAAC,cACC,cAAc;AAAA,QACZ,WAAW,QAAQ,UAAU,IAAI;AAAA,QACjC,WAAW,cAAc,UAAU,UAAU;AAAA,QAC7C,WAAW,gBAAgB,UAAU,YAAY;AAAA,QACjD,WAAW,SAAS,UAAU,KAAK;AAAA,MACrC,EACG,OAAO,OAAO,EACd,KAAK,GAAG,CAAC;AAAA,IAChB,EACC,KAAK,EAAE;AACV,WAAO,cAAc,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,UAAU;AAAA,EAC3D,CAAC,EACA,KAAK,EAAE,CAAC;AACb;AAzCS;AA2CT,SAAS,iBAAiB,SAAqC;AAC7D,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,SAAO,SAAS,QACb;AAAA,IACC,CAAC,WACC,QAAQ;AAAA,MACN,WAAW,OAAO,OAAO,GAAG;AAAA,MAC5B,WAAW,OAAO,OAAO,GAAG;AAAA,MAC5B,WAAW,SAAS,OAAO,KAAK;AAAA,MAChC,YAAY,UAAU,OAAO,MAAM;AAAA,MACnC,WAAW,SAAS,OAAO,OAAO;AAAA,MAClC,YAAY,eAAe,OAAO,WAAW;AAAA,IAC/C,EACG,OAAO,OAAO,EACd,KAAK,GAAG,CAAC;AAAA,EAChB,EACC,KAAK,EAAE,CAAC;AACb;AAjBS;AAmBT,SAAS,mBAAmB,OAAgC;AA/sB5D;AAgtBE,QAAM,SAAS,oBAAI,IAA8D;AACjF,aAAW,OAAO,MAAM,MAAM;AAC5B,WAAO,IAAI,IAAI,OAAO,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;AAAA,EAC1C;AACA,aAAW,QAAQ,MAAM,OAAO;AAC9B,UAAM,SAAQ,YAAO,IAAI,KAAK,GAAG,MAAnB,YAAwB,EAAE,OAAO,CAAC,EAAE;AAClD,UAAM,MAAM,KAAK,IAAI;AACrB,WAAO,IAAI,KAAK,KAAK,KAAK;AAAA,EAC5B;AACA,QAAM,OAAO,MAAM,KAAK,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC;AAClE,SAAO,cAAc,KAClB,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM;AACvB,UAAM,MAAM,MAAM;AAClB,UAAM,QAAQ;AAAA,MACZ,WAAW,KAAK,KAAK;AAAA,MACrB,WAAW,MAAM,2BAAK,MAAM;AAAA,MAC5B,YAAY,UAAU,2BAAK,MAAM;AAAA,MACjC,WAAW,KAAK,2BAAK,OAAO;AAAA,MAC5B,YAAY,gBAAgB,2BAAK,YAAY;AAAA,IAC/C,EAAE,OAAO,OAAO;AAChB,UAAM,QAAQ,MAAM,MACjB,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAClC,IAAI,CAAC,SAAS,cAAc,IAAI,CAAC,EACjC,KAAK,EAAE;AACV,WAAO,QAAQ,QAAQ,MAAM,KAAK,GAAG,CAAC,IAAI,KAAK,WAAW,QAAQ,MAAM,KAAK,GAAG,CAAC;AAAA,EACnF,CAAC,EACA,KAAK,EAAE,CAAC;AACb;AA5BS;AA8BT,SAAS,cAAc,MAA8B;AA7uBrD;AA8uBE,QAAM,QAAQ,CAAC,WAAW,KAAK,KAAK,OAAO,GAAG,WAAW,KAAK,KAAK,OAAO,CAAC,EAAE,OAAO,OAAO;AAC3F,QAAM,UAAU,KAAK,UAAU,MAAM,QAAQ,KAAK,OAAO,CAAC,SAAS;AACnE,MAAI,KAAK,SAAS,UAAU;AAC1B,UAAM,KAAK,eAAe;AAC1B,WAAO,MAAM,MAAM,KAAK,GAAG,CAAC,WAAW,QAAQ,QAAO,UAAK,UAAL,YAAc,EAAE,CAAC,CAAC;AAAA,EAC1E;AACA,MAAI,KAAK,SAAS,WAAW;AAC3B,UAAM,KAAK,OAAO;AAClB,WAAO,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,MAAM,GAAG;AAAA,EACrE;AACA,MAAI,KAAK,SAAS,SAAS;AACzB,UAAM,KAAK,OAAO;AAClB,WAAO,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,OAAO,MAAM,QAAQ,QAAO,gBAAK,UAAL,YAAc,KAAK,aAAnB,YAA+B,EAAE,CAAC,CAAC;AAAA,EACjG;AACA,MAAI,KAAK,SAAS,WAAW,CAAC,SAAS;AACrC,WAAO,MAAM,MAAM,KAAK,GAAG,CAAC;AAAA,EAC9B;AACA,QAAM,QAAQ,KAAK,UAAU,QAAQ,KAAK,UAAU,SAAY,KAAK,OAAO,KAAK,KAAK;AACtF,SAAO,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,OAAO,GAAG,QAAQ,MAAM,QAAQ,KAAK,CAAC,SAAS,EAAE;AACnF;AApBS;AAsBT,SAAS,sBAAsB,OAAgC;AAC7D,MAAI,CAAC,MAAM,aAAa,OAAQ,QAAO;AACvC,SAAO,sBAAsB,MAAM,aAAa,MAAM,KAAK,MAAM,aAC9D,IAAI,CAAC,UAAU,mBAAmBA,SAAQ,MAAM,OAAO,CAAC,KAAK,EAC7D,KAAK,EAAE,CAAC;AACb;AALS;AAOT,SAAS,4BAA4B,SAAgD;AACnF,SAAO,QACJ;AAAA,IACC,CAAC,WACC,0BAA0B,WAAW,SAAS,OAAO,KAAK,CAAC,IAAI,OAAO,MACnE;AAAA,MACC,CAAC,SACC,WAAW;AAAA,QACT,WAAW,QAAQ,KAAK,IAAI;AAAA,QAC5B,WAAW,YAAY,KAAK,QAAQ;AAAA,QACpC,WAAW,YAAY,KAAK,QAAQ;AAAA,QACpC,WAAW,SAAS,KAAK,KAAK;AAAA,QAC9B,YAAY,cAAc,KAAK,UAAU;AAAA,QACzC,YAAY,gBAAgB,KAAK,YAAY;AAAA,QAC7C,YAAY,WAAW,KAAK,OAAO;AAAA,QACnC,YAAY,UAAU,KAAK,MAAM;AAAA,QACjC,WAAW,QAAQ,KAAK,IAAI;AAAA,QAC5B,WAAW,QAAQ,KAAK,IAAI;AAAA,QAC5B,WAAW,cAAc,KAAK,UAAU;AAAA,MAC1C,EACG,OAAO,OAAO,EACd;AAAA,QACC;AAAA,MACF,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,YAAY,QAAQ,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;AAAA,IAC5F,EACC,KAAK,EAAE,CAAC;AAAA,EACf,EACC,KAAK,EAAE;AACZ;AA5BS;AA8BT,SAAS,oBAAoB,YAA2C;AACtE,MAAI,CAAC,WAAW,OAAQ,QAAO;AAC/B,SAAO,eAAe,WACnB;AAAA,IACC,CAAC,cACC,cAAc;AAAA,MACZ,WAAW,OAAO,UAAU,GAAG;AAAA,MAC/B,UAAU,iBAAiB,SAASA,SAAQ,UAAU,cAAc,CAAC,MAAM;AAAA,MAC3E,WAAW,YAAY,UAAU,QAAQ;AAAA,MACzC,WAAW,WAAW,UAAU,OAAO;AAAA,MACvC,WAAW,WAAW,UAAU,OAAO;AAAA,IACzC,EACG,OAAO,OAAO,EACd,KAAK,GAAG,CAAC;AAAA,EAChB,EACC,KAAK,EAAE,CAAC;AACb;AAhBS;AAkBT,SAAS,yBAAyB,aAAiD;AACjF,MAAI,CAAC,YAAY,OAAQ,QAAO;AAChC,SAAO,2BAA2B,YAAY,MAAM,KAAK,YACtD,IAAI,CAAC,eAAe;AACnB,UAAM,QAAQ;AAAA,MACZ,WAAW,QAAQ,WAAW,IAAI;AAAA,MAClC,WAAW,YAAY,WAAW,QAAQ;AAAA,MAC1C,YAAY,cAAc,WAAW,UAAU;AAAA,MAC/C,YAAY,gBAAgB,WAAW,YAAY;AAAA,MACnD,YAAY,oBAAoB,WAAW,gBAAgB;AAAA,MAC3D,YAAY,oBAAoB,WAAW,gBAAgB;AAAA,MAC3D,WAAW,cAAc,WAAW,UAAU;AAAA,MAC9C,WAAW,SAAS,WAAW,KAAK;AAAA,MACpC,WAAW,cAAc,WAAW,UAAU;AAAA,MAC9C,WAAW,SAAS,WAAW,KAAK;AAAA,MACpC,WAAW,eAAe,WAAW,WAAW;AAAA,MAChD,WAAW,UAAU,WAAW,MAAM;AAAA,IACxC,EAAE,OAAO,OAAO;AAChB,WAAO,mBAAmB,MAAM,KAAK,GAAG,CAAC,IAAI,WAAW,WAAW,aAAa,QAAQ,WAAW,QAAQ,CAAC,gBAAgB,EAAE,GAC5H,WAAW,WAAW,aAAa,QAAQ,WAAW,QAAQ,CAAC,gBAAgB,EACjF;AAAA,EACF,CAAC,EACA,KAAK,EAAE,CAAC;AACb;AAvBS;AAyBT,SAAS,oBAAoB,QAAmC;AAC9D,QAAM,WAAW,OACd,IAAI,CAAC,UAAU,MAAM,cAAc,EACnC,OAAO,CAAC,OAAqB,QAAQ,EAAE,CAAC;AAC3C,MAAI,CAAC,SAAS,OAAQ,QAAO;AAC7B,SAAO,sBAAsB,SAAS,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,oBAAoBA,SAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;AACtH;AANS;AAQT,SAAS,oBAAoB,UAAuC;AAClE,QAAM,UAAU,SAAS,KAAK,CAAC,SAAS,KAAK,cAAc;AAC3D,UAAO,mCAAS,kBAAiB,kBAAkBA,SAAQ,QAAQ,cAAc,CAAC,QAAQ;AAC5F;AAHS;AAKT,SAAS,eAAe,KAAc,OAA8B;AAClE,aAAW,SAAS,MAAM,QAAQ;AAChC,QAAI,CAAC,MAAM,KAAM;AACjB,UAAM,OAAO,QAAQ,KAAK,MAAM,IAAI;AACpC,UAAM,MAAM,eAAe,KAAK;AAChC,QAAI,6BAAM,QAAQ;AAChB,qBAAe,MAAM,GAAG;AAAA,IAC1B,OAAO;AACL;AAAA,QACE;AAAA,QACA,cAAc;AAAA,UACZ,MAAM,MAAM;AAAA,UACZ,aAAa;AAAA,UACb,QAAQC,kBAAiB,GAAG;AAAA,QAC9B,CAAC;AAAA,MACH;AAAA,IACF;AACA,8BAA0B,KAAK,MAAM,MAAM,kBAAkB;AAAA,EAC/D;AACF;AAnBS;AAqBT,SAAS,eAAe,OAAgC;AACtD,QAAM,QAAQ;AAAA,IACZ,WAAW,MAAM,MAAM,EAAE;AAAA,IACzB,WAAW,QAAQ,MAAM,IAAI;AAAA,IAC7B,WAAW,eAAe,MAAM,WAAW;AAAA,IAC3C,WAAW,OAAO,MAAM,GAAG;AAAA,IAC3B,WAAW,kBAAkB,MAAM,cAAc;AAAA,IACjD,WAAW,kBAAkB,MAAM,cAAc;AAAA,IACjD,YAAY,kBAAkB,MAAM,cAAc;AAAA,EACpD,EAAE,OAAO,OAAO;AAChB,QAAM,aAAa,yBAAyB,KAAK;AACjD,QAAM,UAAU,wBAAwB,MAAM,QAAQ,MAAM,KAAK,MAAM,QACpE;AAAA,IACC,CAAC,WACC,gBAAgB;AAAA,MACd,WAAW,MAAM,OAAO,EAAE;AAAA,MAC1B,WAAW,QAAQ,OAAO,IAAI;AAAA,MAC9B,WAAW,kBAAkB,OAAO,cAAc;AAAA,MAClD,WAAW,qBAAqB,OAAO,iBAAiB;AAAA,IAC1D,EACG,OAAO,OAAO,EACd,KAAK,GAAG,CAAC;AAAA,EAChB,EACC,KAAK,EAAE,CAAC;AACX,QAAM,QAAQ,MAAM,QAChB,mBAAmB;AAAA,IACjB,WAAW,QAAQ,MAAM,MAAM,IAAI;AAAA,IACnC,YAAY,mBAAmB,MAAM,MAAM,eAAe;AAAA,IAC1D,YAAY,kBAAkB,MAAM,MAAM,cAAc;AAAA,IACxD,YAAY,kBAAkB,MAAM,MAAM,cAAc;AAAA,IACxD,YAAY,qBAAqB,MAAM,MAAM,iBAAiB;AAAA,EAChE,EACG,OAAO,OAAO,EACd,KAAK,GAAG,CAAC,OACZ;AACJ,SAAO,GAAG,QAAQ,iBAAiB,KAAK,KAAK,MAAM,KAAK,GAAG,CAAC,IAAI,UAAU,GAAG,OAAO,GAAG,KAAK;AAC9F;AApCS;AAsCT,SAAS,yBAAyB,OAAgC;AA35BlE;AA45BE,QAAM,cACJ,WAAM,eAAN,YACC,MAAM,gBAAgB,EAAE,KAAK,MAAM,eAAe,eAAe,CAAC,EAAE,IAAI;AAC3E,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,QAAQ,CAAC,WAAW,QAAO,gBAAW,QAAX,YAAkB,MAAM,aAAa,CAAC,EAAE,OAAO,OAAO;AACvF,SAAO,eAAe,MAAM,KAAK,GAAG,CAAC,IAAI;AAAA,IACvC,GAAG,WAAW,cAAc,IAAI,0BAA0B;AAAA,IAC1D,WAAW,YAAY,wBAAwB,WAAW,SAAS,IAAI;AAAA,EACzE,EACG,OAAO,OAAO,EACd,KAAK,EAAE,CAAC;AACb;AAZS;AAcT,SAAS,2BAA2B,QAA6C;AAz6BjF;AA06BE,QAAM,QAAQ;AAAA,IACZ,WAAW,SAAS,OAAO,KAAK;AAAA,IAChC,YAAY,gBAAgB,OAAO,YAAY;AAAA,IAC/C,YAAY,cAAc,OAAO,UAAU;AAAA,EAC7C,EAAE,OAAO,OAAO;AAChB,QAAM,YAAU,YAAO,YAAP,mBAAgB,UAC5B,YAAY,OAAO,QAAQ,IAAI,CAAC,WAAW,gBAAgBD,SAAQ,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,eACzF;AACJ,SAAO,iBAAiB,MAAM,KAAK,GAAG,CAAC,IAAI,OAAO;AACpD;AAVS;AAYT,SAAS,wBAAwB,WAA6C;AAC5E,QAAM,QAAQ;AAAA,IACZ,WAAW,OAAO,UAAU,GAAG;AAAA,IAC/B,YAAY,iBAAiB,UAAU,aAAa;AAAA,IACpD,WAAW,cAAc,UAAU,UAAU;AAAA,EAC/C,EAAE,OAAO,OAAO;AAChB,SAAO,cAAc,MAAM,KAAK,GAAG,CAAC,IAAI,UAAU,WAAW,IAAI,2BAA2B,EAAE,KAAK,EAAE,CAAC;AACxG;AAPS;AAST,SAAS,4BAA4B,WAAiD;AACpF,QAAM,QAAQ;AAAA,IACZ,WAAW,OAAO,UAAU,GAAG;AAAA,IAC/B,YAAY,cAAc,UAAU,UAAU;AAAA,IAC9C,WAAW,UAAU,UAAU,MAAM;AAAA,EACvC,EAAE,OAAO,OAAO;AAChB,SAAO,kBAAkB,MAAM,KAAK,GAAG,CAAC;AAC1C;AAPS;AAST,SAAS,iBAAiB,KAAc,OAA8B;AACpE,MAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,SAAS,OAAQ;AAC3C,QAAM,SAAS,wBAAwB,KAAK,MAAM,IAAI;AACtD,QAAM,MAAM,kBAAkB,MAAM,QAAQ;AAC5C,QAAM,OAAO,QAAQ,KAAK,OAAO,IAAI;AACrC,MAAI,6BAAM,QAAQ;AAChB,mBAAe,MAAM,GAAG;AAAA,EAC1B,OAAO;AACL;AAAA,MACE;AAAA,MACA,cAAc;AAAA,QACZ,MAAM,OAAO;AAAA,QACb,aAAa;AAAA,QACb,QAAQC,kBAAiB,GAAG;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,EACF;AACA,4BAA0B,KAAK,OAAO,MAAM,qBAAqB;AACnE;AAlBS;AAoBT,SAAS,wBAAwB,KAAc,WAAiD;AAC9F,QAAM,WAAWE,2BAA0B,KAAK,WAAW,WAAW,EAAE,CAAC;AACzE,MAAI,SAAU,QAAO;AACrB,QAAM,WAAW,qBAAqB,SAAS;AAC/C,QAAM,OAAON,oBAAmB,QAAQ,KAAK,QAAQ,CAAC;AACtD,QAAM,KAAK,mBAAmB,IAAI;AAClC,QAAM,OAAO,oBAAoB,KAAK,eAAe,MAAM;AAC3D,OAAK,IAAI,IAAI;AAAA,IACX;AAAA,IACA,MAAM;AAAA,IACN,QAAQ,2BAA2B,WAAW,IAAI;AAAA,EACpD,CAAC;AACD,yBAAuB,KAAK,UAAU,IAAI;AAC1C,SAAO,EAAE,IAAI,KAAK;AACpB;AAdS;AAgBT,SAAS,kBAAkB,UAAuC;AAChE,QAAM,UAAU,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,CAAC,YAAS;AA5+B5D;AA4+B+D,yBAAQ,WAAR,YAAkB;AAAA,GAAE,CAAC,CAAC;AACnF,SAAO,GAAG,QAAQ,oBAAoB,KAAK,cAAc,QACtD,IAAI,CAAC,WAAW,WAAW,QAAQ,MAAM,CAAC,WAAW,EACrD,KAAK,EAAE,CAAC,0BAA0B,SAClC,IAAI,CAAC,YAAY;AAh/BtB;AAi/BM,UAAM,YAAW,aAAQ,aAAR,YAAoB,KAAK,IAAI,GAAG,QAAQ,SAAQ,aAAQ,WAAR,YAAkB,EAAE,CAAC;AACtF,WAAO,YAAY;AAAA,MACjB,WAAW,OAAO,QAAQ,GAAG;AAAA,MAC7B,WAAW,YAAY,QAAQ;AAAA,MAC/B,WAAW,WAAW,QAAQ,OAAO;AAAA,IACvC,EACG,OAAO,OAAO,EACd,KAAK,GAAG,CAAC,aAAa,QAAQ,QAAQ,IAAI,CAAC;AAAA,EAChD,CAAC,EACA,KAAK,EAAE,CAAC;AACb;AAhBS;AAkBT,SAAS,yBAAyB,KAAc,OAA8B;AAC5E,MAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,iBAAiB,OAAQ;AACnD,QAAM,SAASM,2BAA0B,KAAK,MAAM,MAAM,kBAAkB,EAAE,CAAC;AAC/E,MAAI,CAAC,OAAQ;AACb,QAAM,OAAO,QAAQ,KAAK,OAAO,IAAI;AACrC,MAAI,EAAC,6BAAM,QAAQ;AACnB,iBAAe,MAAM,0BAA0B,MAAM,gBAAgB,CAAC;AACxE;AAPS;AAST,SAAS,0BAA0B,UAA+C;AAChF,SAAO,GAAG,QAAQ,4BAA4B,KAAK,KAAK,SACrD;AAAA,IACC,CAAC,YACC,oBAAoB;AAAA,MAClB,WAAW,OAAO,QAAQ,GAAG;AAAA,MAC7B,WAAW,MAAM,QAAQ,QAAQ;AAAA,MACjC,WAAW,YAAY,QAAQ,QAAQ;AAAA,MACvC,WAAW,MAAM,QAAQ,EAAE;AAAA,IAC7B,EACG,OAAO,OAAO,EACd,KAAK,GAAG,CAAC,UAAU,QAAQ,QAAQ,IAAI,CAAC;AAAA,EAC/C,EACC,KAAK,EAAE,CAAC;AACb;AAdS;AAgBT,SAAS,iBAAiB,KAAc,OAA8B;AAthCtE;AAuhCE,aAAW,WAAW,MAAM,UAAU;AACpC,QAAI,CAAC,QAAQ,KAAM;AACnB,UAAM,OAAO,QAAQ,KAAK,QAAQ,IAAI;AACtC,QAAI,EAAC,6BAAM,SAAQ;AACjB,iBAAW,KAAK,QAAQ,MAAM,sBAAsB,iBAAiB,OAAO,CAAC;AAC7E,gCAA0B,KAAK,QAAQ,MAAM,oBAAoB;AACjE;AAAA,IACF;AACA,UAAM,YAAY;AAAA,MAChB,GAAG,MAAM,KAAK,KAAK,OAAO,uBAAuB,KAAK,eAAe,CAAC;AAAA,MACtE,GAAG,MAAM,KAAK,KAAK,OAAO,uBAAuB,KAAK,eAAe,CAAC;AAAA,MACtE,GAAG,MAAM,KAAK,KAAK,OAAO,uBAAuB,KAAK,gBAAgB,CAAC;AAAA,IACzE;AACA,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,QAAQ,KAAK;AAC/C,YAAM,SAAS,QAAQ,QAAQ,CAAC;AAChC,YAAM,WAAW,UAAU,CAAC;AAC5B,UAAI,CAAC,UAAU,CAAC,SAAU;AAC1B,mBAAa,UAAU,QAAQ,OAAO,IAAI;AAC1C,mBAAa,UAAU,MAAM,OAAO,EAAE;AACtC,8BAAwB,WAAU,YAAO,WAAP,mBAAe,IAAI;AAAA,IACvD;AACA,cAAU,IAAI;AAAA,EAChB;AACF;AAxBS;AA0BT,SAAS,iBAAiB,SAAoC;AAC5D,SAAO,GAAG,QAAQ,wBAAwBP,WAAU,cAAc,IAAI,cAAc,QAAQ,cAAc,aAAa,KAAK,QAAQ,QACjI,IAAI,CAAC,QAAQ,UAAU,uBAAuB,QAAQ,QAAQ,CAAC,CAAC,EAChE,KAAK,EAAE,CAAC;AACb;AAJS;AAMT,SAAS,uBAAuB,QAAiC,IAAoB;AAtjCrF;AAujCE,QAAM,OAAO,uBAAuB,QAAQ,OAAO,IAAI;AACvD,QAAM,KAAK,uBAAuB,MAAM,OAAO,EAAE;AACjD,QAAI,YAAO,WAAP,mBAAe,UAAS,WAAW,OAAO,OAAO,gBAAgB;AACnE,UAAM,QAAO,YAAO,OAAO,SAAd,YAAsB,SAAS,EAAE;AAC9C,WAAO,uCAAuC,IAAI,GAAG,EAAE,mEAAmE,EAAE,WAAWI,SAAQ,IAAI,CAAC,mJAAmJ,QAAQ,oBAAoBA,SAAQ,OAAO,OAAO,cAAc,CAAC;AAAA,EAC1W;AACA,SAAO,uCAAuC,IAAI,GAAG,EAAE;AACzD;AARS;AAUT,SAAS,uBAAuB,MAAqB,QAAqD;AAhkC1G;AAikCE,QAAM,QAAQ,0BAAU,CAAC;AACzB,SAAO,QAAQ,IAAI,cAAa,WAAM,WAAN,YAAgB,CAAC,0BAAyB,WAAM,iBAAN,YAAsB,CAAC,0BAAyB,WAAM,QAAN,YAAa,CAAC,0BAAyB,WAAM,cAAN,YAAmB,CAAC,sBAAsB,IAAI;AACjN;AAHS;AAKT,SAAS,aACP,UACA,WACA,QACM;AACN,MAAI,CAAC,OAAQ;AACb,QAAM,WAAW,SAAS,uBAAuB,KAAK,SAAS,EAAE,CAAC;AAClE,MAAI,CAAC,SAAU;AACf,oBAAkB,UAAU,OAAO,OAAO,MAAM;AAChD,oBAAkB,UAAU,UAAU,OAAO,YAAY;AACzD,oBAAkB,UAAU,OAAO,OAAO,GAAG;AAC7C,oBAAkB,UAAU,UAAU,OAAO,SAAS;AACxD;AAZS;AAcT,SAAS,wBAAwB,UAAmB,MAAgC;AAClF,MAAI,SAAS,OAAW;AACxB,QAAM,SAAS,SAAS,uBAAuB,KAAK,OAAO,EAAE,CAAC;AAC9D,MAAI,OAAQ,QAAO,aAAa,QAAQ,IAAI;AAC9C;AAJS;AAMT,SAAS,eAAe,KAAc,OAA8B;AAClE,aAAW,SAAS,MAAM,QAAQ;AAChC,kBAAc,KAAK,KAAK;AAAA,EAC1B;AACF;AAJS;AAMT,SAAS,cAAc,KAAc,OAA8B;AA/lCnE;AAgmCE,MAAI,CAAC,MAAM,KAAM;AACjB,QAAM,OAAO,QAAQ,KAAK,MAAM,IAAI;AACpC,MAAI,EAAC,6BAAM,SAAQ;AACjB,QAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,iBAAiB,GAAC,WAAM,WAAN,mBAAc,QAAQ;AAClE,eAAW,KAAK,MAAM,MAAM,oBAAoB,eAAe,KAAK,CAAC;AACrE,8BAA0B,KAAK,MAAM,MAAM,kBAAkB;AAC7D;AAAA,EACF;AACA,mBAAiB,KAAK,QAAQ,MAAM,KAAK;AACzC,QAAM,aAAa,MAAM,KAAK,KAAK,OAAO,uBAAuB,KAAK,GAAG,CAAC;AAC1E,WAAS,IAAI,GAAG,IAAI,MAAM,YAAY,UAAU,IAAI,WAAW,QAAQ,KAAK;AAC1E,eAAW,CAAC,EAAG,eAAc,WAAM,YAAY,CAAC,MAAnB,YAAwB;AAAA,EACvD;AACA,YAAU,IAAI;AAChB;AAfS;AAiBT,SAAS,eAAe,OAAgC;AACtD,QAAM,YAAY,mBAAmB,KAAK;AAC1C,SAAO,GAAG,QAAQ,0BAA0B,QAAQ,cAAc,IAAI,cAAc,aAAa,mFAAmF,oBAAoB,MAAM,KAAK,CAAC,4BAA4B,MAAM,QAAQ,IAAI,CAAC,6BAA6B,SAAS;AAC3S;AAHS;AAKT,SAAS,oBAAoB,OAAmC;AAC9D,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,iEAAiE,QAAQ,KAAK,CAAC;AACxF;AAHS;AAKT,SAAS,mBAAmB,OAAgC;AAC1D,MAAI,MAAM,SAAS,SAAS,MAAM,SAAS,WAAY,QAAO,sBAAsB,KAAK;AACzF,MAAI,MAAM,SAAS,UAAU,MAAM,SAAS,cAAe,QAAO,mBAAmB,KAAK;AAC1F,SAAO,kBAAkB,KAAK;AAChC;AAJS;AAMT,SAAS,kBAAkB,OAAgC;AAhoC3D;AAioCE,QAAM,cAAY,WAAM,SAAN,mBAAY,WAAW,UAAS,QAAQ;AAC1D,QAAM,aAAW,WAAM,SAAN,mBAAY,SAAS,cAAa,YAAY;AAC/D,SAAO,8BAA8B,SAAS,uBAAuB,QAAQ,6BAA6B,yBAAyB,KAAK,CAAC,gEAAgE,sBAAsB,CAAC,GAAG,mBAAmB,CAAC;AACzP;AAJS;AAMT,SAAS,mBAAmB,OAAgC;AAC1D,QAAM,SAAS,MAAM,SAAS,gBAAgB,MAAM;AACpD,SAAO,mEAAmE,yBAAyB,OAAO,MAAM,CAAC,iEAAiE,sBAAsB,CAAC,GAAG,mBAAmB,CAAC;AAClO;AAHS;AAKT,SAAS,sBAAsB,OAAgC;AAC7D,QAAM,MAAM,MAAM,SAAS,aAAa,kBAAkB;AAC1D,QAAM,OAAO,MAAM,SAAS,aAAa,2BAA2B;AACpE,SAAO,MAAM,GAAG,2BAA2B,mBAAmB,KAAK,CAAC,GAAG,IAAI,OAAO,GAAG;AACvF;AAJS;AAMT,SAAS,yBAAyB,OAAwB,QAAyB;AAjpCnF;AAkpCE,WAAQ,WAAM,WAAN,YAAgB,CAAC,GACtB,IAAI,CAAC,QAAQ,UAAU;AAnpC5B,QAAAD;AAopCM,UAAM,YAAY,WAAW,SAAY,KAAK,4BAA4B,WAAW,MAAM,SAAS,MAAM;AAC1G,WAAO,sBAAsB,KAAK,oBAAoB,KAAK,MAAM,oBAAoB,OAAO,IAAI,CAAC,GAAG,SAAS,yBAAyB,SAAQA,MAAA,MAAM,kBAAN,OAAAA,MAAuB,EAAE,CAAC,kDAAkD,QAAQ,OAAO,MAAM,CAAC;AAAA,EAClP,CAAC,EACA,KAAK,EAAE;AACZ;AAPS;AAST,SAAS,mBAAmB,OAAgC;AA1pC5D;AA2pCE,QAAM,UAAS,WAAM,WAAN,mBAAe;AAC9B,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,4CAA4C,oBAAoB,OAAO,IAAI,CAAC,yBAAyB,SAAQ,WAAM,kBAAN,YAAuB,EAAE,CAAC,kDAAkD,QAAQ,OAAO,MAAM,CAAC;AACxN;AAJS;AAMT,SAAS,oBAAoB,MAAkC;AAC7D,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;AAC5C,WAAO,wBAAwB,QAAQ,IAAI,CAAC;AAAA,EAC9C;AACA,SAAO,cAAc,QAAQ,IAAI,CAAC;AACpC;AANS;AAQT,SAAS,wBAAgC;AACvC,SAAO;AACT;AAFS;AAIT,SAAS,qBAA6B;AACpC,SAAO;AACT;AAFS;AAIT,SAAS,iBAAiB,UAAoB,OAAiC;AAC7E,MAAI,UAAU,OAAW;AACzB,QAAM,UAAU,SAAS,uBAAuB,KAAK,OAAO,EAAE,CAAC;AAC/D,MAAI,CAAC,QAAS;AACd,QAAM,SAAS,QAAQ,uBAAuB,KAAK,GAAG,EAAE,CAAC;AACzD,MAAI,OAAQ,QAAO,cAAc;AACnC;AANS;AAQT,SAAS,eAAe,MAAY,KAAmB;AACrD,OAAK,SAASE,kBAAiB,GAAG;AAClC,YAAU,IAAI;AAChB;AAHS;AAKT,SAASE,2BACP,KACA,YACA,YACqC;AACrC,QAAM,OAAON,oBAAmB,QAAQ,KAAK,qBAAqB,UAAU,CAAC,CAAC;AAC9E,QAAM,UAA+C,CAAC;AACtD,aAAW,OAAO,KAAK,OAAO,GAAG;AAC/B,QAAI,IAAI,KAAK,SAAS,UAAU,GAAG;AACjC,cAAQ,KAAK,EAAE,IAAI,IAAI,IAAI,MAAMC,2BAA0B,YAAY,IAAI,MAAM,EAAE,CAAC;AAAA,IACtF;AAAA,EACF;AACA,SAAO;AACT;AAbS,OAAAK,4BAAA;AAeT,SAAS,2BACP,MACA,WACoB;AA/sCtB;AAgtCE,aAAW,OAAO,KAAK,OAAO,GAAG;AAC/B,QACE,IAAI,SAAS,sBACb,IAAI,WAAW,UAAU,YACxB,SAAI,eAAJ,YAAkB,kBAAiB,eAAU,eAAV,YAAwB,aAC5D;AACA,aAAO,IAAI;AAAA,IACb;AAAA,EACF;AACA,SAAO;AACT;AAdS;AAgBT,SAAS,2BACP,MACA,MACA,QACA,YACoB;AAjuCtB;AAkuCE,aAAW,OAAO,KAAK,OAAO,GAAG;AAC/B,QACE,IAAI,SAAS,QACb,IAAI,WAAW,YACd,SAAI,eAAJ,YAAkB,SAAS,kCAAc,KAC1C;AACA,aAAO,IAAI;AAAA,IACb;AAAA,EACF;AACA,SAAO;AACT;AAhBS;AAkBT,SAAS,YAAY,OAAgC;AACnD,MAAI,MAAM;AACV,aAAW,SAAS,MAAM,QAAQ;AAChC,QAAI,MAAM,MAAM,MAAM,KAAK,IAAK,OAAM,MAAM;AAAA,EAC9C;AACA,SAAO,MAAM;AACf;AANS;AAQT,SAAS,mBAAmB,MAAyC;AACnE,MAAI,OAAO;AACX,SAAO,KAAK,IAAI,MAAM,IAAI,EAAE,EAAG;AAC/B,SAAO,MAAM,IAAI;AACnB;AAJS;AAMT,SAAS,iBAAiB,MAAoB,OAA8B;AA5vC5E;AA6vCE,SACE,KAAK,OAAO,MAAM,MAClB,KAAK,SAAS,MAAM,QACpB,KAAK,WAAW,MAAM,YACrB,UAAK,eAAL,YAAmB,UAAS,WAAM,eAAN,YAAoB;AAErD;AAPS;AAST,SAAS,uBAAuB,MAAyC;AACvE,SAAO,GAAG,QAAQ,yBAAyB,MAAM,KAAK,MAAM,KAAK,KAAK,OAAO,CAAC,EAC3E,IAAI,CAAC,QAAQ;AACZ,UAAM,QAAQ;AAAA,MACZ,OAAOH,SAAQ,IAAI,EAAE,CAAC;AAAA,MACtB,SAASA,SAAQ,IAAI,IAAI,CAAC;AAAA,MAC1B,WAAWA,SAAQ,IAAI,MAAM,CAAC;AAAA,MAC9B,WAAW,cAAc,IAAI,UAAU;AAAA,IACzC,EAAE,OAAO,OAAO;AAChB,WAAO,iBAAiB,MAAM,KAAK,GAAG,CAAC;AAAA,EACzC,CAAC,EACA,KAAK,EAAE,CAAC;AACb;AAZS;AAcT,SAAS,oBAAoB,KAAc,QAAgB,WAA2B;AACpF,MAAI,OAAO;AACX,SAAO,QAAQ,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,EAAG;AACrD,SAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;AACrC;AAJS;AAMT,SAAS,4BACP,KACA,QACA,WACA,MACQ;AACR,MAAI,OAAO;AACX,SAAO,QAAQ,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;AAC/F;AAAA,EACF;AACA,SAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;AACrC;AAXS;AAaT,SAASH,oBAAmB,MAAwC;AAtyCpE;AAuyCE,QAAM,SAAS,oBAAI,IAA0B;AAC7C,MAAI,EAAC,6BAAM,QAAQ,QAAO;AAC1B,QAAM,OAAO,KAAK,OAAO,uBAAuB,QAAQ,cAAc;AACtE,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,CAAC,IAAK;AACV,UAAM,KAAK,IAAI,aAAa,IAAI;AAChC,UAAM,OAAO,IAAI,aAAa,MAAM;AACpC,UAAM,SAAS,IAAI,aAAa,QAAQ;AACxC,QAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAQ;AAC7B,WAAO,IAAI,IAAI;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAY,SAAI,aAAa,YAAY,MAA7B,YAAkC;AAAA,IAChD,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAnBS,OAAAA,qBAAA;AAqBT,SAAS,qBAAqB,MAAsB;AAClD,SAAO,GAAGO,SAAQ,IAAI,CAAC,UAAU,KAAK,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC,CAAC;AACxE;AAFS;AAIT,SAASA,SAAQ,MAAsB;AACrC,QAAM,MAAM,KAAK,YAAY,GAAG;AAChC,SAAO,QAAQ,KAAK,KAAK,KAAK,MAAM,GAAG,GAAG;AAC5C;AAHS,OAAAA,UAAA;AAKT,SAASC,eAAc,MAAsB;AAC3C,QAAM,QAAkB,CAAC;AACzB,aAAW,QAAQ,KAAK,MAAM,GAAG,GAAG;AAClC,QAAI,CAAC,QAAQ,SAAS,IAAK;AAC3B,QAAI,SAAS,KAAM,OAAM,IAAI;AAAA,QACxB,OAAM,KAAK,IAAI;AAAA,EACtB;AACA,SAAO,MAAM,KAAK,GAAG;AACvB;AARS,OAAAA,gBAAA;AAUT,SAASP,2BAA0B,gBAAwB,QAAwB;AACjF,MAAI,OAAO,WAAW,GAAG,EAAG,QAAOO,eAAc,OAAO,MAAM,CAAC,CAAC;AAChE,QAAM,OAAOD,SAAQ,cAAc;AACnC,SAAOC,eAAc,OAAO,GAAG,IAAI,IAAI,MAAM,KAAK,MAAM;AAC1D;AAJS,OAAAP,4BAAA;AAMT,SAAS,2BAA2B,gBAAwB,gBAAgC;AAC1F,QAAM,cAAcM,SAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AACrE,QAAM,cAAc,eAAe,MAAM,GAAG,EAAE,OAAO,OAAO;AAC5D,MAAI,SAAS;AACb,SACE,SAAS,YAAY,UACrB,SAAS,YAAY,UACrB,YAAY,MAAM,MAAM,YAAY,MAAM,GAC1C;AACA;AAAA,EACF;AACA,QAAM,KAAK,YAAY,MAAM,MAAM,EAAE,IAAI,MAAM,IAAI;AACnD,QAAM,OAAO,YAAY,MAAM,MAAM;AACrC,SAAO,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK;AACvC;AAdS;AAgBT,SAAS,0BAA0B,KAAc,MAAc,aAA2B;AAp2C1F;AAq2CE,QAAM,OAAO,QAAQ,KAAK,qBAAqB;AAC/C,MAAI,GAAC,kCAAM,WAAN,mBAAc,iBAAiB;AACpC,QAAM,WAAW,IAAI,IAAI;AACzB,QAAM,YAAY,KAAK,OAAO,uBAAuBT,mBAAkB,UAAU;AACjF,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAMW,YAAW,UAAU,CAAC;AAC5B,QAAI,CAACA,aAAYA,UAAS,aAAa,UAAU,MAAM,SAAU;AACjE,QAAIA,UAAS,aAAa,aAAa,MAAM,aAAa;AACxD,MAAAA,UAAS,aAAa,eAAe,WAAW;AAChD,gBAAU,IAAI;AAAA,IAChB;AACA;AAAA,EACF;AACA,QAAM,WAAW,KAAK,OAAO,gBAAgBX,mBAAkB,UAAU;AACzE,WAAS,aAAa,YAAY,QAAQ;AAC1C,WAAS,aAAa,eAAe,WAAW;AAChD,OAAK,OAAO,gBAAgB,YAAY,QAAQ;AAChD,YAAU,IAAI;AAChB;AAnBS;AAqBT,SAAS,0BAA0B,KAAc,MAAoB;AAz3CrE;AA03CE,QAAM,OAAO,QAAQ,KAAK,qBAAqB;AAC/C,MAAI,GAAC,kCAAM,WAAN,mBAAc,iBAAiB;AACpC,QAAM,WAAW,IAAI,IAAI;AACzB,QAAM,YAAY,MAAM,KAAK,KAAK,OAAO,uBAAuBA,mBAAkB,UAAU,CAAC;AAC7F,aAAW,YAAY,WAAW;AAChC,QAAI,SAAS,aAAa,UAAU,MAAM,SAAU;AACpD,mBAAS,eAAT,mBAAqB,YAAY;AACjC,cAAU,IAAI;AAAA,EAChB;AACF;AAVS;AAYT,SAAS,kBAAkB,QAAiB,WAAmB,OAAiC;AAC9F,MAAI,UAAU,OAAW;AACzB,QAAM,KAAK,OAAO,uBAAuB,KAAK,SAAS,EAAE,CAAC;AAC1D,MAAI,GAAI,IAAG,cAAc,OAAO,KAAK;AACvC;AAJS;AAMT,SAAS,WAAW,MAAc,OAAmC;AACnE,SAAO,UAAU,SAAY,KAAK,GAAG,IAAI,KAAKK,SAAQ,KAAK,CAAC;AAC9D;AAFS;AAIT,SAAS,WAAW,MAAc,OAAmC;AACnE,SAAO,UAAU,SAAY,KAAK,GAAG,IAAI,KAAK,KAAK;AACrD;AAFS;AAIT,SAAS,YAAY,MAAc,OAAoC;AACrE,SAAO,UAAU,SAAY,KAAK,GAAG,IAAI,KAAK,QAAQ,IAAI,CAAC;AAC7D;AAFS;AAIT,SAASA,SAAQ,OAAuB;AACtC,SAAO,MACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM;AACzB;AANS,OAAAA,UAAA;AAQT,SAAS,QAAQ,OAAuB;AACtC,SAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM;AAChF;AAFS;;;AC75CF,IAAM,kBAAN,MAAM,gBAAe;AAAA,EAI1B,YAAY,OAA8B,OAAgC;AAH1E,wBAAiB;AACjB,wBAAiB;AAGf,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAe;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAAe;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,QAAQ,MAAoB;AAC1B,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,OAAO,MAAoB;AACzB,oBAAgB,IAAI;AACpB,QAAI,KAAK,MAAM,KAAK,CAAC,SAAS,SAAS,KAAK,SAAS,KAAK,SAAS,IAAI,GAAG;AACxE,YAAM,IAAI,MAAM,+CAA+C,IAAI,EAAE;AAAA,IACvE;AACA,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,eAAmC;AACjC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,gBAAgB,cAAwC;AACtD,QAAI,iBAAiB,WAAc,CAAC,OAAO,UAAU,YAAY,KAAK,eAAe,IAAI;AACvF,YAAM,IAAI,MAAM,6EAA6E;AAAA,IAC/F;AACA,SAAK,MAAM,eAAe;AAAA,EAC5B;AAAA,EAEA,UAAiC;AAC/B,WAAO,mBAAK,KAAK;AAAA,EACnB;AACF;AA3C4B;AAArB,IAAM,iBAAN;AA6CA,IAAM,4BAAN,MAAM,0BAAyB;AAAA,EAIpC,YAAY,OAAgC;AAH5C,wBAAiB;AACjB,wBAAiB;AAGf,SAAK,SAAS;AACd,SAAK,eAAe,MAAM,IAAI,CAAC,SAAS,IAAI,eAAe,MAAM,KAAK,CAAC;AAAA,EACzE;AAAA,EAEA,QAA0B;AACxB,WAAO,CAAC,GAAG,KAAK,YAAY;AAAA,EAC9B;AAAA,EAEA,QAAQ,MAA8B;AACpC,UAAM,OAAO,KAAK,oBAAoB,IAAI;AAC1C,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,0CAA0C,IAAI,EAAE;AAC3E,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,MAAqC;AAlE3D;AAmEI,YAAO,UAAK,aAAa,KAAK,CAAC,SAAS,KAAK,KAAK,MAAM,IAAI,MAArD,YAA0D;AAAA,EACnE;AAAA,EAEA,IAAI,OAA8C;AAChD,oBAAgB,MAAM,IAAI;AAC1B,QAAI,KAAK,oBAAoB,MAAM,IAAI,GAAG;AACxC,YAAM,IAAI,MAAM,+CAA+C,MAAM,IAAI,EAAE;AAAA,IAC7E;AACA,QAAI,MAAM,iBAAiB,WAAc,CAAC,OAAO,UAAU,MAAM,YAAY,KAAK,MAAM,eAAe,IAAI;AACzG,YAAM,IAAI,MAAM,2EAA2E;AAAA,IAC7F;AACA,UAAM,OAAO,mBAAK;AAClB,SAAK,OAAO,KAAK,IAAI;AACrB,UAAM,OAAO,IAAI,eAAe,MAAM,KAAK,MAAM;AACjD,SAAK,aAAa,KAAK,IAAI;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,MAAoB;AAC7B,UAAM,QAAQ,KAAK,OAAO,UAAU,CAAC,SAAS,KAAK,SAAS,IAAI;AAChE,QAAI,UAAU,GAAI,OAAM,IAAI,MAAM,0CAA0C,IAAI,EAAE;AAClF,SAAK,OAAO,OAAO,OAAO,CAAC;AAC3B,SAAK,aAAa,OAAO,OAAO,CAAC;AAAA,EACnC;AACF;AA5CsC;AAA/B,IAAM,2BAAN;AA8CP,SAAS,gBAAgB,MAAoB;AAC3C,MAAI,CAAC,QAAQ,CAAC,gCAAgC,KAAK,IAAI,GAAG;AACxD,UAAM,IAAI,MAAM,yCAAyC,IAAI,EAAE;AAAA,EACjE;AACF;AAJS;;;AC1DF,IAAM,cAAN,MAAM,YAAW;AAAA,EAQtB,YACE,OACA,SACA,SAA2B,kBAAkB,GAC7C,gBACA;AAZF,wBAAS;AACT,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AAQf,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,iBAAiB;AACtB,SAAK,MAAM,kBAAkB,OAAO;AACpC,QAAI,KAAK,IAAI,aAAa,KAAK,IAAI,cAAc,MAAM,MAAM;AAC3D,YAAM,IAAI;AAAA,QACR,8BAA8B,KAAK,IAAI,SAAS,+BAA+B,MAAM,IAAI;AAAA,MAC3F;AAAA,IACF;AACA,SAAK,iBAAiB,IAAI,IAAI,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC;AAC7E,SAAK,SAAS,IAAI,iBAAiB,IAAI;AAAA,EACzC;AAAA,EAEA,UAAkB;AAChB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,cAAsB;AACpB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,cAAsB;AACpB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,SAA6B;AAC3B,WAAO,KAAK,OAAO,CAAC,SAAS,KAAK,KAAK;AAAA,EACzC;AAAA,EAEA,WAAgC;AAC9B,WAAO,KAAK,OAAO,CAAC,SAAM;AAvF9B;AAuFiC,wBAAK,YAAL,YAAgB;AAAA,KAAI;AAAA,EACnD;AAAA,EAEA,OAAmB;AACjB,WAAO,KAAK,OAAO,CAAC,SAAS,WAAW,IAAI,CAAC;AAAA,EAC/C;AAAA,EAEA,aAAgC;AAC9B,WAAO,KAAK,OAAO,CAAC,SAAS,KAAK,IAAI;AAAA,EACxC;AAAA,EAEA,YAAiC;AAC/B,WAAO,KAAK,OAAO,CAAC,SAAM;AAnG9B;AAmGiC,wBAAK,aAAL,YAAiB;AAAA,KAAI;AAAA,EACpD;AAAA,EAEA,WAAqC;AACnC,WAAO,KAAK,OAAO,CAAC,SAAS,KAAK,OAAO;AAAA,EAC3C;AAAA,EAEA,WAAW,SAAmC;AA1GhD;AA2GI,QAAI,YAAY,WAAc,CAAC,OAAO,UAAU,OAAO,KAAK,UAAU,IAAI;AACxE,YAAM,IAAI,MAAM,+DAA+D;AAAA,IACjF;AACA,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,cAAM,UAAU,kBAAkB,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,cAAc,CAAC;AACjF,cAAM,OAAO,KAAK,WAAW,OAAO;AACpC,YAAI,YAAY,OAAW,QAAO,KAAK;AAAA,YAClC,MAAK,UAAU;AAAA,MACtB;AAAA,IACF;AACA,wBAAoB,KAAK,KAAK;AAC9B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,aAAwC;AAhI1C;AAiII,UAAM,UAAqC,CAAC;AAC5C,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,YAAM,WAAW,KAAK,IAAI,WAAW;AACrC,cAAQ,MAAK,UAAK,MAAM,KAAK,KAAK,CAAC,QAAQ,IAAI,UAAU,QAAQ,MAApD,mBAAuD,MAAM;AAAA,IAC5E;AACA,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,QAAkC;AAzIjD;AA0II,QAAI,WAAW,WAAc,CAAC,OAAO,SAAS,MAAM,KAAK,SAAS,IAAI;AACpE,YAAM,IAAI,MAAM,+DAA+D;AAAA,IACjF;AACA,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,YAAM,MAAM,KAAK,UAAU,KAAK,IAAI,WAAW,CAAC;AAChD,UAAI,WAAW,QAAW;AACxB,eAAO,IAAI;AACX,eAAO,IAAI;AAAA,MACb,OAAO;AACL,YAAI,SAAS;AACb,YAAI,eAAe;AAAA,MACrB;AAAA,IACF;AACA,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,SAAS,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eAA0C;AAhK5C;AAiKI,UAAM,SAAoC,CAAC;AAC3C,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,YAAM,cAAc,KAAK,IAAI,cAAc;AAC3C,aAAO;AAAA,SACL,UAAK,MAAM,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,eAAe,OAAO,OAAO,WAAW,MAA1F,mBACI;AAAA,MACN;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,OAAiC;AA5KlD;AA6KI,QAAI,UAAU,WAAc,CAAC,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI;AACjE,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AACA,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,YAAM,SAAS,KAAK,aAAa,KAAK,IAAI,cAAc,CAAC;AACzD,UAAI,UAAU,QAAW;AACvB,eAAO,OAAO;AACd,eAAO,OAAO;AAAA,MAChB,OAAO;AACL,eAAO,QAAQ;AACf,eAAO,cAAc;AAAA,MACvB;AAAA,IACF;AACA,qBAAiB,KAAK,KAAK;AAC3B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,SAAS,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAc;AApMhB;AAqMI,UAAM,gBAAgB,kBAAkB,KAAK,IAAI,UAAU,KAAK,IAAI,WAAW;AAC/E,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,cAAM,UAAU,kBAAkB,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,cAAc,CAAC;AACjF,YAAI,YAAY,cAAe,MAAK,iBAAiB,OAAO;AAAA,MAC9D;AAAA,IACF;AACA,wBAAoB,KAAK,KAAK;AAC9B,QAAI,CAAC,KAAK,MAAM,aAAa,KAAK,CAAC,UAAU,MAAM,YAAY,KAAK,IAAI,OAAO,GAAG;AAChF,WAAK,MAAM,aAAa,KAAK,EAAE,SAAS,KAAK,IAAI,QAAQ,CAAC;AAAA,IAC5D;AACA,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,SAAS,KAAK,IAAI;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,UAAgB;AAxNlB;AAyNI,SAAK,MAAM,eAAe,KAAK,MAAM,aAAa;AAAA,MAChD,CAAC,UAAU,MAAM,YAAY,KAAK,IAAI;AAAA,IACxC;AACA,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,SAAS,KAAK,IAAI;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,UAAU,QAAkC;AApO9C;AAqOI,SAAK,kBAAkB,QAAQ,sBAAsB;AACrD,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,cAAM,UAAU,kBAAkB,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,cAAc,CAAC;AACjF,aAAK,aAAa,SAAS,OAAO,CAAC,EAAG,CAAC,CAAE;AAAA,MAC3C;AAAA,IACF;AACA,wBAAoB,KAAK,KAAK;AAC9B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,SAAS,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,YAAY,UAAqC;AAtPnD;AAuPI,SAAK,kBAAkB,UAAU,wBAAwB;AACzD,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,cAAM,UAAU,kBAAkB,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,cAAc,CAAC;AACjF,aAAK,eAAe,SAAS,SAAS,CAAC,EAAG,CAAC,CAAE;AAAA,MAC/C;AAAA,IACF;AACA,wBAAoB,KAAK,KAAK;AAC9B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,SAAS,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAc;AAxQhB;AAyQI,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,cAAM,UAAU,kBAAkB,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,cAAc,CAAC;AACjF,aAAK,WAAW,OAAO;AAAA,MACzB;AAAA,IACF;AACA,wBAAoB,KAAK,KAAK;AAC9B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,SAAS,KAAK,IAAI;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,QAAQ,WAAmB,cAAiC;AAC1D,SAAK,aAAa,WAAW,YAAY;AACzC,UAAM,MAAM,KAAK,IAAI,WAAW;AAChC,UAAM,SAAS,KAAK,IAAI,cAAc;AACtC,WAAO,IAAI,UAAU,KAAK,OAAO,kBAAkB,KAAK,MAAM,GAAG,KAAK,QAAQ,KAAK,cAAc;AAAA,EACnG;AAAA,EAEA,OAAO,WAA+B;AACpC,QAAI,CAAC,OAAO,UAAU,SAAS,KAAK,YAAY,KAAK,aAAa,KAAK,IAAI,UAAU;AACnF,YAAM,IAAI,MAAM,gDAAgD,SAAS,EAAE;AAAA,IAC7E;AACA,UAAM,MAAM,KAAK,IAAI,WAAW;AAChC,UAAM,QAAQ,kBAAkB,KAAK,KAAK,IAAI,WAAW;AACzD,UAAM,MAAM,kBAAkB,KAAK,KAAK,IAAI,cAAc,KAAK,IAAI,cAAc,CAAC;AAClF,WAAO,IAAI,YAAW,KAAK,OAAO,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,cAAc;AAAA,EACvF;AAAA,EAEA,UAAU,cAAkC;AAC1C,QACE,CAAC,OAAO,UAAU,YAAY,KAC9B,eAAe,KACf,gBAAgB,KAAK,IAAI,aACzB;AACA,YAAM,IAAI,MAAM,sDAAsD,YAAY,EAAE;AAAA,IACtF;AACA,UAAM,SAAS,KAAK,IAAI,cAAc;AACtC,UAAM,QAAQ,kBAAkB,KAAK,IAAI,UAAU,MAAM;AACzD,UAAM,MAAM,kBAAkB,KAAK,IAAI,WAAW,KAAK,IAAI,WAAW,GAAG,MAAM;AAC/E,WAAO,IAAI,YAAW,KAAK,OAAO,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,cAAc;AAAA,EACvF;AAAA,EAEA,OAAO,UAAkB,aAAiC;AACxD,WAAO,IAAI;AAAA,MACT,KAAK;AAAA,MACL,mBAAmB,KAAK,IAAI,UAAU,KAAK,IAAI,aAAa,UAAU,WAAW;AAAA,MACjF,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEA,OACE,WACA,cACA,WAAW,KAAK,IAAI,UACpB,cAAc,KAAK,IAAI,aACX;AACZ,QAAI,CAAC,OAAO,UAAU,SAAS,KAAK,CAAC,OAAO,UAAU,YAAY,GAAG;AACnE,YAAM,IAAI,MAAM,6CAA6C;AAAA,IAC/D;AACA,WAAO,IAAI;AAAA,MACT,KAAK;AAAA,MACL;AAAA,QACE,KAAK,IAAI,WAAW;AAAA,QACpB,KAAK,IAAI,cAAc;AAAA,QACvB;AAAA,QACA;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MACE,WACA,cACA,UACA,aACY;AACZ,QACE,CAAC,OAAO,UAAU,SAAS,KAC3B,CAAC,OAAO,UAAU,YAAY,KAC9B,CAAC,OAAO,UAAU,QAAQ,KAC1B,CAAC,OAAO,UAAU,WAAW,KAC7B,YAAY,KACZ,eAAe,KACf,WAAW,KACX,cAAc,KACd,YAAY,WAAW,KAAK,IAAI,YAChC,eAAe,cAAc,KAAK,IAAI,aACtC;AACA,YAAM,IAAI;AAAA,QACR,6CAA6C,SAAS,YAAY,YAAY,UAAU,QAAQ,aAAa,WAAW;AAAA,MAC1H;AAAA,IACF;AACA,WAAO,IAAI;AAAA,MACT,KAAK;AAAA,MACL;AAAA,QACE,KAAK,IAAI,WAAW;AAAA,QACpB,KAAK,IAAI,cAAc;AAAA,QACvB;AAAA,QACA;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEA,UAA4B;AAC1B,UAAM,QAA0B,CAAC;AACjC,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,cAAM,UAAU,kBAAkB,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,cAAc,CAAC;AACjF,cAAM,OAAO,KAAK,eAAe,IAAI,OAAO;AAC5C,YAAI,KAAM,OAAM,KAAK,mBAAK,KAAM;AAAA,MAClC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,oBAA0C;AArY5C;AAsYI,UAAM,OAAO,KAAK,UAAU;AAC5B,WAAO,iBAAgB,UAAK,OAAO,aAAY,kCAAM,YAAN,YAAiB,CAAC,MAA1C,YAA+C,CAAC,CAAC;AAAA,EAC1E;AAAA,EAEA,aACE,QACA,UAAsC,CAAC,GACjC;AA7YV;AA8YI,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,cAAM,UAAU,kBAAkB,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,cAAc,CAAC;AACjF,cAAM,OAAO,KAAK,WAAW,OAAO;AACpC,cAAM,UAAU,iBAAgB,UAAK,OAAO,aAAY,UAAK,YAAL,YAAgB,CAAC,MAAzC,YAA8C,CAAC,CAAC;AAChF,aAAK,UAAU,iBAAiB,KAAK,QAAQ,OAAO,OAAO,CAAC;AAAA,MAC9D;AAAA,IACF;AACA,wBAAoB,KAAK,KAAK;AAC9B,SAAI,aAAQ,iBAAR,YAAwB,MAAM;AAChC,iBAAK,mBAAL,8BAAsB;AAAA,QACpB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS,KAAK,MAAM;AAAA,QACpB,WAAW,KAAK,MAAM;AAAA,QACtB,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,yBAAyB,UAA+C;AAla1E;AAmaI,eAAK,mBAAL,8BAAsB,iCACjB,WADiB;AAAA,MAEpB,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,WAAW,MAA8B;AACvC,WAAO,gBAAgB,KAAK,OAAO,OAAO,MAAM,SAAS;AAAA,EAC3D;AAAA,EAEA,WAAW,MAA8B;AACvC,WAAO,gBAAgB,KAAK,OAAO,OAAO,MAAM,SAAS;AAAA,EAC3D;AAAA,EAEA,aAAa,QAAkC;AAC7C,WAAO,gBAAgB,KAAK,OAAO,SAAS,QAAQ,WAAW;AAAA,EACjE;AAAA,EAEA,mBAAmB,MAAsB;AACvC,UAAM,UAAU,sBAAsB,IAAI;AAC1C,QAAI,YAAY,OAAW,QAAO;AAClC,UAAM,WAAW,KAAK,OAAO,cAAc,KAAK,CAAC,WAAW,OAAO,SAAS,IAAI;AAChF,QAAI,SAAU,QAAO,SAAS;AAC9B,UAAM,QAAQ,KAAK,OAAO,cAAc,OAAO,CAAC,KAAK,WAAW,KAAK,IAAI,KAAK,OAAO,EAAE,GAAG,GAAG;AAC7F,UAAM,OAAO,EAAE,IAAI,QAAQ,GAAG,KAAK;AACnC,SAAK,OAAO,cAAc,KAAK,IAAI;AACnC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAS,IAAwC;AAjcnD;AAkcI,WAAO,WAAU,UAAK,OAAO,MAAM,kBAAM,CAAC,MAAzB,YAA8B,CAAC,CAAC;AAAA,EACnD;AAAA,EAEA,SAAS,IAAwC;AArcnD;AAscI,WAAO,WAAU,UAAK,OAAO,MAAM,kBAAM,CAAC,MAAzB,YAA8B,CAAC,CAAC;AAAA,EACnD;AAAA,EAEA,WAAW,IAA0C;AAzcvD;AA0cI,WAAO,aAAY,UAAK,OAAO,QAAQ,kBAAM,CAAC,MAA3B,YAAgC,CAAC,CAAC;AAAA,EACvD;AAAA,EAEQ,OAAU,MAA0C;AA7c9D;AA8cI,UAAM,OAAc,CAAC;AACrB,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,YAAM,MAAW,CAAC;AAClB,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,cAAM,UAAU,kBAAkB,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,cAAc,CAAC;AACjF,YAAI,KAAK,MAAK,UAAK,eAAe,IAAI,OAAO,MAA/B,YAAoC,UAAU,OAAO,CAAC,CAAC;AAAA,MACvE;AACA,WAAK,KAAK,GAAG;AAAA,IACf;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,WAAmB,cAA4B;AAClE,QACE,CAAC,OAAO,UAAU,SAAS,KAC3B,CAAC,OAAO,UAAU,YAAY,KAC9B,YAAY,KACZ,eAAe,KACf,aAAa,KAAK,IAAI,YACtB,gBAAgB,KAAK,IAAI,aACzB;AACA,YAAM,IAAI;AAAA,QACR,iDAAiD,SAAS,YAAY,YAAY;AAAA,MACpF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,kBAAqB,QAAe,WAAyB;AACnE,QAAI,OAAO,WAAW,KAAK,IAAI,UAAU;AACvC,YAAM,IAAI;AAAA,QACR,GAAG,SAAS,cAAc,KAAK,IAAI,QAAQ,mBAAmB,OAAO,MAAM;AAAA,MAC7E;AAAA,IACF;AACA,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAI,CAAC,MAAM,QAAQ,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,EAAG,WAAW,KAAK,IAAI,aAAa;AAC3E,cAAM,IAAI;AAAA,UACR,GAAG,SAAS,kBAAkB,CAAC,eAAe,KAAK,IAAI,WAAW;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAa,SAAiB,OAA6B;AACjE,QAAI,UAAU,MAAM;AAClB,WAAK,WAAW,OAAO;AACvB;AAAA,IACF;AACA,UAAM,OAAO,KAAK,WAAW,OAAO;AACpC,SAAK,QAAQ;AACb,SAAK,OACH,OAAO,UAAU,YAAY,YAAY,OAAO,UAAU,WAAW,WAAW;AAClF,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,eAAe,SAAiB,SAA8B;AACpE,QAAI,YAAY,MAAM;AACpB,WAAK,WAAW,OAAO;AACvB;AAAA,IACF;AACA,UAAM,OAAO,KAAK,WAAW,OAAO;AACpC,SAAK,OAAO;AACZ,SAAK,UAAU,QAAQ,WAAW,GAAG,IAAI,QAAQ,MAAM,CAAC,IAAI;AAC5D,SAAK,QAAQ;AACb,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,WAAW,SAAiC;AAClD,UAAM,WAAW,KAAK,eAAe,IAAI,OAAO;AAChD,QAAI,SAAU,QAAO;AACrB,UAAM,OAAO,UAAU,OAAO;AAC9B,SAAK,MAAM,MAAM,KAAK,IAAI;AAC1B,SAAK,eAAe,IAAI,SAAS,IAAI;AACrC,WAAO;AAAA,EACT;AAAA,EAEQ,WAAW,SAAuB;AACxC,UAAM,OAAO,KAAK,eAAe,IAAI,OAAO;AAC5C,QAAI,CAAC,KAAM;AACX,SAAK,eAAe,OAAO,OAAO;AAClC,UAAM,QAAQ,KAAK,MAAM,MAAM,QAAQ,IAAI;AAC3C,QAAI,UAAU,GAAI,MAAK,MAAM,MAAM,OAAO,OAAO,CAAC;AAAA,EACpD;AAAA,EAEQ,iBAAiB,SAAuB;AAC9C,UAAM,OAAO,KAAK,eAAe,IAAI,OAAO;AAC5C,QAAI,CAAC,KAAM;AACX,QAAI,KAAK,YAAY,QAAW;AAC9B,WAAK,WAAW,OAAO;AACvB;AAAA,IACF;AACA,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,UAAU,OAAe;AAC/B,QAAI,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,SAAS,KAAK,UAAU,KAAK;AAC7D,QAAI,CAAC,KAAK;AACR,YAAM,EAAE,MAAM;AACd,WAAK,MAAM,KAAK,KAAK,GAAG;AACxB,WAAK,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,OAAe;AAClC,QAAI,SAAS,KAAK,MAAM,QAAQ,KAAK,CAAC,SAAS,KAAK,QAAQ,SAAS,KAAK,QAAQ,KAAK;AACvF,QAAI,CAAC,QAAQ;AACX,eAAS,EAAE,KAAK,OAAO,KAAK,MAAM;AAClC,WAAK,MAAM,QAAQ,KAAK,MAAM;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAwC;AAC9C,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,KAAK;AAC1C,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,aAAa,KAAK;AAC7C,cAAM,UAAU,kBAAkB,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,cAAc,CAAC;AACjF,cAAM,OAAO,KAAK,eAAe,IAAI,OAAO;AAC5C,YAAI,KAAM,QAAO;AAAA,MACnB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AA/iBwB;AAAjB,IAAM,aAAN;AAijBA,IAAM,aAAN,MAAM,WAAU;AAAA,EAGrB,YACE,OACA,SACA,QACA,gBACA;AAPF,wBAAiB;AAQf,SAAK,QAAQ,IAAI,WAAW,OAAO,SAAS,QAAQ,cAAc;AAAA,EACpE;AAAA,EAEA,UAAkB;AAChB,WAAO,KAAK,MAAM,QAAQ;AAAA,EAC5B;AAAA,EAEA,QAAwB;AApmB1B;AAqmBI,YAAO,gBAAK,MAAM,OAAO,EAAE,CAAC,MAArB,mBAAyB,OAAzB,YAA+B;AAAA,EACxC;AAAA,EAEA,UAAyB;AAxmB3B;AAymBI,YAAO,gBAAK,MAAM,SAAS,EAAE,CAAC,MAAvB,mBAA2B,OAA3B,YAAiC;AAAA,EAC1C;AAAA,EAEA,OAAe;AA5mBjB;AA6mBI,YAAO,gBAAK,MAAM,KAAK,EAAE,CAAC,MAAnB,mBAAuB,OAAvB,YAA6B;AAAA,EACtC;AAAA,EAEA,YAA2B;AAhnB7B;AAinBI,YAAO,gBAAK,MAAM,WAAW,EAAE,CAAC,MAAzB,mBAA6B,OAA7B,YAAmC;AAAA,EAC5C;AAAA,EAEA,WAA0B;AApnB5B;AAqnBI,YAAO,gBAAK,MAAM,UAAU,EAAE,CAAC,MAAxB,mBAA4B,OAA5B,YAAkC;AAAA,EAC3C;AAAA,EAEA,UAA8B;AAxnBhC;AAynBI,YAAO,UAAK,MAAM,SAAS,EAAE,CAAC,MAAvB,mBAA2B;AAAA,EACpC;AAAA,EAEA,WAAW,SAAmC;AAC5C,SAAK,MAAM,WAAW,OAAO;AAAA,EAC/B;AAAA,EAEA,SAAS,OAA6B;AACpC,SAAK,MAAM,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;AAAA,EAChC;AAAA,EAEA,WAAW,SAA8B;AACvC,SAAK,MAAM,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;AAAA,EACpC;AAAA,EAEA,QAAc;AACZ,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEA,UAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAiC;AAC/B,WAAO,KAAK,MAAM,QAAQ,EAAE,CAAC,IAAI,mBAAK,KAAK,MAAM,QAAQ,EAAE,CAAC,KAAO;AAAA,EACrE;AACF;AA/DuB;AAAhB,IAAM,YAAN;AAiEA,IAAM,oBAAN,MAAM,kBAAiB;AAAA,EAM5B,YAA6B,OAAmB;AAAnB;AAL7B,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAS;AAGP,SAAK,OAAO,IAAI,qBAAqB,KAAK;AAC1C,SAAK,OAAO,IAAI,qBAAqB,KAAK;AAC1C,SAAK,SAAS,IAAI,uBAAuB,KAAK;AAC9C,SAAK,YAAY,IAAI,0BAA0B,KAAK;AAAA,EACtD;AAAA,EAEA,mBAAuC;AACrC,WAAO,KAAK,MAAM,kBAAkB,EAAE;AAAA,EACxC;AAAA,EAEA,oBAAoB,MAAgC;AAClD,SAAK,MAAM,aAAa,CAAC,WAAW;AAClC,UAAI,SAAS,QAAW;AACtB,eAAO,OAAO;AACd,eAAO,OAAO;AACd,eAAO,OAAO;AAAA,MAChB,OAAO;AACL,eAAO,mBAAmB;AAC1B,eAAO,iBAAiB,KAAK,MAAM,mBAAmB,IAAI;AAC1D,eAAO,oBAAoB;AAAA,MAC7B;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;AA/B8B;AAAvB,IAAM,mBAAN;AAiCA,IAAM,wBAAN,MAAM,sBAAqB;AAAA,EAChC,YAA6B,OAAmB;AAAnB;AAAA,EAAoB;AAAA,EAEjD,QAAwB;AACtB,WAAO,KAAK,MAAM,SAAS,KAAK,MAAM,kBAAkB,EAAE,MAAM;AAAA,EAClE;AAAA,EAEA,SAAS,MAAsB,UAAsC,CAAC,GAAS;AAC7E,UAAM,aAAa,iCACd,OADc;AAAA,MAEjB,OAAO,oBAAoB,KAAK,OAAO,iCAAiC;AAAA,IAC1E;AACA,oBAAgB,UAAU;AAC1B,SAAK,MAAM;AAAA,MACT,CAAC,WAAW;AACV,eAAO,SAAS,KAAK,MAAM,WAAW,UAAU;AAChD,eAAO,YAAY;AACnB,eAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAA4B;AAC1B,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,QAAQ,OAAkC;AACxC,SAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,EAC5B;AAAA,EAEA,SAA8B;AAC5B,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,UAAU,OAAkC;AAC1C,SAAK,MAAM,EAAE,QAAQ,MAAM,CAAC;AAAA,EAC9B;AAAA,EAEA,YAAiC;AAC/B,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,aAAa,OAAkC;AAC7C,SAAK,MAAM,EAAE,WAAW,MAAM,CAAC;AAAA,EACjC;AAAA,EAEA,QAAqC;AACnC,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,SAAS,OAA0C;AACjD,UAAM,aAAa,oBAAoB,OAAO,iCAAiC;AAC/E,SAAK,MAAM,EAAE,OAAO,WAAW,GAAG,EAAE,cAAc,MAAM,CAAC;AACzD,SAAK,MAAM,yBAAyB;AAAA,MAClC,MAAM;AAAA,MACN,SAAS,KAAK,MAAM,QAAQ;AAAA,MAC5B,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,OAA2B;AACzB,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,QAAQ,MAAgC;AACtC,SAAK,MAAM,EAAE,KAAK,CAAC;AAAA,EACrB;AAAA,EAEA,OAA2B;AACzB,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,QAAQ,MAAgC;AACtC,SAAK,MAAM,EAAE,KAAK,CAAC;AAAA,EACrB;AAAA,EAEQ,MAAM,OAAgC,UAAsC,CAAC,GAAS;AAC5F,SAAK,MAAM;AAAA,MACT,CAAC,WAAW;AACV,cAAM,OAAO,kCACR,KAAK,MAAM,SAAS,OAAO,MAAM,IACjC;AAEL,wBAAgB,IAAI;AACpB,eAAO,SAAS,KAAK,MAAM,WAAW,IAAI;AAC1C,eAAO,YAAY;AACnB,eAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AA5FkC;AAA3B,IAAM,uBAAN;AA8FA,IAAM,wBAAN,MAAM,sBAAqB;AAAA,EAChC,YAA6B,OAAmB;AAAnB;AAAA,EAAoB;AAAA,EAEjD,QAAwB;AACtB,WAAO,KAAK,MAAM,SAAS,KAAK,MAAM,kBAAkB,EAAE,MAAM;AAAA,EAClE;AAAA,EAEA,SAAS,MAAsB,UAAsC,CAAC,GAAS;AA3xBjF;AA4xBI,UAAM,aAAa,iCACd,OADc;AAAA,MAEjB,cAAa,UAAK,gBAAL,YAAqB,KAAK,kBAAkB,UAAU;AAAA,MACnE,iBAAiB;AAAA,QACf,KAAK;AAAA,QACL;AAAA,MACF;AAAA,MACA,iBAAiB;AAAA,QACf,KAAK;AAAA,QACL;AAAA,MACF;AAAA,IACF;AACA,oBAAgB,UAAU;AAC1B,SAAK,MAAM;AAAA,MACT,CAAC,WAAW;AACV,eAAO,SAAS,KAAK,MAAM,WAAW,UAAU;AAChD,eAAO,YAAY;AACnB,eAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAkC;AAChC,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,eAAe,aAAuC;AACpD,SAAK,MAAM,EAAE,YAAY,CAAC;AAAA,EAC5B;AAAA,EAEA,kBAA+C;AAC7C,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,mBAAmB,OAA0C;AAC3D,UAAM,aAAa,oBAAoB,OAAO,2CAA2C;AACzF,SAAK;AAAA,MACH;AAAA,QACE,iBAAiB;AAAA,QACjB,aAAa,aAAa,UAAU,KAAK,YAAY;AAAA,MACvD;AAAA,MACA,EAAE,cAAc,MAAM;AAAA,IACxB;AACA,SAAK,MAAM,yBAAyB;AAAA,MAClC,MAAM;AAAA,MACN,SAAS,KAAK,MAAM,QAAQ;AAAA,MAC5B,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,kBAA+C;AAC7C,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,mBAAmB,OAA0C;AAC3D,SAAK,MAAM;AAAA,MACT,iBAAiB,oBAAoB,OAAO,2CAA2C;AAAA,IACzF,CAAC;AAAA,EACH;AAAA,EAEQ,MAAM,OAAgC,UAAsC,CAAC,GAAS;AAC5F,UAAM,OAAO,kCAAK,KAAK,MAAM,IAAM;AACnC,oBAAgB,IAAI;AACpB,SAAK,SAAS,MAAM,OAAO;AAAA,EAC7B;AACF;AA1EkC;AAA3B,IAAM,uBAAN;AA4EA,IAAM,0BAAN,MAAM,wBAAuB;AAAA,EAClC,YAA6B,OAAmB;AAAnB;AAAA,EAAoB;AAAA,EAEjD,QAA0B;AACxB,WAAO,KAAK,MAAM,WAAW,KAAK,MAAM,kBAAkB,EAAE,QAAQ;AAAA,EACtE;AAAA,EAEA,SAAS,QAAgC;AACvC,UAAM,aAAa,gBAAgB,QAAQ,mCAAmC;AAC9E,SAAK,MAAM;AAAA,MACT,CAAC,WAAW;AACV,eAAO,WAAW,KAAK,MAAM,aAAa,UAAU;AACpD,eAAO,cAAc;AACrB,eAAO;AAAA,MACT;AAAA,MACA,EAAE,cAAc,MAAM;AAAA,IACxB;AACA,SAAK,MAAM,yBAAyB;AAAA,MAClC,MAAM;AAAA,MACN,SAAS,KAAK,MAAM,QAAQ;AAAA,MAC5B,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ,MAAsC;AAC5C,SAAK,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,EAC3B;AAAA,EAEA,SAAS,MAAuC;AAC9C,SAAK,MAAM,EAAE,OAAO,KAAK,CAAC;AAAA,EAC5B;AAAA,EAEA,OAAO,MAAqC;AAC1C,SAAK,MAAM,EAAE,KAAK,KAAK,CAAC;AAAA,EAC1B;AAAA,EAEA,UAAU,MAAwC;AAChD,SAAK,MAAM,EAAE,QAAQ,KAAK,CAAC;AAAA,EAC7B;AAAA,EAEQ,MAAM,OAAwC;AACpD,UAAM,OAAO,kCAAK,KAAK,MAAM,IAAM;AACnC,oBAAgB,IAAI;AACpB,SAAK,SAAS,IAAI;AAAA,EACpB;AACF;AA7CoC;AAA7B,IAAM,yBAAN;AA+CP,SAAS,gBAAgB,QAA0B,SAAmC;AACpF,QAAM,aAA+B,CAAC;AACtC,aAAW,QAAQ,CAAC,QAAQ,SAAS,OAAO,UAAU,UAAU,GAAY;AAC1E,UAAM,OAAO,OAAO,IAAI;AACxB,QAAI,CAAC,KAAM;AACX,eAAW,IAAI,IAAI,iCACd,OADc;AAAA,MAEjB,OAAO,oBAAoB,KAAK,OAAO,GAAG,OAAO,IAAI,IAAI,QAAQ;AAAA,IACnE;AACA,oBAAgB,WAAW,IAAI,CAAE;AAAA,EACnC;AACA,SAAO;AACT;AAZS;AAcF,IAAM,6BAAN,MAAM,2BAA0B;AAAA,EACrC,YAA6B,OAAmB;AAAnB;AAAA,EAAoB;AAAA,EAEjD,QAAyC;AACvC,UAAM,QAAQ,KAAK,MAAM,kBAAkB,EAAE;AAC7C,WAAO,QAAQ,mBAAK,SAAU;AAAA,EAChC;AAAA,EAEA,SAAS,WAAkD;AACzD,SAAK,MAAM,aAAa,CAAC,WAAW;AAClC,UAAI,cAAc,QAAW;AAC3B,eAAO,OAAO;AACd,eAAO,OAAO;AAAA,MAChB,OAAO;AACL,eAAO,YAAY,mBAAK;AACxB,eAAO,iBAAiB;AAAA,MAC1B;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,cAAc,YAAsC;AAClD,SAAK,MAAM,EAAE,WAAW,CAAC;AAAA,EAC3B;AAAA,EAEA,YAAY,UAAoC;AAC9C,SAAK,MAAM,EAAE,SAAS,CAAC;AAAA,EACzB;AAAA,EAEA,YAAY,UAAqC;AAC/C,SAAK,MAAM,EAAE,SAAS,CAAC;AAAA,EACzB;AAAA,EAEQ,MAAM,OAA2C;AA97B3D;AA+7BI,UAAM,OAAO,mCAAM,UAAK,MAAM,MAAX,YAAgB,CAAC,IAAO;AAC3C,oBAAgB,IAAI;AACpB,SAAK,SAAS,OAAO,KAAK,IAAI,EAAE,SAAS,OAAO,MAAS;AAAA,EAC3D;AACF;AAtCuC;AAAhC,IAAM,4BAAN;AAwCP,SAAS,UAAU,SAAiC;AAClD,QAAM,QAAQ,kBAAkB,KAAK,OAAO;AAC5C,SAAO;AAAA,IACL;AAAA,IACA,KAAK,QAAQ,OAAO,MAAM,CAAC,CAAC,IAAI;AAAA,IAChC,QAAQ,QAAQ,sBAAsB,MAAM,CAAC,CAAE,IAAI;AAAA,IACnD,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF;AATS;AAWT,SAAS,sBAAsB,YAA4B;AACzD,MAAI,QAAQ;AACZ,aAAW,MAAM,WAAY,SAAQ,QAAQ,MAAM,GAAG,WAAW,CAAC,IAAI;AACtE,SAAO;AACT;AAJS;AAMT,SAAS,WAAW,MAA8B;AAChD,MAAI,KAAK,UAAU,KAAM,QAAO;AAChC,SAAO,OAAO,KAAK,KAAK;AAC1B;AAHS;AAKT,SAAS,oBAAoB,OAA8B;AACzD,QAAM,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM;AAC/D,QAAM,YAAY,iBAAiB,MAAM,KAAK;AAChD;AAHS;AAKT,SAAS,iBAAiB,OAA8B;AACtD,QAAM,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG;AAC7D;AAFS;AAIT,SAAS,oBAAsC;AAC7C,SAAO;AAAA,IACL,eAAe,CAAC;AAAA,IAChB,OAAO,CAAC,CAAC,CAAC;AAAA,IACV,OAAO,CAAC,CAAC,GAAG,EAAE,aAAa,UAAU,CAAC;AAAA,IACtC,SAAS,CAAC,CAAC,CAAC;AAAA,IACZ,aAAa,CAAC,CAAC,CAAC;AAAA,EAClB;AACF;AARS;AAUT,SAAS,iBAAiB,QAA0B,QAAsC;AACxF,QAAM,aAAa,gBAAgB,MAAM;AACzC,kBAAgB,UAAU;AAC1B,SAAO,gBAAgB,OAAO,aAAa,YAAY,eAAe;AACxE;AAJS;AAMT,SAAS,gBAAmB,OAAY,MAAS,OAAgC;AAC/E,QAAM,aAAa,MAAM,IAAI;AAC7B,kBAAgB,UAAoB;AACpC,QAAM,MAAM,gBAAgB,UAAU;AACtC,QAAM,WAAW,MAAM,UAAU,CAAC,cAAc,gBAAgB,SAAS,MAAM,GAAG;AAClF,MAAI,aAAa,GAAI,QAAO;AAC5B,QAAM,KAAK,UAAU;AACrB,SAAO,MAAM,SAAS;AACxB;AARS;AAUT,SAAS,gBAAgB,QAAoD;AAC3E,SAAO,iCACF,SADE;AAAA,IAEL,WAAW,OAAO,YAAY,mBAAK,OAAO,aAAc;AAAA,EAC1D;AACF;AALS;AAOT,SAAS,UAAU,MAAsC;AACvD,SAAO,iCAAK,OAAL,EAAW,OAAO,KAAK,QAAQ,mBAAK,KAAK,SAAU,OAAU;AACtE;AAFS;AAIT,SAAS,UAAU,MAAsC;AACvD,SAAO,iCACF,OADE;AAAA,IAEL,iBAAiB,KAAK,kBAAkB,mBAAK,KAAK,mBAAoB;AAAA,IACtE,iBAAiB,KAAK,kBAAkB,mBAAK,KAAK,mBAAoB;AAAA,EACxE;AACF;AANS;AAQT,SAAS,YAAY,QAA4C;AAC/D,SAAO;AAAA,IACL,MAAM,OAAO,OACT,iCAAK,OAAO,OAAZ,EAAkB,OAAO,OAAO,KAAK,QAAQ,mBAAK,OAAO,KAAK,SAAU,OAAU,KAClF;AAAA,IACJ,OAAO,OAAO,QACV,iCAAK,OAAO,QAAZ,EAAmB,OAAO,OAAO,MAAM,QAAQ,mBAAK,OAAO,MAAM,SAAU,OAAU,KACrF;AAAA,IACJ,KAAK,OAAO,MACR,iCAAK,OAAO,MAAZ,EAAiB,OAAO,OAAO,IAAI,QAAQ,mBAAK,OAAO,IAAI,SAAU,OAAU,KAC/E;AAAA,IACJ,QAAQ,OAAO,SACX,iCAAK,OAAO,SAAZ,EAAoB,OAAO,OAAO,OAAO,QAAQ,mBAAK,OAAO,OAAO,SAAU,OAAU,KACxF;AAAA,IACJ,UAAU,OAAO,WACb,iCACK,OAAO,WADZ;AAAA,MAEE,OAAO,OAAO,SAAS,QAAQ,mBAAK,OAAO,SAAS,SAAU;AAAA,IAChE,KACA;AAAA,EACN;AACF;AArBS;AAuBT,SAAS,gBAAgB,OAAqB;AAC5C,aAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,QAAK,MAAkC,GAAG,MAAM;AAC9C,aAAQ,MAAkC,GAAG;AAAA,EACjD;AACF;AALS;AAOT,SAAS,gBAAgB,OAAwB;AAC/C,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO,KAAK,UAAU,KAAK;AAC5E,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,IAAI,MAAM,IAAI,eAAe,EAAE,KAAK,GAAG,CAAC;AACzE,SAAO,IAAI,OAAO,KAAK,KAAgC,EACpD,KAAK,EACL;AAAA,IACC,CAAC,QAAQ,GAAG,KAAK,UAAU,GAAG,CAAC,IAAI,gBAAiB,MAAkC,GAAG,CAAC,CAAC;AAAA,EAC7F,EACC,KAAK,GAAG,CAAC;AACd;AATS;AAWT,SAAS,sBAAsB,MAAkC;AAC/D,QAAM,WAAmC;AAAA,IACvC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACA,SAAO,SAAS,IAAI;AACtB;AAXS;AAaT,SAAS,iBAAiB,OAA6C;AACrE,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,MAAI,SAAS,OAAO;AACpB,MAAI,YAAY,OAAO;AACvB,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,aAAW,QAAQ,OAAO;AACxB,aAAS,KAAK,IAAI,QAAQ,KAAK,GAAG;AAClC,gBAAY,KAAK,IAAI,WAAW,KAAK,MAAM;AAC3C,aAAS,KAAK,IAAI,QAAQ,KAAK,GAAG;AAClC,gBAAY,KAAK,IAAI,WAAW,KAAK,MAAM;AAAA,EAC7C;AACA,SAAO,mBAAmB,QAAQ,WAAW,SAAS,SAAS,GAAG,YAAY,YAAY,CAAC;AAC7F;AAbS;;;ACjjCF,IAAM,cAAN,MAAM,YAAW;AAAA,EAItB,YACmB,OACA,QACjB;AAFiB;AACA;AALnB,wBAAS;AACT,wBAAS;AAMP,SAAK,UAAU,IAAI,2BAA2B,MAAM,KAAK,MAAM,OAAO;AACtE,SAAK,QAAQ,IAAI,gBAAgB,MAAG;AA/BxC;AA+B4C,8BAAK,OAAM,UAAX,eAAW,QAAU,CAAC;AAAA,KAAE;AAAA,EAClE;AAAA,EAEA,KAAyB;AACvB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAA2B;AACzB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,cAAkC;AAChC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,QAAQ,MAAoB;AAC1B,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,eAAe,aAA2B;AACxC,SAAK,MAAM,cAAc;AAAA,EAC3B;AAAA,EAEA,eAAmC;AACjC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAAS,SAAuB;AAC9B,sBAAkB,OAAO;AACzB,SAAK,MAAM,MAAM;AACjB,QAAI,KAAK,MAAM,cAAe,MAAK,mBAAmB,OAAO;AAAA,EAC/D;AAAA,EAEA,OAAO,SAAuB;AAC5B,SAAK,SAAS,OAAO;AACrB,UAAM,QAAQ,kBAAkB,OAAO;AACvC,UAAM,UAAU,KAAK,MAAM;AAC3B,QAAI,MAAM,cAAc,QAAQ,QAAQ;AACtC,cAAQ,OAAO,MAAM,WAAW;AAAA,IAClC;AACA,WAAO,QAAQ,SAAS,MAAM,aAAa;AACzC,YAAM,KAAK,kBAAkB,OAAO;AACpC,cAAQ,KAAK,EAAE,IAAI,MAAM,SAAS,EAAE,GAAG,CAAC;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,yBAA6C;AAC3C,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,mBAAmB,SAAmC;AAjFxD;AAkFI,QAAI,YAAY,OAAW,mBAAkB,OAAO;AACpD,SAAK,MAAM,gBAAgB;AAC3B,QAAI,YAAY,QAAW;AACzB,aAAO,KAAK,MAAM;AAAA,IACpB,OAAO;AACL,uBAAK,OAAM,eAAX,eAAW,aAAe,EAAE,KAAK,SAAS,eAAe,CAAC,EAAE;AAC5D,WAAK,MAAM,WAAW,MAAM;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,iBAAqC;AACnC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,kBAAkB,OAAiC;AACjD,qCAAiC,OAAO,8BAA8B;AACtE,SAAK,MAAM,iBAAiB;AAAA,EAC9B;AAAA,EAEA,iBAAqC;AACnC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,kBAAkB,OAAiC;AACjD,qCAAiC,OAAO,8BAA8B;AACtE,SAAK,MAAM,iBAAiB;AAAA,EAC9B;AAAA,EAEA,iBAAsC;AACpC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,kBAAkB,OAAkC;AAClD,SAAK,MAAM,iBAAiB;AAAA,EAC9B;AAAA,EAEA,aAAoD;AAClD,WAAO,KAAK,MAAM,aAAa,gBAAgB,KAAK,MAAM,UAAU,IAAI;AAAA,EAC1E;AAAA,EAEA,cAAc,OAAoD;AAChE,QAAI,CAAC,OAAO;AACV,aAAO,KAAK,MAAM;AAClB,aAAO,KAAK,MAAM;AAClB;AAAA,IACF;AACA,UAAM,OAAO,gBAAgB,KAAK;AAClC,QAAI,KAAK,IAAK,mBAAkB,KAAK,GAAG;AACxC,SAAK,MAAM,aAAa;AACxB,SAAK,MAAM,gBAAgB,KAAK;AAAA,EAClC;AAAA,EAEA,YAAkD;AAtIpD;AAuII,aAAO,UAAK,MAAM,eAAX,mBAAuB,aAAY,eAAe,KAAK,MAAM,WAAW,SAAS,IAAI;AAAA,EAC9F;AAAA,EAEA,aAAa,WAAuD;AA1ItE;AA2II,QAAI,CAAC,WAAW;AACd,UAAI,KAAK,MAAM,WAAY,QAAO,KAAK,MAAM,WAAW;AACxD;AAAA,IACF;AACA,qBAAK,OAAM,eAAX,eAAW,aAAe,EAAE,MAAK,UAAK,MAAM,kBAAX,YAA4B,KAAK,MAAM,KAAK,eAAe,CAAC,EAAE;AAC/F,SAAK,MAAM,WAAW,YAAY,eAAe,SAAS;AAAA,EAC5D;AAAA,EAEA,UAA2B;AACzB,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAAA,EAEA,SAAe;AAvJjB;AAwJI,eAAK,WAAL;AAAA,EACF;AACF;AApIwB;AAAjB,IAAM,aAAN;AAsIA,IAAM,oBAAN,MAAM,kBAAiB;AAAA,EAC5B,YACmB,OACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,KAAa;AACX,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAAe;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,QAAQ,MAAoB;AAC1B,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,iBAAqC;AACnC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,kBAAkB,OAAiC;AACjD,SAAK,MAAM,iBAAiB;AAAA,EAC9B;AAAA,EAEA,oBAAwC;AACtC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,qBAAqB,IAA8B;AACjD,SAAK,MAAM,oBAAoB;AAAA,EACjC;AAAA,EAEA,UAAiC;AAC/B,WAAO,mBAAK,KAAK;AAAA,EACnB;AAAA,EAEA,SAAe;AAlMjB;AAmMI,eAAK,WAAL;AAAA,EACF;AACF;AAzC8B;AAAvB,IAAM,mBAAN;AA2CA,IAAM,8BAAN,MAAM,4BAA2B;AAAA,EACtC,YAA6B,WAA0C;AAA1C;AAAA,EAA2C;AAAA,EAExE,QAA4B;AAC1B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,QAAQ,UAA6C;AACnD,UAAM,OAAO,KAAK,oBAAoB,QAAQ;AAC9C,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,iDAAiD,QAAQ,EAAE;AACtF,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,UAAoD;AACtE,UAAM,QAAQ,KAAK,UAAU,EAAE,KAAK,CAAC,WAAW,OAAO,SAAS,YAAY,OAAO,OAAO,QAAQ;AAClG,WAAO,QAAQ,KAAK,KAAK,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,IAAI,OAAgD;AAzNtD;AA0NI,UAAM,SAAS,KAAK,UAAU;AAC9B,QAAI,OAAO,KAAK,CAAC,WAAW,OAAO,SAAS,MAAM,QAAQ,OAAO,OAAO,MAAM,EAAE,GAAG;AACjF,YAAM,IAAI,MAAM,iDAAiD,MAAM,QAAQ,MAAM,EAAE,EAAE;AAAA,IAC3F;AACA,UAAM,OAAO,iCAAK,QAAL,EAAY,KAAI,WAAM,OAAN,YAAY,kBAAkB,MAAM,EAAE;AACnE,SAAK,UAAU,EAAE,KAAK,IAAI;AAC1B,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAAA,EAEA,OAAO,UAAiC;AACtC,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,QAAQ,OAAO,UAAU,CAAC,WAAW,OAAO,SAAS,YAAY,OAAO,OAAO,QAAQ;AAC7F,QAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,EACxC;AAAA,EAEA,WAAW,UAAiC;AAC1C,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,QAAQ,OAAO,UAAU,CAAC,WAAW,OAAO,SAAS,YAAY,OAAO,OAAO,QAAQ;AAC7F,QAAI,UAAU,GAAI,OAAM,IAAI,MAAM,iDAAiD,QAAQ,EAAE;AAC7F,WAAO,OAAO,OAAO,CAAC;AAAA,EACxB;AAAA,EAEA,UAAmC;AACjC,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,WAAY,mBAAK,OAAS;AAAA,EACzD;AAAA,EAEQ,KAAK,OAAgD;AAC3D,WAAO,IAAI,iBAAiB,OAAO,MAAM;AACvC,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,UAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AApDwC;AAAjC,IAAM,6BAAN;AAsDA,IAAM,mBAAN,MAAM,iBAAgB;AAAA,EAC3B,YAA6B,UAAsC;AAAtC;AAAA,EAAuC;AAAA,EAEpE,OAA2B;AACzB,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEA,QAAQ,MAAgC;AACtC,SAAK,SAAS,EAAE,OAAO;AAAA,EACzB;AAAA,EAEA,kBAAuC;AACrC,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEA,mBAAmB,OAAkC;AACnD,SAAK,SAAS,EAAE,kBAAkB;AAAA,EACpC;AAAA,EAEA,iBAAsC;AACpC,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEA,kBAAkB,OAAkC;AAClD,SAAK,SAAS,EAAE,iBAAiB;AAAA,EACnC;AAAA,EAEA,iBAAsC;AACpC,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEA,kBAAkB,OAAkC;AAClD,SAAK,SAAS,EAAE,iBAAiB;AAAA,EACnC;AAAA,EAEA,oBAAyC;AACvC,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEA,qBAAqB,OAAkC;AACrD,SAAK,SAAS,EAAE,oBAAoB;AAAA,EACtC;AAAA,EAEA,UAAgC;AAC9B,WAAO,mBAAK,KAAK,SAAS;AAAA,EAC5B;AACF;AA9C6B;AAAtB,IAAM,kBAAN;AAgDA,IAAM,wBAAN,MAAM,sBAAqB;AAAA,EAChC,YAA6B,WAAoC;AAApC;AAAA,EAAqC;AAAA,EAElE,QAAsB;AACpB,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,QAAQ,mBAAuC;AAC7C,UAAM,OAAO,KAAK,oBAAoB,iBAAiB;AACvD,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,0CAA0C,iBAAiB,EAAE;AACxF,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,mBAA8C;AA1TpE;AA2TI,UAAM,SACJ,UAAK,UAAU,EAAE,KAAK,CAAC,UAAU,MAAM,SAAS,qBAAqB,MAAM,gBAAgB,iBAAiB,MAA5G,YACA;AACF,WAAO,QAAQ,KAAK,KAAK,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,IAAI,OAAoC;AACtC,UAAM,OAAO,WAAW,KAAK;AAC7B,SAAK,UAAU,EAAE,KAAK,IAAI;AAC1B,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAAA,EAEA,OAAO,mBAAiC;AACtC,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,QAAQ,OAAO,UAAU,CAAC,UAAU,MAAM,SAAS,qBAAqB,MAAM,gBAAgB,iBAAiB;AACrH,QAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,EACxC;AAAA,EAEA,UAA6B;AAC3B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,WAAW,KAAK,CAAC;AAAA,EAC1D;AAAA,EAEQ,KAAK,OAAoC;AAC/C,WAAO,IAAI,WAAW,OAAO,MAAM;AACjC,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,UAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AA3CkC;AAA3B,IAAM,uBAAN;AA6CA,IAAM,kBAAN,MAAM,gBAAe;AAAA,EAC1B,YACmB,OACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,MAAc;AACZ,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAAO,KAAmB;AACxB,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEA,SAA6B;AAC3B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,aAAiC;AAC/B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,UAA8B;AAC5B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,WAAW,SAAmC;AAC5C,SAAK,MAAM,UAAU;AAAA,EACvB;AAAA,EAEA,YAAY,UAAoC;AAC9C,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,UAA+B;AAC7B,WAAO,mBAAK,KAAK;AAAA,EACnB;AAAA,EAEA,SAAe;AAhYjB;AAiYI,eAAK,WAAL;AAAA,EACF;AACF;AAzC4B;AAArB,IAAM,iBAAN;AA2CA,IAAM,4BAAN,MAAM,0BAAyB;AAAA,EACpC,YAA6B,WAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,QAA0B;AACxB,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,IAAI,OAA4C;AAC9C,UAAM,OAAO,mBAAK;AAClB,SAAK,UAAU,EAAE,KAAK,IAAI;AAC1B,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAAA,EAEA,QAAQ,KAA6B;AACnC,UAAM,OAAO,KAAK,oBAAoB,GAAG;AACzC,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,wBAAwB,GAAG,EAAE;AACxD,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,KAAoC;AACtD,UAAM,QAAQ,KAAK,UAAU,EAAE,KAAK,CAAC,SAAS,KAAK,QAAQ,GAAG;AAC9D,WAAO,QAAQ,KAAK,KAAK,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,OAAO,KAAmB;AA7Z5B;AA8ZI,UAAM,SAAS,KAAK,UAAU;AAC9B,aAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,YAAI,YAAO,CAAC,MAAR,mBAAW,SAAQ,IAAK,QAAO,OAAO,GAAG,CAAC;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,UAAiC;AAC/B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAW,mBAAK,MAAQ;AAAA,EACvD;AAAA,EAEQ,KAAK,OAA4C;AACvD,WAAO,IAAI,eAAe,OAAO,MAAM;AACrC,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,UAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AA1CsC;AAA/B,IAAM,2BAAN;AA4CA,IAAM,uBAAN,MAAM,qBAAoB;AAAA,EAC/B,YACmB,OACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,eAAmC;AACjC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAAS,SAAuB;AAC9B,SAAK,MAAM,QAAQ;AAAA,EACrB;AAAA,EAEA,OAA2B;AACzB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,QAAQ,MAAgC;AACtC,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,WAA+B;AAC7B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,YAAY,UAAoC;AAC9C,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,aAAkC;AAChC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,cAAc,OAAkC;AAC9C,SAAK,MAAM,aAAa;AAAA,EAC1B;AAAA,EAEA,eAAoC;AAClC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,gBAAgB,OAAkC;AAChD,SAAK,MAAM,eAAe;AAAA,EAC5B;AAAA,EAEA,mBAAwC;AACtC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,oBAAoB,OAAkC;AACpD,SAAK,MAAM,mBAAmB;AAAA,EAChC;AAAA,EAEA,mBAAwC;AACtC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,oBAAoB,OAAkC;AACpD,SAAK,MAAM,mBAAmB;AAAA,EAChC;AAAA,EAEA,aAAiC;AAC/B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,cAAc,OAAiC;AAC7C,SAAK,MAAM,aAAa;AAAA,EAC1B;AAAA,EAEA,aAAiC;AAC/B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,QAA4B;AAC1B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAAS,OAA2B,SAAmC;AACrE,SAAK,MAAM,aAAa;AACxB,SAAK,MAAM,QAAQ;AAAA,EACrB;AAAA,EAEA,cAAkC;AAChC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAA6B;AAC3B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,UAAU,OAA2B,SAAmC;AACtE,SAAK,MAAM,cAAc;AACzB,SAAK,MAAM,SAAS;AAAA,EACtB;AAAA,EAEA,WAA+B;AAC7B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,YAAY,SAAmC;AAC7C,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,WAA+B;AAC7B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,YAAY,SAAmC;AAC7C,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,UAAoC;AAClC,WAAO,mBAAK,KAAK;AAAA,EACnB;AAAA,EAEA,SAAe;AAriBjB;AAsiBI,eAAK,WAAL;AAAA,EACF;AACF;AAvHiC;AAA1B,IAAM,sBAAN;AAyHA,IAAM,iCAAN,MAAM,+BAA8B;AAAA,EACzC,YAA6B,WAA6C;AAA7C;AAAA,EAA8C;AAAA,EAE3E,QAA+B;AAC7B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,IAAI,OAAsD;AACxD,UAAM,OAAO,mBAAK;AAClB,SAAK,UAAU,EAAE,KAAK,IAAI;AAC1B,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAAA,EAEA,QAAQ,cAA2C;AACjD,UAAM,OAAO,KAAK,oBAAoB,YAAY;AAClD,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,8BAA8B,YAAY,EAAE;AACvE,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,cAAkD;AACpE,UAAM,QAAQ,KAAK,UAAU,EAAE,KAAK,CAAC,eAAe,WAAW,UAAU,YAAY;AACrF,WAAO,QAAQ,KAAK,KAAK,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,OAAO,cAA4B;AAlkBrC;AAmkBI,UAAM,SAAS,KAAK,UAAU;AAC9B,aAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,YAAI,YAAO,CAAC,MAAR,mBAAW,WAAU,aAAc,QAAO,OAAO,GAAG,CAAC;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,UAAsC;AACpC,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAW,mBAAK,MAAQ;AAAA,EACvD;AAAA,EAEQ,KAAK,OAAsD;AACjE,WAAO,IAAI,oBAAoB,OAAO,MAAM;AAC1C,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,UAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AA1C2C;AAApC,IAAM,gCAAN;AA4CA,IAAM,0BAAN,MAAM,wBAAuB;AAAA,EAGlC,YACmB,OACA,QACjB;AAFiB;AACA;AAJnB,wBAAS;AAMP,SAAK,QAAQ,IAAI,qCAAqC,MAAM,KAAK,MAAM,KAAK;AAAA,EAC9E;AAAA,EAEA,eAAmC;AACjC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAAS,SAAuB;AAC9B,SAAK,MAAM,QAAQ;AAAA,EACrB;AAAA,EAEA,UAAuC;AACrC,WAAO,uBAAuB,KAAK,KAAK;AAAA,EAC1C;AAAA,EAEA,SAAe;AA5mBjB;AA6mBI,eAAK,WAAL;AAAA,EACF;AACF;AAzBoC;AAA7B,IAAM,yBAAN;AA2BA,IAAM,8BAAN,MAAM,4BAA2B;AAAA,EACtC,YACmB,OACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,OAA2B;AACzB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,QAAQ,MAAgC;AACtC,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,WAA+B;AAC7B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,YAAY,UAAoC;AAC9C,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,WAA+B;AAC7B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,YAAY,UAAoC;AAC9C,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,aAAkC;AAChC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,cAAc,OAAkC;AAC9C,SAAK,MAAM,aAAa;AAAA,EAC1B;AAAA,EAEA,WAAqB;AACnB,WAAO,CAAC,GAAG,KAAK,MAAM,QAAQ;AAAA,EAChC;AAAA,EAEA,WAAW,OAAe,SAAuB;AAC/C,SAAK,MAAM,SAAS,KAAK,IAAI;AAAA,EAC/B;AAAA,EAEA,WAAW,SAAuB;AAChC,SAAK,MAAM,SAAS,KAAK,OAAO;AAAA,EAClC;AAAA,EAEA,cAAc,OAAqB;AACjC,SAAK,MAAM,SAAS,OAAO,OAAO,CAAC;AAAA,EACrC;AAAA,EAEA,UAA2C;AACzC,WAAO,iCAAK,KAAK,QAAV,EAAiB,UAAU,CAAC,GAAG,KAAK,MAAM,QAAQ,EAAE;AAAA,EAC7D;AAAA,EAEA,SAAe;AA3qBjB;AA4qBI,eAAK,WAAL;AAAA,EACF;AACF;AA7DwC;AAAjC,IAAM,6BAAN;AA+DA,IAAM,wCAAN,MAAM,sCAAqC;AAAA,EAChD,YAA6B,WAAoD;AAApD;AAAA,EAAqD;AAAA,EAElF,QAAsC;AACpC,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,QAAQ,OAA2C;AACjD,UAAM,OAAO,KAAK,oBAAoB,KAAK;AAC3C,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,sCAAsC,KAAK,EAAE;AACxE,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,OAAkD;AACpE,UAAM,QAAQ,KAAK,UAAU,EAAE,KAAK;AACpC,WAAO,QAAQ,KAAK,KAAK,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,IAAI,OAAoE;AACtE,UAAM,OAAO,iCAAK,QAAL,EAAY,UAAU,CAAC,GAAG,MAAM,QAAQ,EAAE;AACvD,SAAK,UAAU,EAAE,KAAK,IAAI;AAC1B,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAAA,EAEA,OAAO,OAAqB;AAC1B,SAAK,UAAU,EAAE,OAAO,OAAO,CAAC;AAAA,EAClC;AAAA,EAEA,UAA6C;AAC3C,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAW,iCAAK,QAAL,EAAY,UAAU,CAAC,GAAG,MAAM,QAAQ,EAAE,EAAE;AAAA,EACtF;AAAA,EAEQ,KAAK,OAAoE;AAC/E,WAAO,IAAI,2BAA2B,OAAO,MAAM;AACjD,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,UAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AAvCkD;AAA3C,IAAM,uCAAN;AAyCA,IAAM,oCAAN,MAAM,kCAAiC;AAAA,EAC5C,YAA6B,WAAgD;AAAhD;AAAA,EAAiD;AAAA,EAE9E,QAAkC;AAChC,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,IAAI,OAA4D;AAC9D,UAAM,OAAO,uBAAuB,KAAK;AACzC,SAAK,UAAU,EAAE,KAAK,IAAI;AAC1B,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAAA,EAEA,QAAQ,cAA8C;AACpD,UAAM,OAAO,KAAK,oBAAoB,YAAY;AAClD,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,iCAAiC,YAAY,EAAE;AAC1E,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,cAAqD;AACvE,UAAM,QAAQ,KAAK,UAAU,EAAE,KAAK,CAAC,WAAW,OAAO,UAAU,YAAY;AAC7E,WAAO,QAAQ,KAAK,KAAK,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,OAAO,cAA4B;AAjvBrC;AAkvBI,UAAM,SAAS,KAAK,UAAU;AAC9B,aAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,YAAI,YAAO,CAAC,MAAR,mBAAW,WAAU,aAAc,QAAO,OAAO,GAAG,CAAC;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,UAAyC;AACvC,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,uBAAuB,KAAK,CAAC;AAAA,EACtE;AAAA,EAEQ,KAAK,OAA4D;AACvE,WAAO,IAAI,uBAAuB,OAAO,MAAM;AAC7C,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,UAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AA1C8C;AAAvC,IAAM,mCAAN;AA4CA,IAAM,gBAAN,MAAM,cAAa;AAAA,EACxB,YACmB,OACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,MAAc;AACZ,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAAO,KAAmB;AACxB,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEA,OAAe;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,QAAQ,MAAoB;AAC1B,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,UAA6B;AAC3B,WAAO,mBAAK,KAAK;AAAA,EACnB;AAAA,EAEA,SAAe;AA/xBjB;AAgyBI,eAAK,WAAL;AAAA,EACF;AACF;AA7B0B;AAAnB,IAAM,eAAN;AA+BA,IAAM,0BAAN,MAAM,wBAAuB;AAAA,EAClC,YAA6B,WAAsC;AAAtC;AAAA,EAAuC;AAAA,EAEpE,QAAwB;AACtB,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,IAAI,OAAwC;AAC1C,UAAM,OAAO,mBAAK;AAClB,SAAK,UAAU,EAAE,KAAK,IAAI;AAC1B,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAAA,EAEA,QAAQ,KAA2B;AACjC,UAAM,OAAO,KAAK,oBAAoB,GAAG;AACzC,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,sBAAsB,GAAG,EAAE;AACtD,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,KAAkC;AACpD,UAAM,QAAQ,KAAK,UAAU,EAAE,KAAK,CAAC,YAAY,QAAQ,QAAQ,GAAG;AACpE,WAAO,QAAQ,KAAK,KAAK,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,OAAO,KAAmB;AA5zB5B;AA6zBI,UAAM,SAAS,KAAK,UAAU;AAC9B,aAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,YAAI,YAAO,CAAC,MAAR,mBAAW,SAAQ,IAAK,QAAO,OAAO,GAAG,CAAC;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,UAA+B;AAC7B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAW,mBAAK,MAAQ;AAAA,EACvD;AAAA,EAEQ,KAAK,OAAwC;AACnD,WAAO,IAAI,aAAa,OAAO,MAAM;AACnC,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,UAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AA1CoC;AAA7B,IAAM,yBAAN;AA4CA,IAAM,wBAAN,MAAM,sBAAqB;AAAA,EAChC,YACmB,OACA,YACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,MAAc;AACZ,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAAO,KAAmB;AACxB,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEA,OAAe;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,QAAQ,MAAoB;AAC1B,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,SAAe;AAt2BjB;AAu2BI,eAAK,eAAL;AAAA,EACF;AAAA,EAEA,UAAqC;AACnC,WAAO,mBAAK,KAAK;AAAA,EACnB;AACF;AA7BkC;AAA3B,IAAM,uBAAN;AA+BA,IAAM,kCAAN,MAAM,gCAA+B;AAAA,EAC1C,YAA6B,WAA8C;AAA9C;AAAA,EAA+C;AAAA,EAE5E,QAAgC;AAC9B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,QAAQ,KAAmC;AACzC,UAAM,OAAO,KAAK,oBAAoB,GAAG;AACzC,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,+BAA+B,GAAG,EAAE;AAC/D,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,KAA0C;AAC5D,UAAM,QAAQ,KAAK,UAAU,EAAE,KAAK,CAAC,YAAY,QAAQ,QAAQ,GAAG;AACpE,WAAO,QAAQ,KAAK,KAAK,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,OAAO,KAAmB;AACxB,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,QAAQ,OAAO,UAAU,CAAC,YAAY,QAAQ,QAAQ,GAAG;AAC/D,QAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,EACxC;AAAA,EAEA,UAAuC;AACrC,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAW,mBAAK,MAAQ;AAAA,EACvD;AAAA,EAEQ,KAAK,OAAwD;AACnE,WAAO,IAAI,qBAAqB,OAAO,MAAM;AAC3C,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,UAAI,SAAS,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AAnC4C;AAArC,IAAM,iCAAN;AAqCA,IAAM,0BAAN,MAAM,wBAAuB;AAAA,EAClC,YAA6B,WAAsC;AAAtC;AAAA,EAAuC;AAAA,EAEpE,QAAwB;AACtB,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,aAAa,KAAK,CAAC;AAAA,EAChE;AAAA,EAEA,UAA+B;AAC7B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,YAAa,iCACrC,UADqC;AAAA,MAExC,SAAS,QAAQ,QAAQ,IAAI,CAAC,WAAY,iCACrC,SADqC;AAAA,QAExC,MAAM,OAAO,OAAO,mBAAK,OAAO,QAAS;AAAA,QACzC,IAAI,OAAO,KAAK,mBAAK,OAAO,MAAO;AAAA,QACnC,QAAQ,OAAO,SAAS,mBAAK,OAAO,UAAW;AAAA,MACjD,EAAE;AAAA,IACJ,EAAE;AAAA,EACJ;AACF;AAlBoC;AAA7B,IAAM,yBAAN;AAoBA,IAAM,gBAAN,MAAM,cAAa;AAAA,EAGxB,YAA6B,OAA0B;AAA1B;AAF7B,wBAAS;AAGP,SAAK,UAAU,IAAI,6BAA6B,MAAM,KAAK,MAAM,OAAO;AAAA,EAC1E;AAAA,EAEA,iBAAqC;AACnC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAA2B;AACzB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,UAA6B;AAC3B,WAAO,aAAa,KAAK,KAAK;AAAA,EAChC;AACF;AAlB0B;AAAnB,IAAM,eAAN;AAoBA,IAAM,gCAAN,MAAM,8BAA6B;AAAA,EACxC,YAA6B,WAA4C;AAA5C;AAAA,EAA6C;AAAA,EAE1E,QAA8B;AAC5B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,mBAAmB,KAAK,CAAC;AAAA,EACtE;AAAA,EAEA,QAAQ,OAAmC;AACzC,UAAM,OAAO,KAAK,oBAAoB,KAAK;AAC3C,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,6BAA6B,KAAK,EAAE;AAC/D,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,OAA0C;AAC5D,UAAM,QAAQ,KAAK,UAAU,EAAE,KAAK;AACpC,WAAO,QAAQ,IAAI,mBAAmB,KAAK,IAAI;AAAA,EACjD;AAAA,EAEA,UAAqC;AACnC,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,WAAW,mBAAmB,MAAM,CAAC;AAAA,EACpE;AACF;AArB0C;AAAnC,IAAM,+BAAN;AAuBA,IAAM,sBAAN,MAAM,oBAAmB;AAAA,EAI9B,YAA6B,OAAgC;AAAhC;AAH7B,wBAAS;AACT,wBAAS;AAGP,SAAK,OAAO,IAAI,mBAAmB,MAAG;AAx9B1C;AAw9B8C,8BAAK,OAAM,SAAX,eAAW,OAAS,CAAC;AAAA,KAAE;AACjE,SAAK,KAAK,IAAI,mBAAmB,MAAG;AAz9BxC;AAy9B4C,8BAAK,OAAM,OAAX,eAAW,KAAO,CAAC;AAAA,KAAE;AAAA,EAC/D;AAAA,EAEA,OAAwC;AACtC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAAwD;AACtD,WAAO,KAAK,MAAM,SAAS,mBAAK,KAAK,MAAM,UAAW;AAAA,EACxD;AAAA,EAEA,UAAmC;AACjC,WAAO,mBAAmB,KAAK,KAAK;AAAA,EACtC;AACF;AApBgC;AAAzB,IAAM,qBAAN;AAsBA,IAAM,sBAAN,MAAM,oBAAmB;AAAA,EAC9B,YAA6B,UAAyC;AAAzC;AAAA,EAA0C;AAAA,EAEvE,MAA0B;AACxB,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEA,OAAO,KAA+B;AACpC,SAAK,SAAS,EAAE,MAAM;AAAA,EACxB;AAAA,EAEA,SAA6B;AAC3B,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEA,UAAU,QAAkC;AAC1C,SAAK,SAAS,EAAE,SAAS;AAAA,EAC3B;AAAA,EAEA,YAAgC;AAC9B,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEA,aAAa,QAAkC;AAC7C,SAAK,SAAS,EAAE,YAAY;AAAA,EAC9B;AAAA,EAEA,eAAmC;AACjC,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEA,gBAAgB,QAAkC;AAChD,SAAK,SAAS,EAAE,eAAe;AAAA,EACjC;AAAA,EAEA,UAAmC;AACjC,WAAO,mBAAK,KAAK,SAAS;AAAA,EAC5B;AACF;AAtCgC;AAAzB,IAAM,qBAAN;AAwCA,IAAM,wBAAN,MAAM,sBAAqB;AAAA,EAChC,YACmB,WACA,aACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,QAAsB;AACpB,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,WAAW,KAAK,CAAC;AAAA,EAC9D;AAAA,EAEA,IAAI,SAA2C;AA3hCjD;AA4hCI,4BAAwB,OAAO;AAC/B,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,QAAyB;AAAA,MAC7B,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,MACf,eAAe,QAAQ;AAAA,MACvB,QAAQ,QAAQ,OAAO,IAAI,CAAC,WAAY,mBAAK,OAAS;AAAA,MACtD,UAAU;AAAA,QACR,MAAM,mBAAK,QAAQ,SAAS;AAAA,QAC5B,IAAI,mBAAK,QAAQ,SAAS;AAAA,MAC5B;AAAA,MACA,aAAa,iBAAiB,OAAO;AAAA,IACvC;AACA,WAAO,KAAK,KAAK;AACjB,UAAM,YAAW,UAAK,gBAAL;AACjB,QAAI,UAAU;AACZ,YAAM,WAAU,cAAS,CAAC,MAAV,YAAe,EAAE,SAAS,CAAC,EAAE;AAC7C,UAAI,CAAC,SAAS,CAAC,EAAG,UAAS,KAAK,OAAO;AACvC,cAAQ,QAAQ,KAAK;AAAA,QACnB,MAAM;AAAA,QACN,MAAM,mBAAK,QAAQ,SAAS;AAAA,QAC5B,IAAI,mBAAK,QAAQ,SAAS;AAAA,QAC1B,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,MAAM,QAAQ;AAAA,QAChB;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,IAAI,WAAW,KAAK;AAAA,EAC7B;AAAA,EAEA,UAA6B;AAC3B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAO;AA5jCxC;AA4jC4C,8CACnC,QADmC;AAAA,QAEtC,SAAQ,WAAM,WAAN,mBAAc,IAAI,CAAC,WAAY,mBAAK;AAAA,QAC5C,UAAU,MAAM,WACZ,EAAE,MAAM,mBAAK,MAAM,SAAS,OAAQ,IAAI,mBAAK,MAAM,SAAS,IAAK,IACjE;AAAA,QACJ,aAAa,CAAC,GAAG,MAAM,WAAW;AAAA,MACpC;AAAA,KAAE;AAAA,EACJ;AACF;AApDkC;AAA3B,IAAM,uBAAN;AAsDP,SAAS,iBAAiB,SAAyC;AACjE,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,GAAG,QAAQ,OAAO;AAAA,MAAQ,CAAC,WAAQ;AA1kCvC;AA2kCM,6BAAO,SAAP,mBAAa,SAAS,WAAQ,YAAO,SAAP,mBAAa,SAAS,QAChD,CAAC,OAAO,MAAM,OAAO,MAAM,IAC3B,CAAC,OAAO,MAAM;AAAA;AAAA,IACpB;AAAA,EACF;AACF;AATS;AAWT,SAAS,wBAAwB,SAAqC;AACpE,MAAI,CAAC,QAAQ,KAAM,OAAM,IAAI,MAAM,kDAAkD;AACrF,MAAI,CAAC,QAAQ,cAAe,OAAM,IAAI,MAAM,qDAAqD;AACjG,MAAI,CAAC,QAAQ,OAAO,OAAQ,OAAM,IAAI,MAAM,2DAA2D;AACvG,OAAK,QAAQ,SAAS,SAAS,QAAQ,SAAS,eAAe,QAAQ,OAAO,WAAW,GAAG;AAC1F,UAAM,IAAI,MAAM,6BAA6B,QAAQ,IAAI,oCAAoC;AAAA,EAC/F;AACA,aAAW,UAAU,QAAQ,QAAQ;AACnC,QAAI,CAAC,OAAO,OAAQ,OAAM,IAAI,MAAM,2DAA2D;AAAA,EACjG;AACF;AAVS;AAYF,IAAM,cAAN,MAAM,YAAW;AAAA,EAGtB,YAA6B,OAAwB;AAAxB;AAF7B,wBAAS;AAGP,SAAK,cAAc,IAAI,0BAA0B,MAAM,KAAK,MAAM,WAAW;AAAA,EAC/E;AAAA,EAEA,iBAAqC;AACnC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,cAAkC;AAChC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAA2B;AACzB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,QAA4B;AAC1B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAAS,OAAiC;AACxC,SAAK,MAAM,QAAQ;AAAA,EACrB;AAAA,EAEA,UAA2B;AACzB,WAAO,iCAAK,KAAK,QAAV,EAAiB,aAAa,CAAC,GAAG,KAAK,MAAM,WAAW,EAAE;AAAA,EACnE;AACF;AA9BwB;AAAjB,IAAM,aAAN;AAgCA,IAAM,6BAAN,MAAM,2BAA0B;AAAA,EACrC,YAA6B,WAA2B;AAA3B;AAAA,EAA4B;AAAA,EAEzD,QAAkB;AAChB,WAAO,CAAC,GAAG,KAAK,UAAU,CAAC;AAAA,EAC7B;AAAA,EAEA,QAAQ,OAAmC;AACzC,WAAO,KAAK,UAAU,EAAE,KAAK;AAAA,EAC/B;AAAA,EAEA,QAAQ,OAAe,YAA0B;AAC/C,SAAK,UAAU,EAAE,KAAK,IAAI;AAAA,EAC5B;AAAA,EAEA,IAAI,YAA0B;AAC5B,SAAK,UAAU,EAAE,KAAK,UAAU;AAAA,EAClC;AAAA,EAEA,OAAO,OAAqB;AAC1B,SAAK,UAAU,EAAE,OAAO,OAAO,CAAC;AAAA,EAClC;AAAA,EAEA,UAAoB;AAClB,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;AA1BuC;AAAhC,IAAM,4BAAN;AA4BA,IAAM,wBAAN,MAAM,sBAAqB;AAAA,EAChC,YAA6B,WAAoC;AAApC;AAAA,EAAqC;AAAA,EAElE,QAAsB;AACpB,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,WAAW,KAAK,CAAC;AAAA,EAC9D;AAAA,EAEA,UAA6B;AAC3B,WAAO,KAAK,UAAU,EAAE,IAAI,CAAC,UAAW,mBAAK,MAAQ;AAAA,EACvD;AACF;AAVkC;AAA3B,IAAM,uBAAN;AAYA,IAAM,cAAN,MAAM,YAAW;AAAA,EACtB,YAA6B,OAAwB;AAAxB;AAAA,EAAyB;AAAA,EAEtD,iBAAqC;AACnC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,cAAkC;AAChC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAA2B;AACzB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,aAAiC;AAC/B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAA2B;AACzB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,UAA2B;AACzB,WAAO,mBAAK,KAAK;AAAA,EACnB;AACF;AA1BwB;AAAjB,IAAM,aAAN;AA4BA,IAAM,wBAAN,MAAM,sBAAqB;AAAA,EAChC,YAA6B,aAAwC;AAAxC;AAAA,EAAyC;AAAA,EAEtE,QAAsB;AACpB,WAAO,KAAK,gBAAgB,EAAE,IAAI,CAAC,UAAU,IAAI,WAAW,KAAK,CAAC;AAAA,EACpE;AAAA,EAEA,QAAQ,MAA0B;AAChC,UAAM,OAAO,KAAK,oBAAoB,IAAI;AAC1C,QAAI,CAAC,KAAM,OAAM,IAAI,MAAM,oBAAoB,IAAI,EAAE;AACrD,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,MAAiC;AACnD,UAAM,QAAQ,KAAK,gBAAgB,EAAE,KAAK,CAAC,SAAM;AAhtCrD;AAgtCwD,yBAAK,OAAO,WAAZ,mBAAoB,UAAS;AAAA,KAAI;AACrF,WAAO,QAAQ,IAAI,WAAW,KAAK,IAAI;AAAA,EACzC;AAAA,EAEA,UAA6B;AAC3B,WAAO,KAAK,gBAAgB,EAAE,IAAI,CAAC,UAAO;AArtC9C;AAqtCkD;AAAA,QAC5C,aAAa,MAAM,QAAQ;AAAA,QAC3B,OAAM,WAAM,OAAO,WAAb,mBAAqB;AAAA,QAC3B,QAAQ,mBAAmB,MAAM,MAAM;AAAA,MACzC;AAAA,KAAE;AAAA,EACJ;AAAA,EAEQ,kBAAqC;AAC3C,WAAO,KAAK,YAAY,EAAE;AAAA,MAAQ,CAAC,YACjC,QAAQ,QACL,OAAO,CAAC,WAAQ;AA/tCzB;AA+tC4B,6BAAO,WAAP,mBAAe,UAAS;AAAA,OAAO,EAClD,IAAI,CAAC,YAAY,EAAE,SAAS,OAAO,EAAE;AAAA,IAC1C;AAAA,EACF;AACF;AAjCkC;AAA3B,IAAM,uBAAN;AAmCA,IAAM,cAAN,MAAM,YAAW;AAAA,EAGtB,YAA6B,OAAwB;AAAxB;AAF7B,wBAAS;AAGP,SAAK,SAAS,IAAI,mBAAmB,MAAM,MAAM;AAAA,EACnD;AAAA,EAEA,cAAkC;AAChC,WAAO,KAAK,MAAM,QAAQ;AAAA,EAC5B;AAAA,EAEA,OAA2B;AAhvC7B;AAivCI,YAAO,UAAK,MAAM,OAAO,WAAlB,mBAA0B;AAAA,EACnC;AAAA,EAEA,QAAQ,MAAgC;AApvC1C;AAqvCI,qBAAK,MAAM,QAAO,WAAlB,eAAkB,SAAW,EAAE,MAAM,QAAQ;AAC7C,SAAK,MAAM,OAAO,OAAO,OAAO;AAAA,EAClC;AAAA,EAEA,UAA2B;AAzvC7B;AA0vCI,WAAO;AAAA,MACL,aAAa,KAAK,MAAM,QAAQ;AAAA,MAChC,OAAM,UAAK,MAAM,OAAO,WAAlB,mBAA0B;AAAA,MAChC,QAAQ,mBAAmB,KAAK,MAAM,MAAM;AAAA,IAC9C;AAAA,EACF;AACF;AA3BwB;AAAjB,IAAM,aAAN;AAkCP,SAAS,WAAW,OAAyC;AAC3D,SAAO,iCACF,QADE;AAAA,IAEL,SAAS,MAAM,QAAQ,IAAI,CAAC,WAAY,mBAAK,OAAS;AAAA,IACtD,YAAY,MAAM,aAAa,gBAAgB,MAAM,UAAU,IAAI;AAAA,IACnE,OAAO,MAAM,QAAQ,mBAAK,MAAM,SAAU;AAAA,EAC5C;AACF;AAPS;AAST,SAAS,gBAAgB,YAAkE;AACzF,QAAM,QAAQ,iCACT,aADS;AAAA,IAEZ,eAAe,WAAW,cAAc,IAAI,CAAC,WAAY,iCACpD,SADoD;AAAA,MAEvD,SAAS,OAAO,UAAU,CAAC,GAAG,OAAO,OAAO,IAAI;AAAA,IAClD,EAAE;AAAA,IACF,WAAW,WAAW,YAAY,eAAe,WAAW,SAAS,IAAI;AAAA,EAC3E;AACA,MAAI,MAAM,cAAc,OAAW,QAAO,MAAM;AAChD,aAAW,UAAU,MAAM,eAAe;AACxC,QAAI,OAAO,YAAY,OAAW,QAAO,OAAO;AAAA,EAClD;AACA,SAAO;AACT;AAdS;AAgBT,SAAS,eAAe,WAA+D;AACrF,SAAO,iCACF,YADE;AAAA,IAEL,YAAY,UAAU,WAAW,IAAI,CAAC,cAAe,mBAAK,UAAY;AAAA,EACxE;AACF;AALS;AAOT,SAAS,kBAAkB,SAA0C;AACnE,SAAO,QAAQ,OAAO,CAAC,KAAK,WAAW,KAAK,IAAI,KAAK,OAAO,EAAE,GAAG,CAAC,IAAI;AACxE;AAFS;AAIT,SAAS,iCAAiC,OAA2B,WAAyB;AAC5F,MAAI,UAAU,WAAc,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,IAAI;AAClE,UAAM,IAAI,MAAM,GAAG,SAAS,wCAAwC;AAAA,EACtE;AACF;AAJS;AAMT,SAAS,aAAa,SAA+C;AACnE,SAAO,iCACF,UADE;AAAA,IAEL,SAAS,QAAQ,QAAQ,IAAI,CAAC,WAAW,mBAAmB,MAAM,CAAC;AAAA,EACrE;AACF;AALS;AAOT,SAAS,mBAAmB,QAA0D;AACpF,SAAO,iCACF,SADE;AAAA,IAEL,MAAM,OAAO,OAAO,mBAAK,OAAO,QAAS;AAAA,IACzC,IAAI,OAAO,KAAK,mBAAK,OAAO,MAAO;AAAA,IACnC,QAAQ,OAAO,SAAS,mBAAK,OAAO,UAAW;AAAA,EACjD;AACF;AAPS;AAST,SAAS,uBAAuB,QAAkE;AAChG,SAAO,iCACF,SADE;AAAA,IAEL,OAAO,OAAO,MAAM,IAAI,CAAC,SAAU,iCAC9B,OAD8B;AAAA,MAEjC,UAAU,CAAC,GAAG,KAAK,QAAQ;AAAA,IAC7B,EAAE;AAAA,EACJ;AACF;AARS;;;ACnyCF,SAAS,uBAAuB,SAAiB,SAAiB,SAAyB;AAChG,QAAM,MAAM,eAAe,OAAO;AAClC,MAAI,IAAI,cAAc,QAAS,QAAO,gBAAgB,GAAG;AACzD,SAAO,gBAAgB,iCAAK,MAAL,EAAU,WAAW,QAAQ,EAAC;AACvD;AAJgB;AAMT,SAAS,yBACd,SACA,SACQ;AACR,MAAI,SAAS;AACb,MAAI,QAAQ;AACZ,SAAO,QAAQ,QAAQ,QAAQ;AAC7B,UAAM,KAAK,QAAQ,KAAK;AACxB,QAAI,OAAO,KAAK;AACd,YAAM,UAAU,yBAAyB,SAAS,KAAK;AACvD,gBAAU,QAAQ;AAClB,cAAQ,QAAQ;AAChB;AAAA,IACF;AAEA,UAAM,QAAQ,iBAAiB,SAAS,KAAK;AAC7C,QAAI,CAAC,OAAO;AACV,gBAAU;AACV,eAAS;AACT;AAAA,IACF;AAEA,UAAM,YAAY,QAAQ,MAAM,SAAS;AACzC,cAAU,UAAU,KAAK,UAAU,UAAU,UAAU;AACvD,YAAQ,MAAM;AAAA,EAChB;AACA,SAAO;AACT;AA3BgB;AA6BT,SAAS,qBAAqB,SAAiB,SAAiB,SAAyB;AAC9F,SAAO,yBAAyB,SAAS,CAAC,eAAe;AAAA,IACvD,IAAI;AAAA,IACJ,SAAS,uBAAuB,WAAW,SAAS,OAAO;AAAA,EAC7D,EAAE;AACJ;AALgB;AAOT,SAAS,2BACd,SACA,UACA,QAAQ,GACR,UAAwC,CAAC,GACjC;AACR,SAAO;AAAA,IAAyB;AAAA,IAAS,CAAC,cACxC,6BAA6B,WAAW,UAAU,OAAO,OAAO;AAAA,EAClE;AACF;AATgB;AAWT,SAAS,2BACd,SACA,UACA,QAAQ,GACR,UAAwC,CAAC,GACjC;AACR,SAAO;AAAA,IAAyB;AAAA,IAAS,CAAC,cACxC,6BAA6B,WAAW,UAAU,OAAO,OAAO;AAAA,EAClE;AACF;AATgB;AAWT,SAAS,8BACd,SACA,aACA,QAAQ,GACR,UAAwC,CAAC,GACjC;AACR,SAAO;AAAA,IAAyB;AAAA,IAAS,CAAC,cACxC,gCAAgC,WAAW,aAAa,OAAO,OAAO;AAAA,EACxE;AACF;AATgB;AAWT,SAAS,8BACd,SACA,aACA,QAAQ,GACR,UAAwC,CAAC,GACjC;AACR,SAAO;AAAA,IAAyB;AAAA,IAAS,CAAC,cACxC,gCAAgC,WAAW,aAAa,OAAO,OAAO;AAAA,EACxE;AACF;AATgB;AA2DT,SAAS,6BACd,SACA,UACA,QAAQ,GACR,UAAwC,CAAC,GACZ;AAC7B,wBAAsB,UAAU,UAAU;AAC1C,wBAAsB,OAAO,OAAO;AACpC,QAAM,MAAM,eAAe,OAAO;AAClC,MAAI,CAAC,cAAc,KAAK,QAAQ,SAAS,EAAG,QAAO,EAAE,IAAI,MAAM,SAAS,gBAAgB,GAAG,EAAE;AAC7F,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,SAAS,gBAAgB,iCACpB,MADoB;AAAA,MAEvB,OAAO,uBAAuB,IAAI,OAAO,UAAU,KAAK;AAAA,MACxD,KAAK,uBAAuB,IAAI,KAAK,UAAU,KAAK;AAAA,IACtD,EAAC;AAAA,EACH;AACF;AAlBgB;AAoBT,SAAS,6BACd,SACA,UACA,QAAQ,GACR,UAAwC,CAAC,GACZ;AAC7B,wBAAsB,UAAU,UAAU;AAC1C,wBAAsB,OAAO,OAAO;AACpC,QAAM,MAAM,eAAe,OAAO;AAClC,MAAI,CAAC,cAAc,KAAK,QAAQ,SAAS,EAAG,QAAO,EAAE,IAAI,MAAM,SAAS,gBAAgB,GAAG,EAAE;AAC7F,QAAM,OAAO,qBAAqB,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,EAAE,OAAO,UAAU,MAAM,CAAC;AACxF,MAAI,CAAC,KAAM,QAAO,EAAE,IAAI,OAAO,SAAS,QAAQ;AAChD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,SAAS,gBAAgB,iCACpB,MADoB;AAAA,MAEvB,OAAO,iCAAK,IAAI,QAAT,EAAgB,KAAK,KAAK,MAAM;AAAA,MACvC,KAAK,iCAAK,IAAI,MAAT,EAAc,KAAK,KAAK,IAAI;AAAA,IACnC,EAAC;AAAA,EACH;AACF;AApBgB;AAsBT,SAAS,gCACd,SACA,aACA,QAAQ,GACR,UAAwC,CAAC,GACZ;AAC7B,wBAAsB,aAAa,aAAa;AAChD,wBAAsB,OAAO,OAAO;AACpC,QAAM,MAAM,eAAe,OAAO;AAClC,MAAI,CAAC,cAAc,KAAK,QAAQ,SAAS,EAAG,QAAO,EAAE,IAAI,MAAM,SAAS,gBAAgB,GAAG,EAAE;AAC7F,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,SAAS,gBAAgB,iCACpB,MADoB;AAAA,MAEvB,OAAO,0BAA0B,IAAI,OAAO,aAAa,KAAK;AAAA,MAC9D,KAAK,0BAA0B,IAAI,KAAK,aAAa,KAAK;AAAA,IAC5D,EAAC;AAAA,EACH;AACF;AAlBgB;AAoBT,SAAS,gCACd,SACA,aACA,QAAQ,GACR,UAAwC,CAAC,GACZ;AAC7B,wBAAsB,aAAa,aAAa;AAChD,wBAAsB,OAAO,OAAO;AACpC,QAAM,MAAM,eAAe,OAAO;AAClC,MAAI,CAAC,cAAc,KAAK,QAAQ,SAAS,EAAG,QAAO,EAAE,IAAI,MAAM,SAAS,gBAAgB,GAAG,EAAE;AAC7F,QAAM,UAAU,qBAAqB,IAAI,MAAM,QAAQ,IAAI,IAAI,QAAQ;AAAA,IACrE,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AACD,MAAI,CAAC,QAAS,QAAO,EAAE,IAAI,OAAO,SAAS,QAAQ;AACnD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,SAAS,gBAAgB,iCACpB,MADoB;AAAA,MAEvB,OAAO,iCAAK,IAAI,QAAT,EAAgB,QAAQ,QAAQ,MAAM;AAAA,MAC7C,KAAK,iCAAK,IAAI,MAAT,EAAc,QAAQ,QAAQ,IAAI;AAAA,IACzC,EAAC;AAAA,EACH;AACF;AAvBgB;AAyBhB,SAAS,eAAe,SAA2B;AA3PnD;AA4PE,QAAM,YAAY,2BAA2B,OAAO;AACpD,QAAM,QAAQ,UAAU,QAAQ,MAAM,GAAG;AACzC,MAAI,MAAM,SAAS,KAAK,CAAC,MAAM,CAAC,GAAG;AACjC,UAAM,IAAI,MAAM,qCAAqC,OAAO,EAAE;AAAA,EAChE;AACA,QAAM,QAAQ,aAAa,MAAM,CAAC,CAAC;AACnC,QAAM,MAAM,cAAa,WAAM,CAAC,MAAP,YAAY,MAAM,CAAC,CAAC;AAC7C,QAAM,WAAW,MAAM,MAAM,IAAI,OAAO,MAAM,SAAS,IAAI;AAC3D,SAAO;AAAA,IACL,WAAW,UAAU;AAAA,IACrB,OAAO;AAAA,MACL,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG;AAAA,MAChC,QAAQ,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM;AAAA,MACzC,aAAa,WAAW,QAAQ,MAAM;AAAA,MACtC,gBAAgB,WAAW,QAAQ,MAAM;AAAA,IAC3C;AAAA,IACA,KAAK;AAAA,MACH,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG;AAAA,MAChC,QAAQ,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM;AAAA,MACzC,aAAa,WAAW,QAAQ,IAAI;AAAA,MACpC,gBAAgB,WAAW,QAAQ,IAAI;AAAA,IACzC;AAAA,EACF;AACF;AAxBS;AA0BT,SAAS,aAAa,SAA0B;AAC9C,QAAM,aAAa,QAAQ,KAAK;AAChC,QAAM,QAAQ,+BAA+B,KAAK,UAAU;AAC5D,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,0CAA0C,OAAO,EAAE;AAAA,EACrE;AACA,QAAM,MAAM,OAAO,MAAM,CAAC,CAAC;AAC3B,MAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,GAAG;AACrC,UAAM,IAAI,MAAM,0CAA0C,OAAO,EAAE;AAAA,EACrE;AACA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,kBAAkB,MAAM,CAAC,CAAE;AAAA,IACnC,gBAAgB,MAAM,CAAC,MAAM;AAAA,IAC7B,aAAa,MAAM,CAAC,MAAM;AAAA,EAC5B;AACF;AAhBS;AAkBT,SAAS,gBAAgB,KAAuB;AAC9C,QAAM,QAAQ,cAAc,IAAI,KAAK;AACrC,QAAM,OAAO,cAAc,IAAI,GAAG;AAClC,QAAM,QAAQ,UAAU,OAAO,QAAQ,GAAG,KAAK,IAAI,IAAI;AACvD,SAAO,IAAI,YAAY,GAAG,eAAe,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK;AACvE;AALS;AAOT,SAAS,cAAc,KAAsB;AAC3C,SAAO,GAAG,IAAI,iBAAiB,MAAM,EAAE,GAAG,kBAAkB,IAAI,MAAM,CAAC,GAAG,IAAI,cAAc,MAAM,EAAE,GAAG,IAAI,GAAG;AAChH;AAFS;AAIT,SAAS,eAAe,WAA2B;AACjD,MAAI,4BAA4B,KAAK,SAAS,EAAG,QAAO;AACxD,SAAO,IAAI,UAAU,QAAQ,MAAM,IAAI,CAAC;AAC1C;AAHS;AAKT,SAAS,uBAAuB,MAAe,UAAkB,OAAwB;AACvF,SAAO,KAAK,OAAO,WAAW,iCAAK,OAAL,EAAW,KAAK,KAAK,MAAM,MAAM,KAAI,mBAAK;AAC1E;AAFS;AAIT,SAAS,0BAA0B,MAAe,aAAqB,OAAwB;AAC7F,SAAO,KAAK,UAAU,cAAc,iCAAK,OAAL,EAAW,QAAQ,KAAK,SAAS,MAAM,KAAI,mBAAK;AACtF;AAFS;AAWT,SAAS,qBAAqB,OAAe,KAAa,UAA6D;AACrH,QAAM,YAAY,SAAS,QAAQ,SAAS,QAAQ;AACpD,QAAM,YAAsB,CAAC;AAC7B,WAAS,QAAQ,OAAO,SAAS,KAAK,SAAS;AAC7C,QAAI,SAAS,SAAS,SAAS,SAAS,UAAW;AACnD,cAAU,KAAK,QAAQ,YAAY,QAAQ,SAAS,QAAQ,KAAK;AAAA,EACnE;AACA,MAAI,UAAU,WAAW,EAAG,QAAO;AACnC,SAAO;AAAA,IACL,OAAO,KAAK,IAAI,GAAG,SAAS;AAAA,IAC5B,KAAK,KAAK,IAAI,GAAG,SAAS;AAAA,EAC5B;AACF;AAZS;AAcT,SAAS,cAAc,KAAe,WAAwC;AAC5E,SAAO,cAAc,UAAa,IAAI,cAAc,UAAa,IAAI,cAAc;AACrF;AAFS;AAIT,SAAS,sBAAsB,OAAe,MAAoB;AAChE,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AACzC,UAAM,IAAI,MAAM,mBAAmB,IAAI,6BAA6B;AAAA,EACtE;AACF;AAJS;AAiBT,SAAS,yBAAyB,SAAiB,OAA8C;AAC/F,MAAI,QAAQ,QAAQ;AACpB,SAAO,QAAQ,QAAQ,QAAQ;AAC7B,QAAI,QAAQ,KAAK,MAAM,KAAK;AAC1B,eAAS;AACT;AAAA,IACF;AACA,QAAI,QAAQ,QAAQ,CAAC,MAAM,KAAK;AAC9B,eAAS;AACT;AAAA,IACF;AACA,WAAO,EAAE,MAAM,QAAQ,MAAM,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE;AAAA,EACjE;AACA,SAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,GAAG,KAAK,QAAQ,OAAO;AAC3D;AAdS;AAgBT,SAAS,iBAAiB,SAAiB,OAAoC;AAC7E,MAAI,CAAC,wBAAwB,QAAQ,QAAQ,CAAC,CAAC,EAAG,QAAO;AACzD,QAAM,QAAQ,gBAAgB,SAAS,KAAK;AAC5C,QAAM,YAAY,QAAQ,MAAM,MAAM;AACtC,QAAM,YAAY,cAAc,SAAS,SAAS;AAClD,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,MAAM,UAAU;AACpB,MAAI,QAAQ,GAAG,MAAM,KAAK;AACxB,UAAM,aAAa,cAAc,SAAS,MAAM,CAAC;AACjD,QAAI,WAAY,OAAM,WAAW;AAAA,EACnC;AACA,MAAI,CAAC,yBAAyB,QAAQ,GAAG,CAAC,EAAG,QAAO;AACpD,MAAI,QAAQ,GAAG,MAAM,IAAK,QAAO;AAEjC,SAAO,EAAE,WAAW,QAAQ,MAAM,OAAO,GAAG,GAAG,IAAI;AACrD;AAhBS;AAkBT,SAAS,gBAAgB,SAAiB,OAAuC;AAC/E,MAAI,QAAQ,KAAK,MAAM,KAAK;AAC1B,QAAI,QAAQ,QAAQ;AACpB,WAAO,QAAQ,QAAQ,QAAQ;AAC7B,UAAI,QAAQ,KAAK,MAAM,KAAK;AAC1B,iBAAS;AACT;AAAA,MACF;AACA,UAAI,QAAQ,QAAQ,CAAC,MAAM,KAAK;AAC9B,iBAAS;AACT;AAAA,MACF;AACA,aAAO,QAAQ,QAAQ,CAAC,MAAM,MAAM,EAAE,KAAK,QAAQ,EAAE,IAAI;AAAA,IAC3D;AACA,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,4BAA4B,KAAK,QAAQ,MAAM,KAAK,CAAC;AACnE,SAAO,QAAQ,EAAE,KAAK,QAAQ,MAAM,CAAC,EAAE,OAAO,IAAI;AACpD;AAnBS;AAqBT,SAAS,cAAc,SAAiB,OAAuC;AAC7E,QAAM,QAAQ,kCAAkC,KAAK,QAAQ,MAAM,KAAK,CAAC;AACzE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,MAAM,CAAC;AACrB,QAAM,aAAa,MAAM,QAAQ,OAAO,EAAE;AAC1C,QAAM,OAAO,6BAA6B,KAAK,UAAU;AACzD,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,SAAS,kBAAkB,KAAK,CAAC,CAAE;AACzC,MAAI,SAAS,MAAO,QAAO;AAC3B,SAAO,EAAE,KAAK,QAAQ,MAAM,OAAO;AACrC;AAVS;AAYT,SAAS,wBAAwB,IAAiC;AAChE,SAAO,OAAO,UAAa,CAAC,iBAAiB,KAAK,EAAE;AACtD;AAFS;AAIT,SAAS,yBAAyB,IAAiC;AACjE,SAAO,OAAO,UAAa,CAAC,iBAAiB,KAAK,EAAE;AACtD;AAFS;;;ACnZF,IAAM,kBAAN,MAAM,gBAAe;AAAA,EAe1B,YAAY,OAAwB,UAA+B,gBAAwC;AAd3G,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AAGf,SAAK,QAAQ;AACb,SAAK,WAAW;AAChB,SAAK,iBAAiB;AACtB,SAAK,aAAa,IAAI,yBAAyB,MAAM,MAAM,UAAU;AACrE,SAAK,SAAS,IAAI,qBAAqB,MAAM,MAAM,MAAM;AACzD,SAAK,kBAAkB,IAAI,8BAA8B,MAAM,MAAM,eAAe;AACpF,SAAK,qBAAqB,IAAI,iCAAiC,MAAM,MAAM,kBAAkB;AAC7F,SAAK,WAAW,IAAI,uBAAuB,MAAM,MAAM,QAAQ;AAC/D,SAAK,mBAAmB,IAAI,+BAA+B,MAAM,MAAM,gBAAgB;AACvF,SAAK,WAAW,IAAI,uBAAuB,MAAM,MAAM,QAAQ;AAC/D,SAAK,SAAS,IAAI;AAAA,MAChB,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,IACd;AACA,SAAK,SAAS,IAAI,qBAAqB,MAAM,MAAM,MAAM;AACzD,SAAK,SAAS,IAAI,qBAAqB,MAAM,MAAM,QAAQ;AAAA,EAC7D;AAAA,EAEA,KAAa;AACX,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAAe;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAAO,MAAoB;AAvE7B;AAwEI,6BAAyB,IAAI;AAC7B,SAAK,0BAA0B,MAAM,KAAK,KAAK;AAC/C,UAAM,UAAU,KAAK,MAAM;AAC3B,SAAK,MAAM,OAAO;AAClB,SAAK,6BAA6B,CAAC,SAAS,qBAAqB,MAAM,SAAS,IAAI,CAAC;AACrF,SAAK,oBAAoB,CAAC,SAAS,qBAAqB,MAAM,SAAS,IAAI,CAAC;AAC5E,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW;AAAA,MACX;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,WAAW,UAAkB,QAAQ,GAAS;AAvFhD;AAwFI,wBAAoB,UAAU,UAAU;AACxC,wBAAoB,OAAO,OAAO;AAClC,eAAW,QAAQ,KAAK,MAAM,OAAO;AACnC,UAAI,KAAK,OAAO,UAAU;AACxB,aAAK,OAAO;AACZ,aAAK,UAAU,kBAAkB,KAAK,KAAK,KAAK,MAAM;AAAA,MACxD;AACA,UAAI,KAAK,SAAS;AAChB,aAAK,UAAU,2BAA2B,KAAK,SAAS,UAAU,OAAO;AAAA,UACvE,WAAW,KAAK,MAAM;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MAAoB,CAAC,SACxB,2BAA2B,MAAM,UAAU,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IAClF;AACA,SAAK;AAAA,MAAoB,CAAC,SACxB,2BAA2B,MAAM,UAAU,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IAClF;AACA,SAAK;AAAA,MAAwB,CAAC,SAC5B,2BAA2B,MAAM,UAAU,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IAClF;AACA,SAAK;AAAA,MAAuB,CAAC,YAC3B,6BAA6B,SAAS,UAAU,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IACvF;AACA,SAAK,yBAAyB,UAAU,KAAK;AAC7C,SAAK,+BAA+B,UAAU,KAAK;AACnD,IAAAO,qBAAoB,KAAK,KAAK;AAC9B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,WAAW,UAAkB,QAAQ,GAAS;AA7HhD;AA8HI,wBAAoB,UAAU,UAAU;AACxC,wBAAoB,OAAO,OAAO;AAClC,UAAM,SAAS,WAAW,QAAQ;AAClC,SAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,OAAO,CAAC,SAAS;AACnD,UAAI,KAAK,OAAO,YAAY,KAAK,OAAO,OAAQ,QAAO;AACvD,UAAI,KAAK,MAAM,QAAQ;AACrB,aAAK,OAAO;AACZ,aAAK,UAAU,kBAAkB,KAAK,KAAK,KAAK,MAAM;AAAA,MACxD;AACA,UAAI,KAAK,SAAS;AAChB,aAAK,UAAU,2BAA2B,KAAK,SAAS,UAAU,OAAO;AAAA,UACvE,WAAW,KAAK,MAAM;AAAA,QACxB,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT,CAAC;AACD,SAAK;AAAA,MAAoB,CAAC,SACxB,2BAA2B,MAAM,UAAU,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IAClF;AACA,SAAK;AAAA,MAAoB,CAAC,SACxB,2BAA2B,MAAM,UAAU,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IAClF;AACA,SAAK;AAAA,MAAwB,CAAC,SAC5B,2BAA2B,MAAM,UAAU,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IAClF;AACA,SAAK;AAAA,MAAuB,CAAC,YAC3B,6BAA6B,SAAS,UAAU,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IACvF;AACA,SAAK,yBAAyB,UAAU,KAAK;AAC7C,SAAK,+BAA+B,UAAU,KAAK;AACnD,IAAAA,qBAAoB,KAAK,KAAK;AAC9B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,cAAc,aAAqB,QAAQ,GAAS;AAtKtD;AAuKI,wBAAoB,aAAa,aAAa;AAC9C,wBAAoB,OAAO,OAAO;AAClC,eAAW,QAAQ,KAAK,MAAM,OAAO;AACnC,UAAI,KAAK,UAAU,aAAa;AAC9B,aAAK,UAAU;AACf,aAAK,UAAU,kBAAkB,KAAK,KAAK,KAAK,MAAM;AAAA,MACxD;AACA,UAAI,KAAK,SAAS;AAChB,aAAK,UAAU,8BAA8B,KAAK,SAAS,aAAa,OAAO;AAAA,UAC7E,WAAW,KAAK,MAAM;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,IACF;AACA,SAAK;AAAA,MAAoB,CAAC,SACxB,8BAA8B,MAAM,aAAa,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IACxF;AACA,SAAK;AAAA,MAAoB,CAAC,SACxB,8BAA8B,MAAM,aAAa,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IACxF;AACA,SAAK;AAAA,MAAwB,CAAC,SAC5B,8BAA8B,MAAM,aAAa,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IACxF;AACA,SAAK;AAAA,MAAuB,CAAC,YAC3B,gCAAgC,SAAS,aAAa,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IAC7F;AACA,SAAK,4BAA4B,aAAa,KAAK;AACnD,SAAK,kCAAkC,aAAa,KAAK;AACzD,IAAAA,qBAAoB,KAAK,KAAK;AAC9B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,cAAc,aAAqB,QAAQ,GAAS;AA5MtD;AA6MI,wBAAoB,aAAa,aAAa;AAC9C,wBAAoB,OAAO,OAAO;AAClC,UAAM,YAAY,cAAc,QAAQ;AACxC,SAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,OAAO,CAAC,SAAS;AACnD,UAAI,KAAK,UAAU,eAAe,KAAK,UAAU,UAAW,QAAO;AACnE,UAAI,KAAK,SAAS,WAAW;AAC3B,aAAK,UAAU;AACf,aAAK,UAAU,kBAAkB,KAAK,KAAK,KAAK,MAAM;AAAA,MACxD;AACA,UAAI,KAAK,SAAS;AAChB,aAAK,UAAU,8BAA8B,KAAK,SAAS,aAAa,OAAO;AAAA,UAC7E,WAAW,KAAK,MAAM;AAAA,QACxB,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT,CAAC;AACD,SAAK;AAAA,MAAoB,CAAC,SACxB,8BAA8B,MAAM,aAAa,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IACxF;AACA,SAAK;AAAA,MAAoB,CAAC,SACxB,8BAA8B,MAAM,aAAa,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IACxF;AACA,SAAK;AAAA,MAAwB,CAAC,SAC5B,8BAA8B,MAAM,aAAa,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IACxF;AACA,SAAK;AAAA,MAAuB,CAAC,YAC3B,gCAAgC,SAAS,aAAa,OAAO,EAAE,WAAW,KAAK,MAAM,KAAK,CAAC;AAAA,IAC7F;AACA,SAAK,4BAA4B,aAAa,KAAK;AACnD,SAAK,kCAAkC,aAAa,KAAK;AACzD,IAAAA,qBAAoB,KAAK,KAAK;AAC9B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,aAAiC;AAC/B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,cAAc,YAAsC;AAzPtD;AA0PI,QAAI,eAAe,UAAa,CAAC,CAAC,WAAW,UAAU,YAAY,EAAE,SAAS,UAAU,GAAG;AACzF,YAAM,IAAI,MAAM,qDAAqD,UAAU,EAAE;AAAA,IACnF;AACA,SAAK,MAAM,aAAa;AACxB,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,OAA2B;AACzB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,YAAgC;AAC9B,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,SAAS,SAA6B;AA/QxC;AAgRI,WAAO,IAAI,WAAW,KAAK,OAAO,UAAS,UAAK,aAAL,mBAAe,QAAQ,KAAK,cAAc;AAAA,EACvF;AAAA,EAEA,QAAQ,SAA4B;AAnRtC;AAoRI,WAAO,IAAI,UAAU,KAAK,OAAO,UAAS,UAAK,aAAL,mBAAe,QAAQ,KAAK,cAAc;AAAA,EACtF;AAAA,EAEA,eAAkC;AAChC,QAAI,CAAC,KAAK,MAAM,UAAW,QAAO;AAClC,WAAO,KAAK,SAAS,KAAK,MAAM,SAAS;AAAA,EAC3C;AAAA,EAEA,QAAQ;AACN,WAAO,KAAK,MAAM,MAAM,IAAI,CAAC,SAAU,mBAAK,KAAO;AAAA,EACrD;AAAA,EAEA,aAAa;AACX,WAAO,gBAAgB,KAAK,MAAM,UAAU;AAAA,EAC9C;AAAA,EAEA,cAAc,YAAyC;AApSzD;AAqSI,SAAK,MAAM,aAAa,gBAAgB,UAAU;AAClD,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,KAAK,MAAM;AAAA,MACpB,WAAW,KAAK,MAAM;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,UAAU;AACR,WAAO,KAAK,MAAM,QAAQ,IAAI,CAAC,WAAY,mBAAK,OAAS;AAAA,EAC3D;AAAA,EAEA,OAAO;AACL,WAAO,KAAK,MAAM,KAAK,IAAI,CAAC,QAAS,mBAAK,IAAM;AAAA,EAClD;AAAA,EAEA,eAAe;AACb,WAAO,KAAK,MAAM,aAAa,IAAI,CAAC,UAAW,mBAAK,MAAQ;AAAA,EAC9D;AAAA,EAEA,UAA2B;AACzB,WAAO,iCACF,KAAK,QADH;AAAA,MAEL,YAAY,KAAK,WAAW;AAAA,MAC5B,SAAS,KAAK,MAAM,QAAQ,IAAI,CAAC,WAAY,mBAAK,OAAS;AAAA,MAC3D,MAAM,KAAK,MAAM,KAAK,IAAI,CAAC,QAAS,mBAAK,IAAM;AAAA,MAC/C,cAAc,KAAK,MAAM,aAAa,IAAI,CAAC,UAAW,mBAAK,MAAQ;AAAA,MACnE,YAAY,KAAK,WAAW,QAAQ;AAAA,MACpC,QAAQ,KAAK,OAAO,QAAQ;AAAA,MAC5B,iBAAiB,KAAK,gBAAgB,QAAQ;AAAA,MAC9C,oBAAoB,KAAK,mBAAmB,QAAQ;AAAA,MACpD,UAAU,KAAK,SAAS,QAAQ;AAAA,MAChC,kBAAkB,KAAK,iBAAiB,QAAQ;AAAA,MAChD,UAAU,KAAK,SAAS,QAAQ;AAAA,MAChC,QAAQ,KAAK,OAAO,QAAQ;AAAA,MAC5B,QAAQ,KAAK,OAAO,QAAQ;AAAA,MAC5B,OAAO,KAAK,MAAM,MAAM,IAAI,CAAC,SAAU,mBAAK,KAAO;AAAA,IACrD;AAAA,EACF;AAAA,EAEQ,oBAAoB,SAAyC;AACnE,QAAI,CAAC,KAAK,SAAU;AACpB,UAAM,kBAAkB,KAAK,SAAS,OAAO,QAAQ,KAAK,KAAK;AAC/D,eAAW,QAAQ,KAAK,SAAS,cAAc;AAC7C,UAAI,KAAK,iBAAiB,UAAa,KAAK,iBAAiB,gBAAiB;AAC9E,WAAK,OAAO,QAAQ,KAAK,IAAI;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,oBAAoB,SAAyC;AACnE,eAAW,cAAc,KAAK,MAAM,iBAAiB;AACnD,UAAI,WAAW,SAAU,YAAW,WAAW,QAAQ,WAAW,QAAQ;AAC1E,UAAI,WAAW,SAAU,YAAW,WAAW,QAAQ,WAAW,QAAQ;AAAA,IAC5E;AACA,eAAW,UAAU,KAAK,MAAM,oBAAoB;AAClD,iBAAW,QAAQ,OAAO,OAAO;AAC/B,aAAK,WAAW,KAAK,SAAS,IAAI,CAAC,YAAY,QAAQ,OAAO,CAAC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,6BAA6B,SAAyC;AApWhF;AAqWI,UAAM,UAAS,gBAAK,aAAL,mBAAe,WAAf,YAAyB,CAAC,KAAK,KAAK;AACnD,eAAW,SAAS,QAAQ;AAC1B,iBAAW,QAAQ,MAAM,OAAO;AAC9B,YAAI,KAAK,QAAS,MAAK,UAAU,QAAQ,KAAK,OAAO;AAAA,MACvD;AACA,iBAAW,cAAc,MAAM,iBAAiB;AAC9C,YAAI,WAAW,SAAU,YAAW,WAAW,QAAQ,WAAW,QAAQ;AAC1E,YAAI,WAAW,SAAU,YAAW,WAAW,QAAQ,WAAW,QAAQ;AAAA,MAC5E;AACA,iBAAW,UAAU,MAAM,oBAAoB;AAC7C,mBAAW,QAAQ,OAAO,OAAO;AAC/B,eAAK,WAAW,KAAK,SAAS,IAAI,CAAC,YAAY,QAAQ,OAAO,CAAC;AAAA,QACjE;AAAA,MACF;AACA,iBAAW,SAAS,MAAM,QAAQ;AAChC,cAAM,cAAc,MAAM,YAAY,IAAI,CAAC,cAAc,QAAQ,SAAS,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,wBAAwB,SAAyC;AACvE,eAAW,SAAS,KAAK,MAAM,QAAQ;AACrC,YAAM,cAAc,MAAM,YAAY,IAAI,CAAC,cAAc,QAAQ,SAAS,CAAC;AAAA,IAC7E;AAAA,EACF;AAAA,EAEQ,uBAAuB,SAAiE;AA/XlG;AAgYI,SAAK,MAAM,eAAe,KAAK,MAAM,aAAa,QAAQ,CAAC,UAAU;AACnE,YAAM,SAAS,QAAQ,MAAM,OAAO;AACpC,aAAO,OAAO,KAAK,CAAC,iCAAK,QAAL,EAAY,SAAS,OAAO,QAAQ,EAAC,IAAI,CAAC;AAAA,IAChE,CAAC;AACD,SAAK,MAAM,aAAa,KAAK,MAAM,WAAW,QAAQ,CAAC,cAAc;AACnE,YAAM,SAAS,QAAQ,UAAU,GAAG;AACpC,aAAO,OAAO,KAAK,CAAC,iCAAK,YAAL,EAAgB,KAAK,OAAO,QAAQ,EAAC,IAAI,CAAC;AAAA,IAChE,CAAC;AACD,SAAK,MAAM,WAAW,KAAK,MAAM,SAAS,QAAQ,CAAC,YAAY;AAC7D,YAAM,SAAS,QAAQ,QAAQ,GAAG;AAClC,aAAO,OAAO,KAAK,CAAC,iCAAK,UAAL,EAAc,KAAK,OAAO,QAAQ,EAAC,IAAI,CAAC;AAAA,IAC9D,CAAC;AACD,SAAK,MAAM,mBAAmB,KAAK,MAAM,iBAAiB,QAAQ,CAAC,YAAY;AAC7E,YAAM,SAAS,QAAQ,QAAQ,GAAG;AAClC,aAAO,OAAO,KAAK,CAAC,iCAAK,UAAL,EAAc,KAAK,OAAO,QAAQ,EAAC,IAAI,CAAC;AAAA,IAC9D,CAAC;AACD,eAAW,QAAQ,KAAK,MAAM,YAAY;AACxC,WAAI,UAAK,SAAL,mBAAW,aAAa;AAC1B,cAAM,SAAS,QAAQ,KAAK,KAAK,WAAW;AAC5C,aAAK,KAAK,cAAc,OAAO,KAAK,OAAO,UAAU;AAAA,MACvD;AACA,iBAAW,aAAa,KAAK,YAAY;AACvC,YAAI,UAAU,YAAY;AACxB,gBAAM,SAAS,QAAQ,UAAU,UAAU;AAC3C,oBAAU,aAAa,OAAO,KAAK,OAAO,UAAU;AAAA,QACtD;AACA,YAAI,UAAU,OAAO;AACnB,oBAAU,QAAQ,aAAa,UAAU,OAAO,OAAO;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AACA,SAAK,MAAM,SAAS,KAAK,MAAM,OAAO,QAAQ,CAAC,UAAU;AACvD,YAAM,MAAM,MAAM,MAAM,QAAQ,MAAM,GAAG,IAAI;AAC7C,UAAI,MAAM,OAAO,EAAC,2BAAK,IAAI,QAAO,CAAC;AACnC,YAAM,gBAAgB,MAAM,gBAAgB,QAAQ,MAAM,aAAa,IAAI;AAC3E,aAAO;AAAA,QACL,iCACK,QADL;AAAA,UAEE,KAAK,2BAAK;AAAA,UACV,gBAAe,+CAAe,MAAK,cAAc,UAAU;AAAA,UAC3D,YACE,MAAM,eAAc,+CAAe,MAC/B,iCAAK,MAAM,aAAX,EAAuB,KAAK,cAAc,QAAQ,KAClD,MAAM;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAC;AACD,SAAK,MAAM,kBAAkB,KAAK,MAAM,gBAAgB,QAAQ,CAAC,eAAe;AAC9E,YAAM,QAAQ,WAAW,QAAQ,aAAa,WAAW,OAAO,OAAO,IAAI;AAC3E,UAAI,WAAW,SAAS,CAAC,MAAO,QAAO,CAAC;AACxC,aAAO,CAAC,iCAAK,aAAL,EAAiB,MAAM,EAAC;AAAA,IAClC,CAAC;AACD,SAAK,MAAM,qBAAqB,KAAK,MAAM,mBAAmB,QAAQ,CAAC,WAAW;AAChF,YAAM,QAAQ,OAAO,QAAQ,aAAa,OAAO,OAAO,OAAO,IAAI;AACnE,UAAI,OAAO,SAAS,CAAC,MAAO,QAAO,CAAC;AACpC,aAAO,CAAC,iCAAK,SAAL,EAAa,MAAM,EAAC;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEQ,yBAAyB,UAAkB,OAAqB;AACtE,eAAW,OAAO,KAAK,MAAM,MAAM;AACjC,UAAI,IAAI,SAAS,SAAU,KAAI,SAAS;AAAA,IAC1C;AAAA,EACF;AAAA,EAEQ,yBAAyB,UAAkB,OAAqB;AACtE,UAAM,SAAS,WAAW,QAAQ;AAClC,SAAK,MAAM,OAAO,KAAK,MAAM,KAAK,QAAQ,CAAC,QAAQ;AACjD,UAAI,IAAI,SAAS,YAAY,IAAI,SAAS,OAAQ,QAAO,CAAC;AAC1D,UAAI,IAAI,QAAQ,OAAQ,QAAO,CAAC,iCAAK,MAAL,EAAU,OAAO,IAAI,QAAQ,MAAM,EAAC;AACpE,aAAO,CAAC,GAAG;AAAA,IACb,CAAC;AAAA,EACH;AAAA,EAEQ,4BAA4B,aAAqB,OAAqB;AAC5E,SAAK,MAAM,UAAU,KAAK,MAAM,QAAQ,IAAI,CAAC,WAAW;AACtD,UAAI,OAAO,OAAO,aAAa;AAC7B,eAAO,iCAAK,SAAL,EAAa,KAAK,OAAO,MAAM,OAAO,KAAK,OAAO,MAAM,MAAM;AAAA,MACvE;AACA,UAAI,OAAO,OAAO,aAAa;AAC7B,eAAO,iCAAK,SAAL,EAAa,KAAK,OAAO,MAAM,MAAM;AAAA,MAC9C;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEQ,4BAA4B,aAAqB,OAAqB;AAC5E,UAAM,YAAY,cAAc,QAAQ;AACxC,SAAK,MAAM,UAAU,KAAK,MAAM,QAAQ,QAAQ,CAAC,WAAW;AAC1D,UAAI,OAAO,OAAO,eAAe,OAAO,OAAO,UAAW,QAAO,CAAC;AAClE,UAAI,OAAO,MAAM,WAAW;AAC1B,eAAO,CAAC,iCAAK,SAAL,EAAa,KAAK,OAAO,MAAM,OAAO,KAAK,OAAO,MAAM,MAAM,EAAC;AAAA,MACzE;AACA,UAAI,OAAO,MAAM,eAAe,OAAO,MAAM,WAAW;AACtD,eAAO,CAAC,iCAAK,SAAL,EAAa,KAAK,OAAO,MAAM,MAAM,EAAC;AAAA,MAChD;AACA,UAAI,OAAO,MAAM,eAAe,OAAO,OAAO,aAAa;AACzD,eAAO,CAAC,iCAAK,SAAL,EAAa,KAAK,cAAc,EAAE,EAAC;AAAA,MAC7C;AACA,UAAI,OAAO,OAAO,aAAa,OAAO,MAAM,WAAW;AACrD,eAAO,CAAC,iCAAK,SAAL,EAAa,KAAK,aAAa,KAAK,OAAO,MAAM,MAAM,EAAC;AAAA,MAClE;AACA,aAAO,CAAC,MAAM;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEQ,+BAA+B,UAAkB,OAAqB;AAC5E,UAAM,cAAc,WAAW;AAC/B,eAAW,UAAU,KAAK,eAAe,GAAG;AAC1C,UAAI,OAAO,QAAQ,UAAa,OAAO,OAAO,YAAa,QAAO,OAAO;AAAA,IAC3E;AAAA,EACF;AAAA,EAEQ,+BAA+B,UAAkB,OAAqB;AAC5E,UAAM,cAAc,WAAW;AAC/B,UAAM,WAAW,cAAc,QAAQ;AACvC,eAAW,UAAU,KAAK,eAAe,GAAG;AAC1C,UAAI,OAAO,QAAQ,OAAW;AAC9B,UAAI,OAAO,MAAM,SAAU,QAAO,OAAO;AAAA,eAChC,OAAO,OAAO,YAAa,QAAO,MAAM;AAAA,IACnD;AAAA,EACF;AAAA,EAEQ,kCAAkC,aAAqB,OAAqB;AAClF,UAAM,cAAc,cAAc;AAClC,eAAW,UAAU,KAAK,eAAe,GAAG;AAC1C,UAAI,OAAO,WAAW,UAAa,OAAO,UAAU,YAAa,QAAO,UAAU;AAAA,IACpF;AAAA,EACF;AAAA,EAEQ,kCAAkC,aAAqB,OAAqB;AAClF,UAAM,cAAc,cAAc;AAClC,UAAM,WAAW,cAAc,QAAQ;AACvC,eAAW,UAAU,KAAK,eAAe,GAAG;AAC1C,UAAI,OAAO,WAAW,OAAW;AACjC,UAAI,OAAO,SAAS,SAAU,QAAO,UAAU;AAAA,eACtC,OAAO,UAAU,YAAa,QAAO,SAAS;AAAA,IACzD;AAAA,EACF;AAAA,EAEQ,iBAA4C;AAClD,WAAO,KAAK,MAAM,SAAS;AAAA,MAAQ,CAAC,YAClC,QAAQ,QAAQ,QAAQ,CAAC,WAAW;AAClC,cAAM,UAAqC,CAAC;AAC5C,YAAI,OAAO,KAAM,SAAQ,KAAK,OAAO,IAAI;AACzC,YAAI,OAAO,GAAI,SAAQ,KAAK,OAAO,EAAE;AACrC,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,0BAA0B,MAAc,SAAgC;AAC9E,QAAI,CAAC,KAAK,SAAU;AACpB,QAAI,KAAK,SAAS,OAAO,KAAK,CAAC,UAAU,UAAU,WAAW,MAAM,SAAS,IAAI,GAAG;AAClF,YAAM,IAAI,MAAM,4CAA4C,IAAI,EAAE;AAAA,IACpE;AAAA,EACF;AACF;AAhgB4B;AAArB,IAAM,iBAAN;AAkgBP,SAAS,yBAAyB,MAAoB;AACpD,MAAI,KAAK,SAAS,GAAG;AACnB,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACA,MAAI,KAAK,SAAS,IAAI;AACpB,UAAM,IAAI,MAAM,sEAAsE;AAAA,EACxF;AACA,MAAI,cAAc,KAAK,IAAI,GAAG;AAC5B,UAAM,IAAI,MAAM,kDAAkD,IAAI,EAAE;AAAA,EAC1E;AACA,MAAI,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;AAC9C,UAAM,IAAI,MAAM,6EAA6E;AAAA,EAC/F;AACF;AAbS;AAeT,SAAS,oBAAoB,OAAe,MAAoB;AAC9D,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AACzC,UAAM,IAAI,MAAM,mBAAmB,IAAI,6BAA6B;AAAA,EACtE;AACF;AAJS;AAMT,SAAS,oBAAoB,OAAe,MAAoB;AAC9D,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AACzC,UAAM,IAAI,MAAM,mBAAmB,IAAI,6BAA6B;AAAA,EACtE;AACF;AAJS;AAMT,SAASA,qBAAoB,OAA8B;AACzD,QAAM,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM;AAC/D,QAAM,YAAYC,kBAAiB,KAAK;AAC1C;AAHS,OAAAD,sBAAA;AAKT,SAASC,kBAAiB,OAA4C;AACpE,MAAI,MAAM,MAAM,WAAW,EAAG,QAAO;AACrC,MAAI,SAAS,OAAO;AACpB,MAAI,YAAY,OAAO;AACvB,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,aAAW,QAAQ,MAAM,OAAO;AAC9B,aAAS,KAAK,IAAI,QAAQ,KAAK,GAAG;AAClC,gBAAY,KAAK,IAAI,WAAW,KAAK,MAAM;AAC3C,aAAS,KAAK,IAAI,QAAQ,KAAK,GAAG;AAClC,gBAAY,KAAK,IAAI,WAAW,KAAK,MAAM;AAAA,EAC7C;AACA,SAAO,mBAAmB,QAAQ,WAAW,SAAS,SAAS,GAAG,YAAY,YAAY,CAAC;AAC7F;AAbS,OAAAA,mBAAA;AAeT,SAAS,aACP,OACA,SACoB;AACpB,QAAM,OAAiB,CAAC;AACxB,aAAW,OAAO,MAAM,MAAM,KAAK,GAAG;AACpC,QAAI,CAAC,IAAK;AACV,UAAM,SAAS,QAAQ,GAAG;AAC1B,QAAI,OAAO,GAAI,MAAK,KAAK,OAAO,OAAO;AAAA,EACzC;AACA,SAAO,KAAK,SAAS,KAAK,KAAK,GAAG,IAAI;AACxC;AAXS;AAaF,IAAM,4BAAN,MAAM,0BAAyB;AAAA,EAMpC,YACE,QACA,UACA,gBACA;AATF,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AAOf,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,iBAAiB;AACtB,SAAK,aAAa,OAAO,IAAI,CAAC,UAAU,IAAI,eAAe,OAAO,UAAU,cAAc,CAAC;AAAA,EAC7F;AAAA,EAEA,QAA0B;AACxB,WAAO,CAAC,GAAG,KAAK,UAAU;AAAA,EAC5B;AAAA,EAEA,QAAQ,UAAkC;AACxC,UAAM,QAAQ,KAAK,oBAAoB,QAAQ;AAC/C,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,uCAAuC,QAAQ,EAAE;AAAA,IACnE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,UAAyC;AAxnB/D;AAynBI,YACE,UAAK,WAAW,KAAK,CAAC,UAAU,MAAM,KAAK,MAAM,YAAY,MAAM,GAAG,MAAM,QAAQ,MAApF,YAAyF;AAAA,EAE7F;AAAA,EAEA,IAAI,MAA8B;AA9nBpC;AA+nBI,6BAAyB,IAAI;AAC7B,QAAI,KAAK,oBAAoB,IAAI,GAAG;AAClC,YAAM,IAAI,MAAM,4CAA4C,IAAI,EAAE;AAAA,IACpE;AACA,UAAM,QAAQ,sBAAsB,MAAM,YAAY,KAAK,MAAM,CAAC;AAClE,SAAK,OAAO,KAAK,KAAK;AACtB,UAAM,YAAY,IAAI,eAAe,OAAO,KAAK,UAAU,KAAK,cAAc;AAC9E,SAAK,WAAW,KAAK,SAAS;AAC9B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,IACnB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,UAAwB;AA/oBrC;AAgpBI,UAAM,QAAQ,KAAK,WAAW;AAAA,MAC5B,CAACC,WAAUA,OAAM,KAAK,MAAM,YAAYA,OAAM,GAAG,MAAM;AAAA,IACzD;AACA,QAAI,UAAU,GAAI,OAAM,IAAI,MAAM,uCAAuC,QAAQ,EAAE;AACnF,QAAI,KAAK,WAAW,WAAW;AAC7B,YAAM,IAAI,MAAM,iDAAiD;AACnE,UAAM,QAAQ,KAAK,OAAO,KAAK;AAC/B,SAAK,WAAW,OAAO,OAAO,CAAC;AAC/B,SAAK,OAAO,OAAO,OAAO,CAAC;AAC3B,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,KAAK,UAAkB,SAAuB;AAC5C,QAAI,CAAC,OAAO,UAAU,OAAO,KAAK,UAAU,KAAK,WAAW,KAAK,WAAW,QAAQ;AAClF,YAAM,IAAI,MAAM,yDAAyD,OAAO,EAAE;AAAA,IACpF;AACA,UAAM,YAAY,KAAK,WAAW;AAAA,MAChC,CAACA,WAAUA,OAAM,KAAK,MAAM,YAAYA,OAAM,GAAG,MAAM;AAAA,IACzD;AACA,QAAI,cAAc,GAAI,OAAM,IAAI,MAAM,uCAAuC,QAAQ,EAAE;AACvF,QAAI,cAAc,QAAS;AAC3B,UAAM,CAAC,SAAS,IAAI,KAAK,WAAW,OAAO,WAAW,CAAC;AACvD,UAAM,CAAC,KAAK,IAAI,KAAK,OAAO,OAAO,WAAW,CAAC;AAC/C,SAAK,WAAW,OAAO,SAAS,GAAG,SAAU;AAC7C,SAAK,OAAO,OAAO,SAAS,GAAG,KAAM;AAAA,EACvC;AAAA,EAEA,KAAK,UAAkB,SAAkC;AA/qB3D;AAgrBI,UAAM,cAAc,KAAK,WAAW;AAAA,MAClC,CAAC,UAAU,MAAM,KAAK,MAAM,YAAY,MAAM,GAAG,MAAM;AAAA,IACzD;AACA,QAAI,gBAAgB,GAAI,OAAM,IAAI,MAAM,uCAAuC,QAAQ,EAAE;AACzF,UAAM,SAAS,KAAK,OAAO,WAAW;AACtC,UAAM,OAAO,4BAAW,oBAAoB,OAAO,MAAM,KAAK,MAAM;AACpE,6BAAyB,IAAI;AAC7B,QAAI,KAAK,oBAAoB,IAAI,GAAG;AAClC,YAAM,IAAI,MAAM,4CAA4C,IAAI,EAAE;AAAA,IACpE;AACA,UAAM,QAAQ,gBAAgB,MAAM;AACpC,UAAM,KAAK,YAAY,KAAK,MAAM;AAClC,UAAM,OAAO;AACb,UAAM,iBAAiB;AACvB,UAAM,OAAO;AACb,SAAK,OAAO,OAAO,cAAc,GAAG,GAAG,KAAK;AAC5C,UAAM,YAAY,IAAI,eAAe,OAAO,KAAK,UAAU,KAAK,cAAc;AAC9E,SAAK,WAAW,OAAO,cAAc,GAAG,GAAG,SAAS;AACpD,eAAK,mBAAL,8BAAsB;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,QAAQ;AAAA,IACV;AACA,WAAO;AAAA,EACT;AACF;AAhHsC;AAA/B,IAAM,2BAAN;AAkHP,SAAS,sBAAsB,MAAc,IAA6B;AACxE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAAC,EAAE,YAAY,MAAM,OAAO,KAAK,CAAC,EAAE,CAAC;AAAA,IACnF,SAAS,CAAC;AAAA,IACV,MAAM,CAAC;AAAA,IACP,cAAc,CAAC;AAAA,IACf,YAAY,CAAC;AAAA,IACb,QAAQ,CAAC;AAAA,IACT,iBAAiB,CAAC;AAAA,IAClB,oBAAoB,CAAC;AAAA,IACrB,UAAU,CAAC;AAAA,IACX,kBAAkB,CAAC;AAAA,IACnB,UAAU,CAAC;AAAA,IACX,QAAQ,CAAC;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,OAAO,CAAC;AAAA,EACV;AACF;AAnBS;AAqBT,SAAS,gBAAgB,YAA0D;AACjF,SAAO,WAAW,IAAI,CAAC,SAAU,iCAC5B,OAD4B;AAAA,IAE/B,MAAM,KAAK,OAAO,mBAAK,KAAK,QAAS;AAAA,IACrC,YAAY,KAAK,WAAW,IAAI,CAAC,cAAe,mBAAK,UAAY;AAAA,EACnE,EAAE;AACJ;AANS;AAQT,SAAS,YAAY,QAAmC;AACtD,MAAI,MAAM;AACV,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,OAAO,MAAM,EAAE;AAC7B,QAAI,OAAO,SAAS,KAAK,EAAG,OAAM,KAAK,IAAI,KAAK,KAAK;AAAA,EACvD;AACA,SAAO,OAAO,MAAM,KAAK,OAAO,SAAS,CAAC;AAC5C;AAPS;AAST,SAAS,oBAAoB,UAAkB,QAAmC;AAChF,QAAM,QAAQ,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,MAAM,IAAI,CAAC;AACvD,WAAS,QAAQ,GAAG,QAAQ,KAAM,SAAS;AACzC,UAAM,OAAO,GAAG,QAAQ,KAAK,KAAK;AAClC,QAAI,KAAK,UAAU,MAAM,CAAC,MAAM,IAAI,IAAI,EAAG,QAAO;AAAA,EACpD;AACA,QAAM,IAAI;AAAA,IACR,6EAA6E,QAAQ;AAAA,EACvF;AACF;AATS;AAWT,SAAS,gBAAgB,OAAyC;AAChE,SAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AACzC;AAFS;;;AC5pBF,IAAM,oBAAN,MAAM,kBAAiB;AAAA,EAAvB;AACL,wBAAiB,SAAiC,CAAC;AAAA;AAAA,EAEnD,OAAO,UAAuC;AAC5C,SAAK,MAAM,KAAK,cAAc,QAAQ,CAAC;AAAA,EACzC;AAAA,EAEA,OAAgC;AAC9B,WAAO,KAAK,MAAM,IAAI,aAAa;AAAA,EACrC;AAAA,EAEA,QAAc;AACZ,SAAK,MAAM,SAAS;AAAA,EACtB;AAAA,EAEA,YAAqB;AACnB,WAAO,KAAK,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,QAAQ;AAAA,EACzD;AACF;AAlB8B;AAAvB,IAAM,mBAAN;AAoBA,SAAS,cAAc,UAAwD;AACpF,SAAO,KAAK,MAAM,KAAK,UAAU,QAAQ,CAAC;AAC5C;AAFgB;;;AC1GT,IAAM,qBAAN,MAAM,mBAAkB;AAAA,EAQrB,YAAY,MAAuE;AAP3F,wBAAS;AACT,wBAAS;AACT,wBAAS;AACT,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB,eAAc,IAAI,iBAAiB;AAGlD,SAAK,aAAa,KAAK;AACvB,SAAK,MAAM,KAAK;AAChB,SAAK,QAAQ,KAAK;AAClB,SAAK,aAAa,IAAI;AAAA,MAAyB,KAAK,MAAM;AAAA,MAAQ,KAAK;AAAA,MAAO,CAAC,aAC7E,KAAK,YAAY,OAAO,QAAQ;AAAA,IAClC;AACA,SAAK,QAAQ,IAAI,yBAAyB,KAAK,MAAM,YAAY;AAAA,EACnE;AAAA,EAEA,aAAa,QAAQ,OAAiC,OAAyB,CAAC,GAA+B;AAC7G,UAAM,MAAM,MAAM,QAAQ,KAAK;AAC/B,WAAO,mBAAkB,YAAY,KAAK,IAAI;AAAA,EAChD;AAAA,EAEA,OAAO,YAAY,KAAc,OAAyB,CAAC,GAAsB;AAnCnF;AAoCI,WAAO,IAAI,mBAAkB;AAAA,MAC3B,aAAY,UAAK,eAAL,YAAmB,SAAS,KAAK,IAAI,CAAC;AAAA,MAClD;AAAA,MACA,OAAO,kBAAkB,GAAG;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,UAAU,OAA2B,OAAyB,CAAC,GAAsB;AA3C9F;AA4CI,WAAO,IAAI,mBAAkB;AAAA,MAC3B,aAAY,UAAK,eAAL,YAAmB,SAAS,KAAK,IAAI,CAAC;AAAA,MAClD,KAAK,cAAc;AAAA,MACnB,OAAO,qBAAqB,KAAK;AAAA,IACnC,CAAC;AAAA,EACH;AAAA,EAEA,UAA8B;AAC5B,WAAO,qBAAqB,KAAK,KAAK;AAAA,EACxC;AAAA,EAEA,SAA2B;AACzB,WAAO,YAAY,KAAK,MAAM,MAAM;AAAA,EACtC;AAAA,EAEA,eAAwC;AACtC,WAAO,KAAK,YAAY,KAAK;AAAA,EAC/B;AAAA,EAEA,wBAAwB,OAAiC;AACvD,UAAM,OAAO,qBAAqB,KAAK;AACvC,SAAK,MAAM,cAAc,OAAO,GAAG,KAAK,MAAM,cAAc,QAAQ,GAAG,KAAK,aAAa;AACzF,SAAK,MAAM,aAAa,OAAO,GAAG,KAAK,MAAM,aAAa,QAAQ,GAAG,KAAK,YAAY;AACtF,SAAK,MAAM,SAAS,KAAK;AACzB,SAAK,MAAM,OAAO,OAAO,GAAG,KAAK,MAAM,OAAO,QAAQ,GAAG,KAAK,MAAM;AACpE,WAAO,eAAe,MAAM,cAAc;AAAA,MACxC,OAAO,IAAI;AAAA,QAAyB,KAAK,MAAM;AAAA,QAAQ,KAAK;AAAA,QAAO,CAAC,aAClE,KAAK,YAAY,OAAO,QAAQ;AAAA,MAClC;AAAA,MACA,UAAU;AAAA,MACV,cAAc;AAAA,IAChB,CAAC;AACD,WAAO,eAAe,MAAM,SAAS;AAAA,MACnC,OAAO,IAAI,yBAAyB,KAAK,MAAM,YAAY;AAAA,MAC3D,UAAU;AAAA,MACV,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,iBAAuB;AACrB,SAAK,YAAY,MAAM;AAAA,EACzB;AAAA,EAEA,aAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,QAA6B;AACjC,QAAI,KAAK,IAAI,MAAM,SAAS,GAAG;AAC7B,aAAO,MAAM,+BAA+B,KAAK,KAAK,CAAC;AAAA,IACzD;AACA,+BAA2B,KAAK,KAAK,KAAK,KAAK;AAC/C,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AACF;AAtF+B;AAAxB,IAAM,oBAAN;AAwFP,SAAS,qBAAqB,OAA+C;AAC3E,SAAO;AAAA,IACL,eAAe,CAAC,GAAG,MAAM,aAAa;AAAA,IACtC,cAAc,MAAM,aAAa,IAAI,CAAC,SAAU,mBAAK,KAAO;AAAA,IAC5D,QAAQ,YAAY,MAAM,MAAM;AAAA,IAChC,QAAQ,MAAM,OAAO,IAAI,CAAC,UAAW,iCAChC,QADgC;AAAA,MAEnC,YAAY,MAAM,WAAW,IAAI,CAAC,SAAS;AACzC,cAAM,SAAS,iCACV,OADU;AAAA,UAEb,YAAY,KAAK,WAAW,IAAI,CAAC,cAAe,mBAAK,UAAY;AAAA,QACnE;AACA,YAAI,KAAK,MAAM;AACb,iBAAO,OAAO,mBAAK,KAAK;AAAA,QAC1B;AACA,eAAO;AAAA,MACT,CAAC;AAAA,MACD,SAAS,MAAM,QAAQ,IAAI,CAAC,WAAY,mBAAK,OAAS;AAAA,MACtD,MAAM,MAAM,KAAK,IAAI,CAAC,QAAS,mBAAK,IAAM;AAAA,MAC1C,cAAc,MAAM,aAAa,IAAI,CAAC,UAAW,mBAAK,MAAQ;AAAA,MAC9D,YAAY,MAAM,WAAW,IAAI,CAAC,cAAe,mBAAK,UAAY;AAAA,MAClE,QAAQ,MAAM,OAAO,IAAI,CAAC,UAAW,iCAChC,QADgC;AAAA,QAEnC,SAAS,MAAM,QAAQ,IAAI,CAAC,WAAY,mBAAK,OAAS;AAAA,QACtD,YAAY,MAAM,aACd,iCACK,MAAM,aADX;AAAA,UAEE,eAAe,MAAM,WAAW,cAAc,IAAI,CAAC,WAAY,iCAC1D,SAD0D;AAAA,YAE7D,SAAS,OAAO,UAAU,CAAC,GAAG,OAAO,OAAO,IAAI;AAAA,UAClD,EAAE;AAAA,UACF,WAAW,MAAM,WAAW,YACxB,iCACK,MAAM,WAAW,YADtB;AAAA,YAEE,YAAY,MAAM,WAAW,UAAU,WAAW,IAAI,CAAC,cAAe,mBAAK,UAAY;AAAA,UACzF,KACA;AAAA,QACN,KACA;AAAA,QACJ,OAAO,MAAM,QAAQ,mBAAK,MAAM,SAAU;AAAA,MAC5C,EAAE;AAAA,MACF,iBAAiB,MAAM,gBAAgB,IAAI,CAAC,eAAgB,mBAAK,WAAa;AAAA,MAC9E,oBAAoB,MAAM,mBAAmB,IAAI,CAAC,WAAY,iCACzD,SADyD;AAAA,QAE5D,OAAO,OAAO,MAAM,IAAI,CAAC,SAAU,iCAC9B,OAD8B;AAAA,UAEjC,UAAU,CAAC,GAAG,KAAK,QAAQ;AAAA,QAC7B,EAAE;AAAA,MACJ,EAAE;AAAA,MACF,UAAU,MAAM,SAAS,IAAI,CAAC,YAAa,mBAAK,QAAU;AAAA,MAC1D,kBAAkB,MAAM,iBAAiB,IAAI,CAAC,YAAa,mBAAK,QAAU;AAAA,MAC1E,UAAU,MAAM,SAAS,IAAI,CAAC,YAAa,iCACtC,UADsC;AAAA,QAEzC,SAAS,QAAQ,QAAQ,IAAI,CAAC,WAAY,iCACrC,SADqC;AAAA,UAExC,MAAM,OAAO,OAAO,mBAAK,OAAO,QAAS;AAAA,UACzC,IAAI,OAAO,KAAK,mBAAK,OAAO,MAAO;AAAA,UACnC,QAAQ,OAAO,SAAS,mBAAK,OAAO,UAAW;AAAA,QACjD,EAAE;AAAA,MACJ,EAAE;AAAA,MACF,QAAQ,MAAM,OAAO,IAAI,CAAC,UAAW,iCAChC,QADgC;AAAA,QAEnC,aAAa,CAAC,GAAG,MAAM,WAAW;AAAA,MACpC,EAAE;AAAA,MACF,QAAQ,MAAM,OAAO,IAAI,CAAC,UAAW,mBAAK,MAAQ;AAAA,MAClD,OAAO,MAAM,MAAM,IAAI,CAAC,SAAU,mBAAK,KAAO;AAAA,IAChD,EAAE;AAAA,EACJ;AACF;AApES;AAsET,SAAS,YAAY,QAA4C;AAC/D,SAAO;AAAA,IACL,eAAe,OAAO,cAAc,IAAI,CAAC,WAAY,mBAAK,OAAS;AAAA,IACnE,OAAO,OAAO,MAAM,IAAI,CAAC,SAAU,iCAC9B,OAD8B;AAAA,MAEjC,OAAO,KAAK,QAAQ,mBAAK,KAAK,SAAU;AAAA,IAC1C,EAAE;AAAA,IACF,OAAO,OAAO,MAAM,IAAI,CAAC,SAAU,iCAC9B,OAD8B;AAAA,MAEjC,iBAAiB,KAAK,kBAAkB,mBAAK,KAAK,mBAAoB;AAAA,MACtE,iBAAiB,KAAK,kBAAkB,mBAAK,KAAK,mBAAoB;AAAA,IACxE,EAAE;AAAA,IACF,SAAS,OAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,MACvC,MAAM,OAAO,OAAO,iCAAK,OAAO,OAAZ,EAAkB,OAAO,OAAO,KAAK,QAAQ,mBAAK,OAAO,KAAK,SAAU,OAAU,KAAI;AAAA,MAC1G,OAAO,OAAO,QAAQ,iCAAK,OAAO,QAAZ,EAAmB,OAAO,OAAO,MAAM,QAAQ,mBAAK,OAAO,MAAM,SAAU,OAAU,KAAI;AAAA,MAC/G,KAAK,OAAO,MAAM,iCAAK,OAAO,MAAZ,EAAiB,OAAO,OAAO,IAAI,QAAQ,mBAAK,OAAO,IAAI,SAAU,OAAU,KAAI;AAAA,MACrG,QAAQ,OAAO,SACX,iCAAK,OAAO,SAAZ,EAAoB,OAAO,OAAO,OAAO,QAAQ,mBAAK,OAAO,OAAO,SAAU,OAAU,KACxF;AAAA,MACJ,UAAU,OAAO,WACb,iCAAK,OAAO,WAAZ,EAAsB,OAAO,OAAO,SAAS,QAAQ,mBAAK,OAAO,SAAS,SAAU,OAAU,KAC9F;AAAA,IACN,EAAE;AAAA,IACF,aAAa,OAAO,YAAY,IAAI,CAAC,WAAY,iCAC5C,SAD4C;AAAA,MAE/C,WAAW,OAAO,YAAY,mBAAK,OAAO,aAAc;AAAA,IAC1D,EAAE;AAAA,EACJ;AACF;AA5BS;;;AC/IF,SAAS,oBAAoB,OAAwC;AA3B5E;AA4BE,QAAM,MAAM;AACZ,SAAO;AAAA,IACL,UAAS,gCAAK,YAAL,YAAgB,OAAO,KAAK;AAAA,IACrC,MAAM,2BAAK;AAAA,IACX,OAAO,2BAAK;AAAA,EACd;AACF;AAPgB;;;ACzBhB,eAAsB,mBACpB,UACA,MACA,MACA,WACA,QACkB;AAClB,MAAI,iCAAQ,SAAS;AACnB,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AAEA,QAAM,SAAS,IAAI;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EAAwC,IAAI;AAAA;AAAA,EAC9C;AAEA,QAAM,YAAY,OAAO,UAAU,IAAI;AACvC,QAAM,QAA4B,CAAC,SAAS;AAC5C,MAAI;AACJ,MAAI;AAEJ,MAAI,YAAY,GAAG;AACjB,UAAM;AAAA,MACJ,IAAI,QAAQ,CAAC,GAAG,WAAW;AACzB,wBAAgB;AAAA,UACd,MAAM,OAAO,IAAI,MAAM,8BAA8B,SAAS,IAAI,CAAC;AAAA,UACnE;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,QAAQ;AACV,UAAM;AAAA,MACJ,IAAI,QAAQ,CAAC,GAAG,WAAW;AACzB,uBAAe,6BAAM,OAAO,IAAI,MAAM,sBAAsB,CAAC,GAA9C;AACf,eAAO,iBAAiB,SAAS,cAAc,EAAE,MAAM,KAAK,CAAC;AAAA,MAC/D,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI;AACF,WAAO,MAAM,QAAQ,KAAK,KAAK;AAAA,EACjC,UAAE;AACA,QAAI,cAAe,cAAa,aAAa;AAC7C,QAAI,UAAU,aAAc,QAAO,oBAAoB,SAAS,YAAY;AAAA,EAC9E;AACF;AAhDsB;;;ACWf,SAAS,6BAA6B,MAAwD;AACnG,MAAI,WAAqC;AAEzC,SAAO,sCAAeC,UAAS,KAA6B;AAC1D,QAAI,QAAQ,QAAQ,OAAO,QAAQ,SAAU;AAC7C,UAAM,MAAM;AACZ,QAAI,IAAI,SAAS,UAAW;AAC5B,UAAM,MAAM;AAEZ,QAAI;AACF,UAAI;AACJ,cAAQ,IAAI,QAAQ;AAAA,QAClB,KAAK,YAAY;AACf,gBAAM,CAAC,OAAO,IAAI,IAAI,IAAI;AAC1B,qBAAW,MAAM,kBAAkB,QAAQ,OAAO,IAAI;AACtD,mBAAS;AAAA,YACP,YAAY,SAAS;AAAA,UACvB;AACA;AAAA,QACF;AAAA,QACA,KAAK,cAAc;AACjB,gBAAM,CAAC,OAAO,IAAI,IAAI,IAAI;AAC1B,qBAAW,kBAAkB,UAAU,OAAO,IAAI;AAClD,mBAAS;AAAA,YACP,YAAY,SAAS;AAAA,UACvB;AACA;AAAA,QACF;AAAA,QACA,KAAK,YAAY;AACf,yBAAe,QAAQ;AACvB,mBAAS,SAAS,QAAQ;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,kBAAkB;AACrB,yBAAe,QAAQ;AACvB,mBAAS,SAAS,aAAa;AAC/B;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,yBAAe,QAAQ;AACvB,mBAAS,eAAe;AACxB,mBAAS;AACT;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,yBAAe,QAAQ;AACvB,mBAAS,MAAM,SAAS,MAAM;AAC9B;AAAA,QACF;AAAA,QACA,KAAK,kBAAkB;AACrB,yBAAe,QAAQ;AACvB,gBAAM,CAAC,MAAM,MAAM,SAAS,IAAI,IAAI;AAKpC,mBAAS,MAAM,mBAAmB,UAAU,MAAM,MAAM,SAAS;AACjE;AAAA,QACF;AAAA,QACA,KAAK,WAAW;AACd,qBAAW;AACX,mBAAS;AACT;AAAA,QACF;AAAA,QACA;AACE,gBAAM,IAAI,MAAM,iCAAiC,IAAI,MAAM,EAAE;AAAA,MACjE;AACA,WAAK,EAAE,MAAM,YAAY,IAAI,IAAI,IAAI,OAAO,CAA4B;AAAA,IAC1E,SAAS,OAAO;AACd,WAAK,EAAE,MAAM,SAAS,IAAI,IAAI,IAAI,OAAO,oBAAoB,KAAK,EAAE,CAAyB;AAAA,IAC/F;AAAA,EACF,GApEO;AAqET;AAxEgB;AA0EhB,SAAS,eAAe,UAA2E;AACjG,MAAI,CAAC,SAAU,OAAM,IAAI,MAAM,oCAAoC;AACrE;AAFS;;;ACrFT,IAAM,MAAM;AACZ,IAAI,OAAO,IAAI,gBAAgB,cAAc,OAAO,IAAI,qBAAqB,YAAY;AACvF,QAAM,IAAI,MAAM,iFAAiF;AACnG;AAEA,IAAM,WAAW,6BAA6B,CAAC,SAAS;AACtD,MAAI,YAAY,IAAI;AACtB,CAAC;AAED,IAAI,iBAAiB,WAAW,CAAC,UAA8B;AAC7D,OAAK,SAAS,MAAM,IAAI;AAC1B,CAAC;","names":["parseXmlDocument","CONTENT_TYPES_PATH","CONTENT_TYPES_NS","CONTENT_TYPES_CTYPE","parseXmlDocument","xmlText","_a","firstChildNs","childElementsNs","optionalXmlPart","textOf","firstChildNs","childElementsNs","parseRelationships","dirname","normalizePath","resolveRelationshipTarget","parseOptionalNumber","parseBooleanAttr","setIfDefined","_a","_b","parseXmlDocument","CONTENT_TYPES_NS","DRAWING_NS","parseRelationships","resolveRelationshipTarget","_a","xmlAttr","parseXmlDocument","drawing","relationshipTargetsByType","dirname","normalizePath","override","normalizeSheetCells","computeDimension","sheet","dispatch"]}