@arbidocs/coedit 0.5.21 → 0.5.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/template/xml.ts","../src/template/pkg.ts","../src/template/merge.ts","../src/template/blocks.ts","../src/template/track.ts","../src/template/divergence.ts","../src/template/legal.ts","../src/template/numbering.ts"],"names":["readXml","walk","strFromU8","unzipSync","strToU8","zipSync","copy","style","zlibSync"],"mappings":"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","file":"template.cjs","sourcesContent":["/**\n * A small mutable XML tree over core's hardened reader (`readXml`: no DTDs or entities, bounded),\n * for rewriting WordprocessingML parts. Names are qualified as written (`w:style`); every part this\n * module edits is written by Word, LibreOffice or this engine with the conventional prefixes, and\n * `readPart` refuses a part whose `w` prefix is bound elsewhere rather than editing it blind.\n */\nimport { readXml } from '@docx-editor.dev/core/store'\n\nexport const W_NS = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'\nexport const R_NS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'\n\nexport interface El {\n name: string\n attrs: Record<string, string>\n children: Node[]\n}\nexport type Node = El | string\n\nexport class TemplateError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'TemplateError'\n }\n}\n\n/** Parse one part. Text is decoded; comments and the declaration are dropped. */\nexport function parse(xml: string, part = 'part'): El {\n const read = readXml(xml, { maxBytes: 64 * 1024 * 1024, maxElements: 2_000_000 })\n if (!read.ok) throw new TemplateError(`${part} is not readable XML (${read.reason})`)\n const convert = (node: (typeof read.nodes)[number]): Node =>\n node.type === 'text'\n ? node.value\n : { name: node.name, attrs: { ...node.attributes }, children: node.children.map(convert) }\n const root = read.nodes.map(convert).find((n): n is El => typeof n !== 'string')\n if (!root) throw new TemplateError(`${part} has no root element`)\n const w = root.attrs['xmlns:w']\n if (w !== undefined && w !== W_NS) throw new TemplateError(`${part} binds w: to ${w}`)\n return root\n}\n\nconst escText = (s: string) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\nconst escAttr = (s: string) => escText(s).replace(/\"/g, '&quot;')\n\nexport function serialize(root: El): string {\n const out: string[] = ['<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n']\n const walk = (node: Node) => {\n if (typeof node === 'string') return void out.push(escText(node))\n out.push('<', node.name)\n for (const [k, v] of Object.entries(node.attrs)) out.push(' ', k, '=\"', escAttr(v), '\"')\n if (node.children.length === 0) return void out.push('/>')\n out.push('>')\n node.children.forEach(walk)\n out.push('</', node.name, '>')\n }\n walk(root)\n return out.join('')\n}\n\nexport const el = (\n name: string,\n attrs: Record<string, string> = {},\n children: Node[] = []\n): El => ({\n name,\n attrs,\n children,\n})\nexport const isEl = (n: Node | undefined): n is El => typeof n === 'object' && n !== null\nexport const kids = (e: El, name?: string): El[] =>\n e.children.filter((c): c is El => isEl(c) && (name === undefined || c.name === name))\nexport const kid = (e: El | undefined, name: string): El | undefined =>\n e ? kids(e, name)[0] : undefined\n/** `w:val` of a child, e.g. `val(style, 'w:basedOn')`. */\nexport const val = (e: El | undefined, name: string): string | undefined =>\n kid(e, name)?.attrs['w:val']\n\n/** Every descendant element (depth-first, document order), the root included. */\nexport function* walk(e: El): Generator<El> {\n yield e\n for (const c of e.children) if (isEl(c)) yield* walk(c)\n}\n\nexport const clone = <T extends Node>(n: T): T =>\n (typeof n === 'string'\n ? n\n : { name: n.name, attrs: { ...n.attrs }, children: n.children.map(clone) }) as T\n\n/** Text of an element's `w:t` descendants. */\nexport const textOf = (e: El): string =>\n [...walk(e)]\n .filter((x) => x.name === 'w:t')\n .map((x) => x.children.filter((c): c is string => typeof c === 'string').join(''))\n .join('')\n","/**\n * A DOCX/DOTX as a map of part names to bytes, with the OPC plumbing a merge needs: content types,\n * relationships, and resolving a relationship's target to a part name.\n */\nimport { strFromU8, strToU8, unzipSync, zipSync } from 'fflate'\nimport { el, kids, parse, serialize, TemplateError, type El } from './xml'\n\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'\nexport const RT = {\n officeDocument: `${REL}/officeDocument`,\n styles: `${REL}/styles`,\n numbering: `${REL}/numbering`,\n theme: `${REL}/theme`,\n fontTable: `${REL}/fontTable`,\n settings: `${REL}/settings`,\n header: `${REL}/header`,\n footer: `${REL}/footer`,\n image: `${REL}/image`,\n hyperlink: `${REL}/hyperlink`,\n glossary: `${REL}/glossaryDocument`,\n attachedTemplate: `${REL}/attachedTemplate`,\n} as const\nconst WML = 'application/vnd.openxmlformats-officedocument.wordprocessingml'\nexport const CT = {\n document: `${WML}.document.main+xml`,\n template: `${WML}.template.main+xml`,\n macroDocument: 'application/vnd.ms-word.document.macroEnabled.main+xml',\n macroTemplate: 'application/vnd.ms-word.template.macroEnabledTemplate.main+xml',\n styles: `${WML}.styles+xml`,\n numbering: `${WML}.numbering+xml`,\n settings: `${WML}.settings+xml`,\n fontTable: `${WML}.fontTable+xml`,\n header: `${WML}.header+xml`,\n footer: `${WML}.footer+xml`,\n glossary: `${WML}.document.glossary+xml`,\n theme: 'application/vnd.openxmlformats-officedocument.theme+xml',\n rels: 'application/vnd.openxmlformats-package.relationships+xml',\n} as const\n\nexport interface Rel {\n id: string\n type: string\n target: string\n external: boolean\n}\n\n/** Part names are kept without the leading slash, as the zip stores them. */\nexport class Pkg {\n readonly files: Map<string, Uint8Array>\n private types: El\n\n constructor(files: Map<string, Uint8Array>) {\n this.files = files\n const ct = this.find('[Content_Types].xml')\n if (!ct) throw new TemplateError('not a Word package: no [Content_Types].xml')\n this.types = parse(strFromU8(files.get(ct)!), '[Content_Types].xml')\n }\n\n static read(bytes: Uint8Array): Pkg {\n let files: Record<string, Uint8Array>\n try {\n files = unzipSync(bytes)\n } catch {\n throw new TemplateError('not a Word package: not a zip')\n }\n return new Pkg(new Map(Object.entries(files).filter(([n]) => !n.endsWith('/'))))\n }\n\n write(): Uint8Array {\n this.files.set(\n this.find('[Content_Types].xml') ?? '[Content_Types].xml',\n strToU8(serialize(this.types))\n )\n return zipSync(Object.fromEntries(this.files), { level: 6 })\n }\n\n /** The stored name of a part, matched case-insensitively as OPC does. */\n find(name: string): string | undefined {\n const key = name.replace(/^\\//, '').toLowerCase()\n for (const n of this.files.keys()) if (n.toLowerCase() === key) return n\n return undefined\n }\n has(name: string) {\n return this.find(name) !== undefined\n }\n text(name: string): string | undefined {\n const n = this.find(name)\n return n === undefined ? undefined : strFromU8(this.files.get(n)!)\n }\n xml(name: string): El | undefined {\n const t = this.text(name)\n return t === undefined ? undefined : parse(t, name)\n }\n setXml(name: string, root: El, contentType?: string) {\n this.files.set(this.find(name) ?? name, strToU8(serialize(root)))\n if (contentType) this.setContentType(name, contentType)\n }\n setBytes(name: string, bytes: Uint8Array, contentType?: string) {\n this.files.set(this.find(name) ?? name, bytes)\n if (contentType) this.setContentType(name, contentType)\n }\n remove(name: string) {\n const n = this.find(name)\n if (n === undefined) return\n this.files.delete(n)\n this.types.children = this.types.children.filter(\n (c) =>\n !(\n typeof c !== 'string' &&\n c.name === 'Override' &&\n c.attrs.PartName.toLowerCase() === `/${n.toLowerCase()}`\n )\n )\n this.files.delete(relsName(n))\n }\n\n contentType(name: string): string | undefined {\n const part = `/${name.replace(/^\\//, '')}`.toLowerCase()\n const override = kids(this.types, 'Override').find(\n (o) => o.attrs.PartName.toLowerCase() === part\n )\n if (override) return override.attrs.ContentType\n const ext = part.slice(part.lastIndexOf('.') + 1)\n return kids(this.types, 'Default').find((d) => d.attrs.Extension.toLowerCase() === ext)?.attrs\n .ContentType\n }\n setContentType(name: string, type: string) {\n const part = `/${name.replace(/^\\//, '')}`\n const override = kids(this.types, 'Override').find(\n (o) => o.attrs.PartName.toLowerCase() === part.toLowerCase()\n )\n if (override) override.attrs.ContentType = type\n else this.types.children.push(el('Override', { PartName: part, ContentType: type }))\n }\n /** A `Default` for an extension (media), unless one exists. */\n ensureDefault(ext: string, type: string) {\n if (\n !kids(this.types, 'Default').some(\n (d) => d.attrs.Extension.toLowerCase() === ext.toLowerCase()\n )\n )\n this.types.children.unshift(el('Default', { Extension: ext, ContentType: type }))\n }\n\n rels(owner: string): Rel[] {\n const root = this.xml(relsName(owner))\n if (!root) return []\n return kids(root, 'Relationship').map((r) => ({\n id: r.attrs.Id,\n type: r.attrs.Type,\n target: r.attrs.Target,\n external: r.attrs.TargetMode === 'External',\n }))\n }\n setRels(owner: string, rels: Rel[]) {\n const root = el(\n 'Relationships',\n { xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships' },\n rels.map((r) =>\n el('Relationship', {\n Id: r.id,\n Type: r.type,\n Target: r.target,\n ...(r.external ? { TargetMode: 'External' } : {}),\n })\n )\n )\n this.setXml(relsName(owner), root)\n }\n /** Add a relationship from `owner`; returns its new id. */\n addRel(owner: string, type: string, target: string, external = false): string {\n const rels = this.rels(owner)\n const id = freshId(new Set(rels.map((r) => r.id)), 'rIdT')\n rels.push({ id, type, target, external })\n this.setRels(owner, rels)\n return id\n }\n\n /** The part a relationship of `owner` points at (internal targets only). */\n target(owner: string, rel: Rel): string {\n return resolveTarget(owner, rel.target)\n }\n /** The first internal part of a relationship type from `owner`. */\n partOf(owner: string, type: string): string | undefined {\n const rel = this.rels(owner).find((r) => r.type === type && !r.external)\n return rel && this.find(this.target(owner, rel))\n }\n /** The main document part (`word/document.xml` by convention). */\n get main(): string {\n const main = this.partOf('', RT.officeDocument)\n if (!main) throw new TemplateError('not a Word package: no main document part')\n return main\n }\n}\n\n/** `word/document.xml` → `word/_rels/document.xml.rels`; '' (the package) → `_rels/.rels`. */\nfunction relsName(owner: string): string {\n const slash = owner.lastIndexOf('/')\n return `${owner.slice(0, slash + 1)}_rels/${owner.slice(slash + 1)}.rels`\n}\n\nfunction resolveTarget(owner: string, target: string): string {\n if (target.startsWith('/')) return target.slice(1)\n const base = owner\n .slice(0, owner.lastIndexOf('/') + 1)\n .split('/')\n .filter(Boolean)\n for (const seg of target.split('/')) {\n if (seg === '..') base.pop()\n else if (seg !== '.' && seg !== '') base.push(seg)\n }\n return base.join('/')\n}\n\n/** A target for `part` relative to `owner`'s folder. */\nexport function relativeTarget(owner: string, part: string): string {\n const from = owner.slice(0, owner.lastIndexOf('/') + 1)\n return part.startsWith(from) ? part.slice(from.length) : `/${part}`\n}\n\nfunction freshId(taken: ReadonlySet<string>, prefix: string): string {\n for (let i = 1; ; i++) if (!taken.has(`${prefix}${i}`)) return `${prefix}${i}`\n}\n\n/** An unused part name like `word/header3.xml` / `word/media/image2.png`. */\nexport function freshPartName(pkg: Pkg, folder: string, stem: string, ext: string): string {\n for (let i = 1; ; i++) {\n const name = `${folder}${stem}${i}.${ext}`\n if (!pkg.has(name)) return name\n }\n}\n","/**\n * House templates the way Word applies them, as pure functions over package bytes:\n *\n * - `newFromTemplate`: File › New from a .dotx/.docx — the whole template package (styles,\n * numbering, theme, fonts, settings, section setup, headers and footers with their media, the\n * starting body) becomes a new document; the glossary stays with the template, as in Word.\n * - `applyTemplate`: Word's Organizer / \"Attach template\" with \"Automatically update document\n * styles\" — the template's docDefaults, latent styles and every style definition replace the\n * document's (house style wins on a style id; styles only the document has stay), with their\n * numbering brought across under fresh ids, the theme, font table entries and layout settings.\n * With `furniture`, the final section also takes the template's page setup and its headers and\n * footers (letterhead, watermark), which is how generated content is put into the house shape.\n *\n * Nothing here knows about the editor: the backend can run the same code on stored bytes.\n */\nimport { CT, Pkg, RT, freshPartName, relativeTarget, type Rel } from './pkg'\nimport { clone, el, isEl, kid, kids, val, walk, W_NS, R_NS, TemplateError, type El } from './xml'\n\n/** Style ids are compared as Word compares them: exactly. Names case-insensitively. */\nconst nameKey = (s: string) => s.trim().toLowerCase()\n\nexport interface ApplyTemplateOptions {\n /** Record the template in settings.xml (`w:attachedTemplate`), e.g. \"House template.dotx\". */\n attachedTemplate?: string\n /** Also take the template's page setup, headers and footers for the final section. */\n furniture?: boolean\n}\n\nexport interface ApplyTemplateReport {\n /** Template style ids written into the document (replaced or added). */\n styles: string[]\n /** Template style id → the document's id it was matched to by name (localised built-ins). */\n renamed: Record<string, string>\n /** Template numId → new numId in the document. */\n numbering: Record<string, string>\n}\n\n/** CT_Settings element order, for the few settings this module writes. */\nconst SETTINGS_ORDER = [\n 'w:writeProtection',\n 'w:view',\n 'w:zoom',\n 'w:removePersonalInformation',\n 'w:removeDateAndTime',\n 'w:doNotDisplayPageBoundaries',\n 'w:displayBackgroundShape',\n 'w:printPostScriptOverText',\n 'w:printFractionalCharacterWidth',\n 'w:printFormsData',\n 'w:embedTrueTypeFonts',\n 'w:embedSystemFonts',\n 'w:saveSubsetFonts',\n 'w:saveFormsData',\n 'w:mirrorMargins',\n 'w:alignBordersAndEdges',\n 'w:bordersDoNotSurroundHeader',\n 'w:bordersDoNotSurroundFooter',\n 'w:gutterAtTop',\n 'w:hideSpellingErrors',\n 'w:hideGrammaticalErrors',\n 'w:activeWritingStyle',\n 'w:proofState',\n 'w:formsDesign',\n 'w:attachedTemplate',\n 'w:linkStyles',\n 'w:stylePaneFormatFilter',\n 'w:stylePaneSortMethod',\n 'w:documentType',\n 'w:mailMerge',\n 'w:revisionView',\n 'w:trackRevisions',\n 'w:doNotTrackMoves',\n 'w:doNotTrackFormatting',\n 'w:documentProtection',\n 'w:autoFormatOverride',\n 'w:styleLockTheme',\n 'w:styleLockQFSet',\n 'w:defaultTabStop',\n 'w:autoHyphenation',\n 'w:consecutiveHyphenLimit',\n 'w:hyphenationZone',\n 'w:doNotHyphenateCaps',\n 'w:showEnvelope',\n 'w:summaryLength',\n 'w:clickAndTypeStyle',\n 'w:defaultTableStyle',\n 'w:evenAndOddHeaders',\n 'w:bookFoldRevPrinting',\n 'w:bookFoldPrinting',\n 'w:bookFoldPrintingSheets',\n 'w:drawingGridHorizontalSpacing',\n 'w:drawingGridVerticalSpacing',\n 'w:displayHorizontalDrawingGridEvery',\n 'w:displayVerticalDrawingGridEvery',\n 'w:doNotUseMarginsForDrawingGridOrigin',\n 'w:drawingGridHorizontalOrigin',\n 'w:drawingGridVerticalOrigin',\n 'w:doNotShadeFormData',\n 'w:noPunctuationKerning',\n 'w:characterSpacingControl',\n 'w:printTwoOnOne',\n 'w:strictFirstAndLastChars',\n 'w:noLineBreaksAfter',\n 'w:noLineBreaksBefore',\n 'w:savePreviewPicture',\n 'w:doNotValidateAgainstSchema',\n 'w:saveInvalidXml',\n 'w:ignoreMixedContent',\n 'w:alwaysShowPlaceholderText',\n 'w:doNotDemarcateInvalidXml',\n 'w:saveXmlDataOnly',\n 'w:useXSLTWhenSaving',\n 'w:saveThroughXslt',\n 'w:showXMLTags',\n 'w:alwaysMergeEmptyNamespace',\n 'w:updateFields',\n 'w:hdrShapeDefaults',\n 'w:footnotePr',\n 'w:endnotePr',\n 'w:compat',\n 'w:docVars',\n 'w:rsids',\n 'm:mathPr',\n 'w:attachedSchema',\n 'w:themeFontLang',\n 'w:clrSchemeMapping',\n 'w:doNotIncludeSubdocsInStats',\n 'w:doNotAutoCompressPictures',\n 'w:forceUpgrade',\n 'w:captions',\n 'w:readModeInkLockDown',\n 'w:smartTagType',\n 'sl:schemaLibrary',\n 'w:shapeDefaults',\n 'w:doNotEmbedSmartTags',\n 'w:decimalSymbol',\n 'w:listSeparator',\n]\n\n/** Put `child` into `parent` where `order` says it goes, replacing one of the same name. */\nfunction placeOrdered(parent: El, child: El, order: readonly string[]) {\n const at = parent.children.findIndex((c) => isEl(c) && c.name === child.name)\n if (at >= 0) return void (parent.children[at] = child)\n const rank = order.indexOf(child.name)\n const before = parent.children.findIndex(\n (c) => isEl(c) && rank >= 0 && order.indexOf(c.name) > rank\n )\n if (before < 0) parent.children.push(child)\n else parent.children.splice(before, 0, child)\n}\n\n/** The template's layout settings Word takes along when it attaches a template. */\nconst TEMPLATE_SETTINGS = [\n 'w:defaultTabStop',\n 'w:characterSpacingControl',\n 'w:compat',\n 'w:themeFontLang',\n 'w:clrSchemeMapping',\n 'w:hyphenationZone',\n 'w:autoHyphenation',\n 'w:defaultTableStyle',\n]\n\nconst W_DOC_ATTRS = { 'xmlns:w': W_NS, 'xmlns:r': R_NS }\n\nfunction ensurePart(\n pkg: Pkg,\n type: string,\n name: string,\n contentType: string,\n root: () => El\n): string {\n const existing = pkg.partOf(pkg.main, type)\n if (existing) return existing\n const part = pkg.has(name)\n ? freshPartName(pkg, 'word/', name.replace(/^word\\/|\\d*\\.xml$/g, ''), 'xml')\n : name\n pkg.setXml(part, root(), contentType)\n pkg.addRel(pkg.main, type, relativeTarget(pkg.main, part))\n return part\n}\n\n// ── Styles and numbering ──────────────────────────────────────────────────────────────────────────\n\ninterface StyleIndex {\n byId: Map<string, El>\n byName: Map<string, El>\n}\nfunction indexStyles(styles: El): StyleIndex {\n const byId = new Map<string, El>()\n const byName = new Map<string, El>()\n for (const s of kids(styles, 'w:style')) {\n const id = s.attrs['w:styleId']\n if (!id) continue\n byId.set(id, s)\n const keys = [val(s, 'w:name'), ...(val(s, 'w:aliases')?.split(',') ?? [])]\n for (const k of keys) if (k) byName.set(`${s.attrs['w:type']}:${nameKey(k)}`, s)\n }\n return { byId, byName }\n}\n\nconst STYLE_REFS = [\n 'w:basedOn',\n 'w:next',\n 'w:link',\n 'w:pStyle',\n 'w:rStyle',\n 'w:tblStyle',\n 'w:numStyleLink',\n 'w:styleLink',\n]\n\n/** Rewrite style-id references in `root` through `map`. */\nfunction renameStyleRefs(root: El, map: ReadonlyMap<string, string>) {\n if (map.size === 0) return\n for (const e of walk(root))\n if (STYLE_REFS.includes(e.name) && map.has(e.attrs['w:val']))\n e.attrs['w:val'] = map.get(e.attrs['w:val'])!\n}\n\n/** Every numId referenced in `root` (numPr/numId). */\nconst numIdsIn = (root: El) =>\n [...walk(root)].filter((e) => e.name === 'w:numId').map((e) => e.attrs['w:val'])\n\nfunction maxId(nodes: El[], attr: string): number {\n return nodes.reduce((m, n) => Math.max(m, Number(n.attrs[attr]) || 0), 0)\n}\n\n/**\n * Bring the numbering `numIds` need from `from` into `into`, under fresh numIds and\n * abstractNumIds; returns the numId map. A template's numbering-style indirection\n * (`w:numStyleLink` → a numbering style → its numId) is followed.\n */\nfunction importNumbering(\n from: El | undefined,\n into: El,\n numIds: Iterable<string>,\n styleNumId: (styleId: string) => string | undefined\n): Map<string, string> {\n const map = new Map<string, string>()\n if (!from) return map\n const nums = new Map(kids(from, 'w:num').map((n) => [n.attrs['w:numId'], n]))\n const abstracts = new Map(kids(from, 'w:abstractNum').map((a) => [a.attrs['w:abstractNumId'], a]))\n const abstractMap = new Map<string, string>()\n let nextNum = maxId(kids(into, 'w:num'), 'w:numId') + 1\n let nextAbstract = maxId(kids(into, 'w:abstractNum'), 'w:abstractNumId') + 1\n const nsids = new Set(kids(into, 'w:abstractNum').map((a) => val(a, 'w:nsid')))\n const queue = [...numIds]\n while (queue.length) {\n const id = queue.shift()!\n if (map.has(id) || id === '0') continue\n const num = nums.get(id)\n if (!num) continue\n const absId = val(num, 'w:abstractNumId')\n if (absId !== undefined && !abstractMap.has(absId)) {\n const abs = abstracts.get(absId)\n if (abs) {\n const copy = clone(abs)\n copy.attrs['w:abstractNumId'] = String(nextAbstract)\n abstractMap.set(absId, String(nextAbstract++))\n // Word identifies a list by its nsid: a clash would join the template's list to one of\n // the document's.\n const nsid = kid(copy, 'w:nsid')\n if (nsid && nsids.has(nsid.attrs['w:val'])) {\n let n = (parseInt(nsid.attrs['w:val'], 16) || 0x10000000) + 1\n while (nsids.has(n.toString(16).toUpperCase().padStart(8, '0'))) n++\n nsid.attrs['w:val'] = n.toString(16).toUpperCase().padStart(8, '0')\n }\n if (nsid) nsids.add(nsid.attrs['w:val'])\n // Picture bullets live in the numbering part's own relationships: fall back to the text.\n for (const l of kids(copy, 'w:lvl'))\n l.children = l.children.filter((c) => !(isEl(c) && c.name === 'w:lvlPicBulletId'))\n // Abstract definitions precede every w:num (CT_Numbering's order).\n const firstNum = into.children.findIndex(\n (c) => isEl(c) && (c.name === 'w:num' || c.name === 'w:numIdMacAtCleanup')\n )\n if (firstNum < 0) into.children.push(copy)\n else into.children.splice(firstNum, 0, copy)\n const link = val(copy, 'w:numStyleLink')\n const linked = link ? styleNumId(link) : undefined\n if (linked) queue.push(linked)\n }\n }\n const copy = clone(num)\n copy.attrs['w:numId'] = String(nextNum)\n map.set(id, String(nextNum++))\n const absRef = kid(copy, 'w:abstractNumId')\n if (absRef && abstractMap.has(absRef.attrs['w:val']))\n absRef.attrs['w:val'] = abstractMap.get(absRef.attrs['w:val'])!\n const cleanup = into.children.findIndex((c) => isEl(c) && c.name === 'w:numIdMacAtCleanup')\n if (cleanup < 0) into.children.push(copy)\n else into.children.splice(cleanup, 0, copy)\n }\n return map\n}\n\nfunction applyStyles(doc: Pkg, tpl: Pkg, report: ApplyTemplateReport) {\n const tplStylesPart = tpl.partOf(tpl.main, RT.styles)\n if (!tplStylesPart) return\n const T = tpl.xml(tplStylesPart)!\n const stylesPart = ensurePart(doc, RT.styles, 'word/styles.xml', CT.styles, () =>\n el('w:styles', { ...W_DOC_ATTRS })\n )\n const D = doc.xml(stylesPart)!\n for (const [k, v] of Object.entries(T.attrs))\n if (k.startsWith('xmlns:') && !(k in D.attrs)) D.attrs[k] = v\n\n // docDefaults and latentStyles: the template's, as Word's Organizer copies them.\n for (const name of ['w:latentStyles', 'w:docDefaults']) {\n const t = kid(T, name)\n if (!t) continue\n const at = D.children.findIndex((c) => isEl(c) && c.name === name)\n if (at >= 0) D.children[at] = clone(t)\n else D.children.unshift(clone(t))\n }\n // keep docDefaults first, then latentStyles\n const dd = kid(D, 'w:docDefaults')\n const ls = kid(D, 'w:latentStyles')\n D.children = D.children.filter((c) => c !== dd && c !== ls)\n D.children.unshift(...([dd, ls].filter(Boolean) as El[]))\n\n // Which id each template style takes in the document: its own, or — for a built-in the document\n // names the same but under another id (a localised \"Überschrift1\" for \"heading 1\") — the\n // document's, so the document's paragraphs keep pointing at the ids they use.\n const dIndex = indexStyles(D)\n const rename = new Map<string, string>()\n for (const s of kids(T, 'w:style')) {\n const id = s.attrs['w:styleId']\n if (dIndex.byId.has(id)) continue\n const name = val(s, 'w:name')\n const match = name && dIndex.byName.get(`${s.attrs['w:type']}:${nameKey(name)}`)\n if (match && !kids(T, 'w:style').some((o) => o.attrs['w:styleId'] === match.attrs['w:styleId']))\n rename.set(id, match.attrs['w:styleId'])\n }\n const imported = kids(T, 'w:style').map((s) => {\n const copy = clone(s)\n if (rename.has(copy.attrs['w:styleId']))\n copy.attrs['w:styleId'] = rename.get(copy.attrs['w:styleId'])!\n renameStyleRefs(copy, rename)\n return copy\n })\n\n // Numbering the imported styles use, under fresh ids.\n const tplNumbering = tpl.partOf(tpl.main, RT.numbering)\n const T_num = tplNumbering ? tpl.xml(tplNumbering) : undefined\n const wanted = imported.flatMap(numIdsIn)\n let numMap = new Map<string, string>()\n if (T_num && wanted.length) {\n const numberingPart = ensurePart(doc, RT.numbering, 'word/numbering.xml', CT.numbering, () =>\n el('w:numbering', { ...W_DOC_ATTRS })\n )\n const D_num = doc.xml(numberingPart)!\n const tplStyleNum = (sid: string) => {\n const st = kids(T, 'w:style').find((s) => s.attrs['w:styleId'] === sid)\n return st ? numIdsIn(st)[0] : undefined\n }\n numMap = importNumbering(T_num, D_num, wanted, tplStyleNum)\n // The levels' style links (w:pStyle in w:lvl) follow the renamed styles.\n for (const abs of kids(D_num, 'w:abstractNum')) renameStyleRefs(abs, rename)\n doc.setXml(numberingPart, D_num)\n }\n for (const s of imported)\n for (const e of walk(s))\n if (e.name === 'w:numId' && numMap.has(e.attrs['w:val']))\n e.attrs['w:val'] = numMap.get(e.attrs['w:val'])!\n\n // Template wins on an id; the document's other styles stay.\n for (const s of imported) {\n const id = s.attrs['w:styleId']\n const at = D.children.findIndex(\n (c) => isEl(c) && c.name === 'w:style' && c.attrs['w:styleId'] === id\n )\n if (at >= 0) D.children[at] = s\n else D.children.push(s)\n }\n // One default per style type: the template's.\n for (const s of imported)\n if (s.attrs['w:default'] === '1' || s.attrs['w:default'] === 'true')\n for (const o of kids(D, 'w:style'))\n if (o !== s && o.attrs['w:type'] === s.attrs['w:type'] && o.attrs['w:default'])\n delete o.attrs['w:default']\n\n doc.setXml(stylesPart, D)\n report.styles = imported.map((s) => s.attrs['w:styleId'])\n report.renamed = Object.fromEntries(rename)\n report.numbering = Object.fromEntries(numMap)\n}\n\n// ── Theme, fonts, settings ────────────────────────────────────────────────────────────────────────\n\nfunction applyTheme(doc: Pkg, tpl: Pkg) {\n const t = tpl.partOf(tpl.main, RT.theme)\n if (!t) return\n const bytes = tpl.files.get(t)!\n const d = doc.partOf(doc.main, RT.theme)\n if (d) return void doc.setBytes(d, bytes)\n const name = doc.has('word/theme/theme1.xml')\n ? freshPartName(doc, 'word/theme/', 'theme', 'xml')\n : 'word/theme/theme1.xml'\n doc.setBytes(name, bytes, CT.theme)\n doc.addRel(doc.main, RT.theme, relativeTarget(doc.main, name))\n}\n\nfunction applyFonts(doc: Pkg, tpl: Pkg) {\n const t = tpl.partOf(tpl.main, RT.fontTable)\n if (!t) return\n const T = tpl.xml(t)!\n const part = ensurePart(doc, RT.fontTable, 'word/fontTable.xml', CT.fontTable, () =>\n el('w:fonts', { ...W_DOC_ATTRS })\n )\n const D = doc.xml(part)!\n for (const f of kids(T, 'w:font')) {\n const copy = clone(f)\n // Embedded (obfuscated) font parts belong to the template's package.\n copy.children = copy.children.filter((c) => !(isEl(c) && /^w:embed/.test(c.name)))\n const at = D.children.findIndex(\n (c) => isEl(c) && c.name === 'w:font' && c.attrs['w:name'] === f.attrs['w:name']\n )\n if (at >= 0) D.children[at] = copy\n else D.children.push(copy)\n }\n doc.setXml(part, D)\n}\n\nfunction settingsOf(pkg: Pkg): { part: string; root: El } {\n const part = ensurePart(pkg, RT.settings, 'word/settings.xml', CT.settings, () =>\n el('w:settings', { ...W_DOC_ATTRS })\n )\n return { part, root: pkg.xml(part)! }\n}\n\nfunction applySettings(doc: Pkg, tpl: Pkg, opts: ApplyTemplateOptions) {\n const tPart = tpl.partOf(tpl.main, RT.settings)\n const T = tPart ? tpl.xml(tPart) : undefined\n const { part, root } = settingsOf(doc)\n if (T)\n for (const name of TEMPLATE_SETTINGS) {\n const t = kid(T, name)\n if (t) placeOrdered(root, clone(t), SETTINGS_ORDER)\n }\n if (opts.furniture && T) {\n const even = kid(T, 'w:evenAndOddHeaders')\n root.children = root.children.filter((c) => !(isEl(c) && c.name === 'w:evenAndOddHeaders'))\n if (even) placeOrdered(root, clone(even), SETTINGS_ORDER)\n }\n if (opts.attachedTemplate) {\n if (!root.attrs['xmlns:r']) root.attrs['xmlns:r'] = R_NS\n const rels = doc.rels(part).filter((r) => r.type !== RT.attachedTemplate)\n doc.setRels(part, rels)\n const id = doc.addRel(part, RT.attachedTemplate, encodeURI(opts.attachedTemplate), true)\n placeOrdered(root, el('w:attachedTemplate', { 'r:id': id }), SETTINGS_ORDER)\n }\n doc.setXml(part, root)\n}\n\n// ── Page furniture ────────────────────────────────────────────────────────────────────────────────\n\n/** Copy a part and the internal parts its relationships reach, under fresh names; returns its name. */\nfunction copyPart(doc: Pkg, tpl: Pkg, source: string, stem: string): string {\n const ext = source.slice(source.lastIndexOf('.') + 1)\n const folder = source.slice(0, source.lastIndexOf('/') + 1)\n const name = freshPartName(doc, folder, stem, ext)\n doc.setBytes(name, tpl.files.get(source)!, tpl.contentType(source))\n const rels: Rel[] = tpl.rels(source).map((r) => {\n if (r.external) return { ...r }\n const target = tpl.find(tpl.target(source, r))\n if (!target) return { ...r }\n const tExt = target.slice(target.lastIndexOf('.') + 1)\n const tFolder = target.slice(0, target.lastIndexOf('/') + 1)\n const tStem = target.slice(tFolder.length, target.length - tExt.length - 1).replace(/\\d+$/, '')\n const copied = freshPartName(doc, tFolder, tStem || 'part', tExt)\n doc.setBytes(copied, tpl.files.get(target)!)\n const type = tpl.contentType(target)\n if (type) {\n if (/^(image|video|audio)\\//.test(type)) doc.ensureDefault(tExt, type)\n else doc.setContentType(copied, type)\n }\n return { ...r, target: relativeTarget(name, copied) }\n })\n if (rels.length) doc.setRels(name, rels)\n return name\n}\n\nfunction finalSectPr(body: El): El | undefined {\n return kid(body, 'w:sectPr')\n}\n\nfunction applyFurniture(doc: Pkg, tpl: Pkg) {\n const tDoc = tpl.xml(tpl.main)!\n const tSect = finalSectPr(kid(tDoc, 'w:body')!)\n if (!tSect) return\n const dRoot = doc.xml(doc.main)!\n const body = kid(dRoot, 'w:body')\n if (!body) throw new TemplateError('the document has no body')\n for (const [k, v] of Object.entries(tDoc.attrs))\n if (k.startsWith('xmlns:') && !(k in dRoot.attrs)) dRoot.attrs[k] = v\n\n // The document's own furniture for the final section goes, unless another section uses it.\n const old = finalSectPr(body)\n const oldIds = old\n ? kids(old)\n .filter((c) => c.name === 'w:headerReference' || c.name === 'w:footerReference')\n .map((c) => c.attrs['r:id'])\n : []\n const stillUsed = new Set(\n [...walk(body)]\n .filter(\n (e) => e !== old && (e.name === 'w:headerReference' || e.name === 'w:footerReference')\n )\n .filter((e) => !old || ![...walk(old)].includes(e))\n .map((e) => e.attrs['r:id'])\n )\n const sect = clone(tSect)\n for (const ref of kids(sect)) {\n if (ref.name !== 'w:headerReference' && ref.name !== 'w:footerReference') continue\n const rel = tpl.rels(tpl.main).find((r) => r.id === ref.attrs['r:id'])\n const source = rel && tpl.find(tpl.target(tpl.main, rel))\n if (!rel || !source) {\n sect.children.splice(sect.children.indexOf(ref), 1)\n continue\n }\n const copied = copyPart(\n doc,\n tpl,\n source,\n ref.name === 'w:headerReference' ? 'header' : 'footer'\n )\n ref.attrs['r:id'] = doc.addRel(doc.main, rel.type, relativeTarget(doc.main, copied))\n }\n if (old) body.children[body.children.indexOf(old)] = sect\n else body.children.push(sect)\n const rels = doc.rels(doc.main)\n for (const id of oldIds) {\n if (stillUsed.has(id)) continue\n const rel = rels.find((r) => r.id === id)\n if (!rel) continue\n doc.remove(doc.target(doc.main, rel))\n rels.splice(rels.indexOf(rel), 1)\n }\n doc.setRels(doc.main, rels)\n doc.setXml(doc.main, dRoot)\n}\n\n// ── Public API ────────────────────────────────────────────────────────────────────────────────────\n\n/** Word's Organizer + attach template, optionally with the template's page furniture. */\nexport function applyTemplate(\n document: Uint8Array,\n template: Uint8Array,\n options: ApplyTemplateOptions = {}\n): { bytes: Uint8Array; report: ApplyTemplateReport } {\n const doc = Pkg.read(document)\n const tpl = Pkg.read(template)\n const report: ApplyTemplateReport = { styles: [], renamed: {}, numbering: {} }\n applyStyles(doc, tpl, report)\n applyTheme(doc, tpl)\n applyFonts(doc, tpl)\n applySettings(doc, tpl, options)\n if (options.furniture) applyFurniture(doc, tpl)\n return { bytes: doc.write(), report }\n}\n\n/**\n * File › New from a template: the template package as a new document. A .dotx/.dotm main part\n * becomes a document part (macros are not carried), the glossary stays behind, and the template\n * is recorded as attached.\n */\nexport function newFromTemplate(\n template: Uint8Array,\n options: { attachedTemplate?: string } = {}\n): Uint8Array {\n const pkg = Pkg.read(template)\n const main = pkg.main\n pkg.setContentType(main, CT.document)\n const rels = pkg.rels(main)\n for (const rel of rels.filter((r) => r.type === RT.glossary || /vbaProject$/.test(r.type))) {\n const target = pkg.find(pkg.target(main, rel))\n if (target) {\n for (const sub of pkg.rels(target)) if (!sub.external) pkg.remove(pkg.target(target, sub))\n pkg.remove(target)\n }\n }\n pkg.setRels(\n main,\n rels.filter((r) => r.type !== RT.glossary && !/vbaProject$/.test(r.type))\n )\n if (options.attachedTemplate) {\n const { part, root } = settingsOf(pkg)\n if (!root.attrs['xmlns:r']) root.attrs['xmlns:r'] = R_NS\n pkg.setRels(\n part,\n pkg.rels(part).filter((r) => r.type !== RT.attachedTemplate)\n )\n const id = pkg.addRel(part, RT.attachedTemplate, encodeURI(options.attachedTemplate), true)\n placeOrdered(root, el('w:attachedTemplate', { 'r:id': id }), SETTINGS_ORDER)\n pkg.setXml(part, root)\n }\n return pkg.write()\n}\n\n/**\n * Put content into the house shape: the template's styles, numbering, theme, fonts, settings and\n * page furniture applied to `content` (an AI draft, a converted Markdown file).\n */\nexport function composeWithTemplate(\n content: Uint8Array,\n template: Uint8Array,\n attachedTemplate?: string\n): Uint8Array {\n return applyTemplate(content, template, { furniture: true, attachedTemplate }).bytes\n}\n","/**\n * Quick Parts: the building blocks a template's glossary carries (`word/glossary/document.xml`),\n * listed by gallery and category, and packaged one at a time as a self-contained fragment — the\n * block's body with the styles, numbering and media it uses — for the editor's paste to merge.\n */\nimport { strToU8 } from 'fflate'\nimport { CT, Pkg, RT } from './pkg'\nimport { clone, el, isEl, kid, kids, val, walk, W_NS, R_NS, textOf, type El } from './xml'\n\nexport interface BuildingBlockInfo {\n name: string\n gallery: string\n category: string\n description: string\n /** Plain text of the block, for a preview. */\n text: string\n}\n\nfunction glossaryOf(pkg: Pkg): { part: string; root: El } | undefined {\n const part = pkg.partOf(pkg.main, RT.glossary) ?? pkg.find('word/glossary/document.xml')\n const root = part ? pkg.xml(part) : undefined\n return part && root ? { part, root } : undefined\n}\n\nfunction docParts(root: El): El[] {\n return kids(kid(root, 'w:docParts') ?? root, 'w:docPart')\n}\n\nfunction infoOf(part: El): BuildingBlockInfo | undefined {\n const pr = kid(part, 'w:docPartPr')\n const name = val(pr, 'w:name')\n if (!name) return undefined\n const category = kid(pr, 'w:category')\n return {\n name,\n gallery: val(category, 'w:gallery') ?? 'docParts',\n category: val(category, 'w:name') ?? 'General',\n description: val(pr, 'w:description') ?? '',\n // One space between paragraphs (and table cells), as a one-line preview reads.\n text: [...walk(kid(part, 'w:docPartBody') ?? part)]\n .filter((e) => e.name === 'w:p')\n .map(textOf)\n .filter(Boolean)\n .join(' '),\n }\n}\n\n/** Quick Parts and AutoText first, as Word's Insert › Quick Parts lists them; sorted by category. */\nexport function listBuildingBlocks(template: Uint8Array): BuildingBlockInfo[] {\n const g = glossaryOf(Pkg.read(template))\n if (!g) return []\n return docParts(g.root)\n .map(infoOf)\n .filter((b): b is BuildingBlockInfo => !!b && b.gallery !== 'placeholder')\n}\n\nconst MIN_CONTENT_TYPES = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"${CT.rels}\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/></Types>`\n\n/**\n * One building block as a fragment package: its `w:docPartBody` as the body, with the glossary's\n * styles (without document defaults: pasted text takes the defaults of the document it lands in),\n * numbering, and the media its relationships reach. Undefined when the template has no such block.\n */\nexport function buildingBlockFragment(template: Uint8Array, name: string): Uint8Array | undefined {\n const tpl = Pkg.read(template)\n const g = glossaryOf(tpl)\n const part = g && docParts(g.root).find((p) => val(kid(p, 'w:docPartPr'), 'w:name') === name)\n const body = part && kid(part, 'w:docPartBody')\n if (!g || !body) return undefined\n\n const out = new Pkg(new Map([['[Content_Types].xml', strToU8(MIN_CONTENT_TYPES)]]))\n out.setRels('', [\n { id: 'rId1', type: RT.officeDocument, target: 'word/document.xml', external: false },\n ])\n const main = 'word/document.xml'\n const blocks = body.children.filter(isEl).map(clone)\n out.setXml(\n main,\n el('w:document', { ...g.root.attrs, 'xmlns:w': W_NS, 'xmlns:r': R_NS }, [\n el('w:body', {}, blocks),\n ]),\n CT.document\n )\n\n const rels = []\n const stylesPart = tpl.partOf(g.part, RT.styles) ?? tpl.partOf(tpl.main, RT.styles)\n if (stylesPart) {\n const styles = tpl.xml(stylesPart)!\n styles.children = styles.children.filter((c) => !(isEl(c) && c.name === 'w:docDefaults'))\n out.setXml('word/styles.xml', styles, CT.styles)\n rels.push({ id: 'rIdStyles', type: RT.styles, target: 'styles.xml', external: false })\n }\n const numberingPart = tpl.partOf(g.part, RT.numbering) ?? tpl.partOf(tpl.main, RT.numbering)\n if (numberingPart) {\n out.setBytes('word/numbering.xml', tpl.files.get(numberingPart)!, CT.numbering)\n rels.push({ id: 'rIdNumbering', type: RT.numbering, target: 'numbering.xml', external: false })\n }\n // The relationships the block itself uses (pictures, hyperlinks), under their own ids.\n const used = new Set<string>()\n for (const e of blocks.flatMap((b) => [...walk(b)]))\n for (const [k, v] of Object.entries(e.attrs)) if (k.startsWith('r:')) used.add(v)\n for (const rel of tpl.rels(g.part).filter((r) => used.has(r.id))) {\n if (rel.external) {\n rels.push({ ...rel })\n continue\n }\n const target = tpl.find(tpl.target(g.part, rel))\n if (!target) continue\n const file = `word/media/${target.slice(target.lastIndexOf('/') + 1)}`\n out.setBytes(file, tpl.files.get(target)!)\n const type = tpl.contentType(target)\n if (type) out.ensureDefault(file.slice(file.lastIndexOf('.') + 1), type)\n rels.push({ ...rel, target: file.slice('word/'.length) })\n }\n out.setRels(main, rels)\n return out.write()\n}\n\n/** A fragment's body as clipboard HTML the editor's paste recognises as its own. */\nexport function fragmentClipboardHtml(fragment: Uint8Array, covered = true): string {\n let binary = ''\n for (let i = 0; i < fragment.length; i += 0x8000)\n binary += String.fromCharCode(...fragment.subarray(i, i + 0x8000))\n return `<div data-docx-fragment=\"${btoa(binary)}\" data-docx-fragment-end=\"${covered ? 'covered' : 'open'}\"></div>`\n}\n","/**\n * A fragment package marked as one tracked insertion, so that pasting it while suggesting lands a\n * change to review rather than an untracked edit. The editor's paste keeps `w:ins` from a\n * fragment (renumbering its id), and accepting or rejecting the change takes the whole insertion.\n */\nimport { Pkg } from './pkg'\nimport { el, isEl, kid, type El } from './xml'\n\n/** Who made a tracked change and when (`w:author`, `w:date`). */\nexport interface Revision {\n author: string\n /** ISO 8601, seconds precision, e.g. `2026-10-19T09:30:00Z`. */\n date: string\n}\n\n/** Already tracked in the fragment: left as they are. */\nconst TRACKED = new Set(['w:ins', 'w:del', 'w:moveFrom', 'w:moveTo'])\n\n/**\n * The fragment with every run wrapped in `w:ins` and every new paragraph mark marked inserted. A\n * table row is marked inserted as a whole, its cells left as they are: the editor rejects an\n * inserted row whose content is tracked as well only partly. A run is not descended into, so a\n * text box goes in with its run. `covered`: the fragment's last paragraph mark is pasted too (a\n * block before the caret's paragraph); otherwise the last paragraph runs into the text after the\n * caret and its mark is not new.\n */\nexport function trackInsertion(\n fragment: Uint8Array,\n revision: Revision,\n covered: boolean\n): Uint8Array {\n const pkg = Pkg.read(fragment)\n const main = pkg.main\n const root = pkg.xml(main)\n const body = kid(root, 'w:body')\n if (!root || !body) return fragment\n const attrs = { 'w:id': '1', 'w:author': revision.author, 'w:date': revision.date }\n const lastParagraph = body.children.filter(isEl).findLast((c) => c.name === 'w:p')\n\n const visit = (node: El) => {\n node.children = node.children.map((child) => {\n if (!isEl(child)) return child\n if (child.name === 'w:r') return TRACKED.has(node.name) ? child : el('w:ins', attrs, [child])\n if (TRACKED.has(child.name)) return child\n if (child.name === 'w:tr') {\n markRow(child, attrs)\n return child\n }\n visit(child)\n if (child.name === 'w:p' && (covered || child !== lastParagraph)) markParagraph(child, attrs)\n return child\n })\n }\n visit(body)\n pkg.setXml(main, root)\n return pkg.write()\n}\n\n/** `w:pPr/w:rPr/w:ins`: the paragraph mark is inserted (`w:ins` comes first in `CT_ParaRPr`). */\nfunction markParagraph(p: El, attrs: Record<string, string>) {\n let pPr = kid(p, 'w:pPr')\n if (!pPr) p.children.unshift((pPr = el('w:pPr')))\n let rPr = kid(pPr, 'w:rPr')\n if (!rPr) {\n rPr = el('w:rPr')\n // Before `w:sectPr` and `w:pPrChange`, which close `CT_PPr`.\n const at = pPr.children.findIndex(\n (c) => isEl(c) && (c.name === 'w:sectPr' || c.name === 'w:pPrChange')\n )\n pPr.children.splice(at < 0 ? pPr.children.length : at, 0, rPr)\n }\n if (!kid(rPr, 'w:ins')) rPr.children.unshift(el('w:ins', attrs))\n}\n\n/** `w:trPr/w:ins`: the table row is inserted (after the row properties, before `w:trPrChange`). */\nfunction markRow(tr: El, attrs: Record<string, string>) {\n let trPr = kid(tr, 'w:trPr')\n if (!trPr) {\n trPr = el('w:trPr')\n const after = tr.children.findIndex((c) => isEl(c) && c.name === 'w:tblPrEx')\n tr.children.splice(after + 1, 0, trPr)\n }\n if (kid(trPr, 'w:ins')) return\n const at = trPr.children.findIndex((c) => isEl(c) && c.name === 'w:trPrChange')\n trPr.children.splice(at < 0 ? trPr.children.length : at, 0, el('w:ins', attrs))\n}\n","/**\n * Where a document's styles have drifted from its house template: style definitions compared as\n * formatting (what they look like), not as bytes — revision ids, UI flags and the numbering ids a\n * merge renumbers are left out, and a style's numbering is compared by its list levels.\n */\nimport { Pkg, RT } from './pkg'\nimport { isEl, kid, kids, serialize, val, walk, clone, type El } from './xml'\n\nexport interface StyleDifference {\n styleId: string\n name: string\n /** `changed`: defined differently; `missing`: the template defines it, the document does not. */\n kind: 'changed' | 'missing'\n}\nexport interface StyleDivergence {\n styles: StyleDifference[]\n /** The documents' default paragraph and run formatting differ. */\n docDefaults: boolean\n}\n\n/** Presentation-only parts of a style definition: what the style pane shows, not the text. */\nconst UI_ONLY = new Set([\n 'w:uiPriority',\n 'w:semiHidden',\n 'w:unhideWhenUsed',\n 'w:qFormat',\n 'w:locked',\n 'w:personal',\n 'w:personalCompose',\n 'w:personalReply',\n 'w:rsid',\n 'w:autoRedefine',\n 'w:hidden',\n 'w:aliases',\n])\n\nfunction numberingSignature(numbering: El | undefined, numId: string): string {\n if (!numbering) return `num:${numId}`\n const num = kids(numbering, 'w:num').find((n) => n.attrs['w:numId'] === numId)\n const abs =\n num &&\n kids(numbering, 'w:abstractNum').find(\n (a) => a.attrs['w:abstractNumId'] === val(num, 'w:abstractNumId')\n )\n if (!abs) return `num:${numId}`\n const levels = kids(abs, 'w:lvl').map((l) => {\n const c = clone(l)\n c.children = c.children.filter(\n (x) => !(isEl(x) && (x.name === 'w:lvlPicBulletId' || x.name === 'w:pStyle'))\n )\n return canonical(c)\n })\n return levels.join('|')\n}\n\nfunction canonical(e: El): string {\n const c = clone(e)\n for (const x of walk(c)) {\n for (const k of Object.keys(x.attrs))\n if (/^w:rsid/.test(k) || k.startsWith('xmlns')) delete x.attrs[k]\n x.attrs = Object.fromEntries(Object.entries(x.attrs).sort(([a], [b]) => a.localeCompare(b)))\n x.children = x.children.filter((k) => isEl(k) && !UI_ONLY.has(k.name))\n }\n return serialize(c).replace(/^<\\?xml[^>]*>\\n/, '')\n}\n\nfunction styleSignature(style: El, numbering: El | undefined): string {\n const c = clone(style)\n for (const x of walk(c))\n if (x.name === 'w:numId') x.attrs['w:val'] = numberingSignature(numbering, x.attrs['w:val'])\n delete c.attrs['w:styleId']\n return canonical(c)\n}\n\nfunction partsOf(bytes: Uint8Array) {\n const pkg = Pkg.read(bytes)\n const stylesPart = pkg.partOf(pkg.main, RT.styles)\n const numberingPart = pkg.partOf(pkg.main, RT.numbering)\n return {\n styles: stylesPart ? pkg.xml(stylesPart) : undefined,\n numbering: numberingPart ? pkg.xml(numberingPart) : undefined,\n }\n}\n\nexport function styleDivergence(document: Uint8Array, template: Uint8Array): StyleDivergence {\n const d = partsOf(document)\n const t = partsOf(template)\n const result: StyleDivergence = { styles: [], docDefaults: false }\n if (!t.styles) return result\n const dStyles = d.styles ? kids(d.styles, 'w:style') : []\n const byId = new Map(dStyles.map((s) => [s.attrs['w:styleId'], s]))\n const byName = new Map(\n dStyles.map((s) => [`${s.attrs['w:type']}:${(val(s, 'w:name') ?? '').toLowerCase()}`, s])\n )\n for (const s of kids(t.styles, 'w:style')) {\n const id = s.attrs['w:styleId']\n const name = val(s, 'w:name') ?? id\n const mine = byId.get(id) ?? byName.get(`${s.attrs['w:type']}:${name.toLowerCase()}`)\n if (!mine) result.styles.push({ styleId: id, name, kind: 'missing' })\n else if (styleSignature(mine, d.numbering) !== styleSignature(s, t.numbering))\n result.styles.push({ styleId: mine.attrs['w:styleId'], name, kind: 'changed' })\n }\n const dd = d.styles && kid(d.styles, 'w:docDefaults')\n const td = kid(t.styles, 'w:docDefaults')\n result.docDefaults = (dd ? canonical(dd) : '') !== (td ? canonical(td) : '')\n return result\n}\n\n/** The template a document records as attached (`w:attachedTemplate`), by file name. */\nexport function attachedTemplateOf(document: Uint8Array): string | undefined {\n const pkg = Pkg.read(document)\n const settings = pkg.partOf(pkg.main, RT.settings)\n const root = settings ? pkg.xml(settings) : undefined\n const id = root && kid(root, 'w:attachedTemplate')?.attrs['r:id']\n const rel = id ? pkg.rels(settings!).find((r) => r.id === id) : undefined\n if (!rel) return undefined\n const target = decodeURI(rel.target)\n return target.slice(Math.max(target.lastIndexOf('/'), target.lastIndexOf('\\\\')) + 1)\n}\n","/**\n * ARBI's built-in house template: a UK legal drafting template, as a `.dotx`.\n *\n * The style set follows the convention of UK legal precedents (Practical Law's standard documents\n * and the firm templates built on the same scheme): numbered clause levels \"Level 1\"-\"Level 5\"\n * (1 / 1.1 / (a) / (i) / (A)) driven by ONE multilevel list whose levels are linked to the styles,\n * so Enter continues the numbering and inserting a clause renumbers the rest; \"Body 1\"-\"Body 5\"\n * for unnumbered text aligned with each level's text; \"Parties\" ((1), (2)) and \"Background\"\n * ((A), (B)) for the front of an agreement; \"Definition\" for the definitions clause; \"Schedule\" and\n * \"Part\" headings (SCHEDULE 1 / PART 1, Part restarting in each Schedule); Word's built-in\n * \"Title\", \"Heading 1-3\", \"Block Text\" (aliased \"Block Quote\"), \"Quote\", note, header and footer\n * styles.\n *\n * It carries a glossary of Quick Parts: UK execution blocks (Companies Act 2006 ss.43-44 and 46,\n * the LLP Regulations 2009 forms, an individual's deed) and the usual document markings. A neutral\n * placeholder letterhead and a DRAFT watermark are optional, as examples of page furniture.\n */\nimport { strToU8, zipSync, zlibSync } from 'fflate'\nimport { CT, RT } from './pkg'\n\nconst W_DECL =\n 'xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"'\nconst VML_DECL =\n 'xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\"'\nconst DRAWING_DECL =\n 'xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"'\nconst XML = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n'\n\nconst esc = (s: string) =>\n s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;')\n\n/** Twips per level of indent: the half-inch steps of a UK precedent. */\nconst STEP = 720\n\n// ── Styles ────────────────────────────────────────────────────────────────────────────────────────\n\ninterface StyleSpec {\n id: string\n name: string\n type?: 'paragraph' | 'character' | 'table' | 'numbering'\n basedOn?: string\n next?: string\n link?: string\n aliases?: string\n pPr?: string\n rPr?: string\n extra?: string\n isDefault?: boolean\n custom?: boolean\n qFormat?: boolean\n uiPriority?: number\n}\n\nfunction style(s: StyleSpec): string {\n const type = s.type ?? 'paragraph'\n return [\n `<w:style w:type=\"${type}\"`,\n s.isDefault ? ' w:default=\"1\"' : '',\n s.custom ? ' w:customStyle=\"1\"' : '',\n ` w:styleId=\"${s.id}\">`,\n `<w:name w:val=\"${esc(s.name)}\"/>`,\n s.aliases ? `<w:aliases w:val=\"${esc(s.aliases)}\"/>` : '',\n s.basedOn ? `<w:basedOn w:val=\"${s.basedOn}\"/>` : '',\n s.next ? `<w:next w:val=\"${s.next}\"/>` : '',\n s.link ? `<w:link w:val=\"${s.link}\"/>` : '',\n s.uiPriority !== undefined ? `<w:uiPriority w:val=\"${s.uiPriority}\"/>` : '',\n s.qFormat ? '<w:qFormat/>' : '',\n s.extra ?? '',\n s.pPr ? `<w:pPr>${s.pPr}</w:pPr>` : '',\n s.rPr ? `<w:rPr>${s.rPr}</w:rPr>` : '',\n '</w:style>',\n ].join('')\n}\n\nconst ind = (left: number, hanging = 0) =>\n `<w:ind w:left=\"${left}\"${hanging ? ` w:hanging=\"${hanging}\"` : ''}/>`\nconst numPr = (numId: number, ilvl = 0) =>\n `<w:numPr>${ilvl ? `<w:ilvl w:val=\"${ilvl}\"/>` : ''}<w:numId w:val=\"${numId}\"/></w:numPr>`\n\n/** numIds of the template's lists. */\nexport const LEGAL_NUM = { clauses: 1, parties: 2, background: 3, schedules: 4 } as const\n\n/** Text indent of each clause level: 1 and 1.1 hang their number at the margin. */\nconst LEVEL_TEXT = [STEP, STEP, 2 * STEP, 3 * STEP, 4 * STEP]\n\nconst LEGAL_STYLES: readonly StyleSpec[] = [\n { id: 'Normal', name: 'Normal', isDefault: true, qFormat: true, uiPriority: 0 },\n {\n id: 'DefaultParagraphFont',\n name: 'Default Paragraph Font',\n type: 'character',\n isDefault: true,\n uiPriority: 1,\n extra: '<w:semiHidden/><w:unhideWhenUsed/>',\n },\n {\n id: 'TableNormal',\n name: 'Normal Table',\n type: 'table',\n isDefault: true,\n uiPriority: 99,\n extra:\n '<w:semiHidden/><w:unhideWhenUsed/><w:tblPr><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblCellMar><w:top w:w=\"0\" w:type=\"dxa\"/><w:left w:w=\"108\" w:type=\"dxa\"/><w:bottom w:w=\"0\" w:type=\"dxa\"/><w:right w:w=\"108\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr>',\n },\n {\n id: 'NoList',\n name: 'No List',\n type: 'numbering',\n isDefault: true,\n uiPriority: 99,\n extra: '<w:semiHidden/><w:unhideWhenUsed/>',\n },\n {\n id: 'Title',\n name: 'Title',\n next: 'Normal',\n qFormat: true,\n uiPriority: 10,\n pPr: '<w:keepNext/><w:spacing w:after=\"360\"/><w:jc w:val=\"center\"/>',\n rPr: '<w:b/><w:caps/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/>',\n },\n ...[1, 2, 3].map((n): StyleSpec => ({\n id: `Heading${n}`,\n name: `heading ${n}`,\n basedOn: 'Normal',\n next: 'Normal',\n qFormat: true,\n uiPriority: 9,\n pPr: `<w:keepNext/><w:spacing w:before=\"240\"/><w:outlineLvl w:val=\"${n - 1}\"/>`,\n rPr: `<w:b/>${n === 1 ? '<w:caps/>' : ''}${n === 3 ? '<w:i/>' : ''}`,\n })),\n {\n id: 'Parties',\n name: 'Parties',\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n pPr: `${numPr(LEGAL_NUM.parties)}${ind(STEP, STEP)}`,\n },\n {\n id: 'Background',\n name: 'Background',\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n pPr: `${numPr(LEGAL_NUM.background)}${ind(STEP, STEP)}`,\n },\n ...[1, 2, 3, 4, 5].map((n): StyleSpec => ({\n id: `Level${n}`,\n name: `Level ${n}`,\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n next: `Level${n}`,\n pPr: `${numPr(LEGAL_NUM.clauses, n - 1)}${n === 1 ? '<w:keepNext/>' : ''}${ind(\n LEVEL_TEXT[n - 1],\n STEP\n )}${n === 1 ? '<w:outlineLvl w:val=\"0\"/>' : ''}`,\n rPr: n === 1 ? '<w:b/><w:caps/>' : undefined,\n })),\n ...[1, 2, 3, 4, 5].map((n): StyleSpec => ({\n id: `Body${n}`,\n name: `Body ${n}`,\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n pPr: ind(LEVEL_TEXT[n - 1]),\n })),\n {\n id: 'Definition',\n name: 'Definition',\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n pPr: ind(STEP),\n },\n {\n id: 'Schedule',\n name: 'Schedule',\n basedOn: 'Normal',\n next: 'Normal',\n custom: true,\n qFormat: true,\n pPr: `${numPr(LEGAL_NUM.schedules)}<w:keepNext/><w:pageBreakBefore/><w:jc w:val=\"center\"/><w:outlineLvl w:val=\"0\"/>`,\n rPr: '<w:b/><w:caps/>',\n },\n {\n id: 'Part',\n name: 'Part',\n basedOn: 'Normal',\n next: 'Normal',\n custom: true,\n qFormat: true,\n pPr: `${numPr(LEGAL_NUM.schedules, 1)}<w:keepNext/><w:jc w:val=\"center\"/><w:outlineLvl w:val=\"1\"/>`,\n rPr: '<w:b/>',\n },\n {\n id: 'BlockText',\n name: 'Block Text',\n aliases: 'Block Quote',\n basedOn: 'Normal',\n uiPriority: 99,\n pPr: `<w:ind w:left=\"${2 * STEP}\" w:right=\"${2 * STEP}\"/>`,\n },\n {\n id: 'Quote',\n name: 'Quote',\n basedOn: 'Normal',\n next: 'Normal',\n qFormat: true,\n uiPriority: 29,\n pPr: `<w:ind w:left=\"${STEP}\" w:right=\"${STEP}\"/>`,\n rPr: '<w:i/>',\n },\n {\n id: 'Marking',\n name: 'Document Marking',\n basedOn: 'Normal',\n next: 'Normal',\n custom: true,\n pPr: '<w:jc w:val=\"right\"/>',\n rPr: '<w:b/><w:caps/>',\n },\n {\n id: 'FootnoteText',\n name: 'footnote text',\n basedOn: 'Normal',\n link: 'FootnoteTextChar',\n uiPriority: 99,\n pPr: '<w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/>',\n rPr: '<w:sz w:val=\"18\"/><w:szCs w:val=\"18\"/>',\n },\n {\n id: 'FootnoteTextChar',\n name: 'Footnote Text Char',\n type: 'character',\n basedOn: 'DefaultParagraphFont',\n link: 'FootnoteText',\n custom: true,\n uiPriority: 99,\n rPr: '<w:sz w:val=\"18\"/><w:szCs w:val=\"18\"/>',\n },\n {\n id: 'FootnoteReference',\n name: 'footnote reference',\n type: 'character',\n basedOn: 'DefaultParagraphFont',\n uiPriority: 99,\n rPr: '<w:vertAlign w:val=\"superscript\"/>',\n },\n {\n id: 'EndnoteText',\n name: 'endnote text',\n basedOn: 'FootnoteText',\n uiPriority: 99,\n },\n {\n id: 'EndnoteReference',\n name: 'endnote reference',\n type: 'character',\n basedOn: 'DefaultParagraphFont',\n uiPriority: 99,\n rPr: '<w:vertAlign w:val=\"superscript\"/>',\n },\n {\n id: 'Header',\n name: 'header',\n basedOn: 'Normal',\n uiPriority: 99,\n pPr: `<w:tabs><w:tab w:val=\"center\" w:pos=\"4513\"/><w:tab w:val=\"right\" w:pos=\"9026\"/></w:tabs><w:spacing w:after=\"0\"/>`,\n rPr: '<w:sz w:val=\"16\"/><w:szCs w:val=\"16\"/>',\n },\n {\n id: 'Footer',\n name: 'footer',\n basedOn: 'Header',\n uiPriority: 99,\n },\n {\n id: 'Hyperlink',\n name: 'Hyperlink',\n type: 'character',\n basedOn: 'DefaultParagraphFont',\n uiPriority: 99,\n rPr: '<w:color w:val=\"0563C1\" w:themeColor=\"hyperlink\"/><w:u w:val=\"single\"/>',\n },\n {\n id: 'TableGrid',\n name: 'Table Grid',\n type: 'table',\n basedOn: 'TableNormal',\n uiPriority: 39,\n pPr: '<w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/>',\n extra:\n '<w:tblPr><w:tblBorders><w:top w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:left w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:bottom w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:right w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:insideH w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:insideV w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/></w:tblBorders></w:tblPr>',\n },\n]\n\nconst DOC_DEFAULTS =\n '<w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:asciiTheme=\"minorHAnsi\" w:eastAsiaTheme=\"minorHAnsi\" w:hAnsiTheme=\"minorHAnsi\" w:cstheme=\"minorBidi\"/><w:sz w:val=\"21\"/><w:szCs w:val=\"21\"/><w:lang w:val=\"en-GB\" w:eastAsia=\"en-US\" w:bidi=\"ar-SA\"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after=\"240\" w:line=\"288\" w:lineRule=\"auto\"/><w:jc w:val=\"both\"/></w:pPr></w:pPrDefault></w:docDefaults>'\nconst LATENT =\n '<w:latentStyles w:defLockedState=\"0\" w:defUIPriority=\"99\" w:defSemiHidden=\"0\" w:defUnhideWhenUsed=\"0\" w:defQFormat=\"0\" w:count=\"376\"><w:lsdException w:name=\"Normal\" w:uiPriority=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 1\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 2\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 3\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"Title\" w:uiPriority=\"10\" w:qFormat=\"1\"/><w:lsdException w:name=\"Quote\" w:uiPriority=\"29\" w:qFormat=\"1\"/></w:latentStyles>'\n\nfunction legalStylesXml(): string {\n return `${XML}<w:styles ${W_DECL}>${DOC_DEFAULTS}${LATENT}${LEGAL_STYLES.map(style).join('')}</w:styles>`\n}\n\n// ── Numbering ─────────────────────────────────────────────────────────────────────────────────────\n\ninterface LevelSpec {\n fmt: string\n text: string\n pStyle?: string\n left: number\n hanging?: number\n start?: number\n jc?: string\n rPr?: string\n}\nfunction lvl(i: number, l: LevelSpec): string {\n return `<w:lvl w:ilvl=\"${i}\"><w:start w:val=\"${l.start ?? 1}\"/><w:numFmt w:val=\"${l.fmt}\"/>${\n l.pStyle ? `<w:pStyle w:val=\"${l.pStyle}\"/>` : ''\n }<w:lvlText w:val=\"${esc(l.text)}\"/><w:lvlJc w:val=\"${l.jc ?? 'left'}\"/><w:pPr>${ind(\n l.left,\n l.hanging ?? 0\n )}</w:pPr>${l.rPr ? `<w:rPr>${l.rPr}</w:rPr>` : ''}</w:lvl>`\n}\nfunction abstractNum(id: number, nsid: string, name: string, levels: LevelSpec[]): string {\n return `<w:abstractNum w:abstractNumId=\"${id}\"><w:nsid w:val=\"${nsid}\"/><w:multiLevelType w:val=\"${\n levels.length > 1 ? 'multilevel' : 'singleLevel'\n }\"/><w:name w:val=\"${esc(name)}\"/>${levels.map((l, i) => lvl(i, l)).join('')}</w:abstractNum>`\n}\n\n/** The clause numbering: 1. / 1.1 / (a) / (i) / (A), each level linked to its \"Level n\" style. */\nconst CLAUSE_LEVELS: LevelSpec[] = [\n { fmt: 'decimal', text: '%1.', pStyle: 'Level1', left: STEP, hanging: STEP, rPr: '<w:b/>' },\n {\n fmt: 'decimal',\n text: '%1.%2',\n pStyle: 'Level2',\n left: STEP,\n hanging: STEP,\n rPr: '<w:b w:val=\"0\"/><w:caps w:val=\"0\"/>',\n },\n { fmt: 'lowerLetter', text: '(%3)', pStyle: 'Level3', left: 2 * STEP, hanging: STEP },\n { fmt: 'lowerRoman', text: '(%4)', pStyle: 'Level4', left: 3 * STEP, hanging: STEP },\n { fmt: 'upperLetter', text: '(%5)', pStyle: 'Level5', left: 4 * STEP, hanging: STEP },\n]\n\nfunction legalNumberingXml(): string {\n const abstracts = [\n abstractNum(0, '4C2A1B01', 'Legal clauses', CLAUSE_LEVELS),\n abstractNum(1, '4C2A1B02', 'Parties', [\n { fmt: 'decimal', text: '(%1)', pStyle: 'Parties', left: STEP, hanging: STEP },\n ]),\n abstractNum(2, '4C2A1B03', 'Background', [\n { fmt: 'upperLetter', text: '(%1)', pStyle: 'Background', left: STEP, hanging: STEP },\n ]),\n abstractNum(3, '4C2A1B04', 'Schedules', [\n { fmt: 'decimal', text: 'Schedule %1', pStyle: 'Schedule', left: 0, jc: 'center' },\n { fmt: 'decimal', text: 'Part %2', pStyle: 'Part', left: 0, jc: 'center' },\n ]),\n ]\n const nums = [1, 2, 3, 4].map(\n (n) => `<w:num w:numId=\"${n}\"><w:abstractNumId w:val=\"${n - 1}\"/></w:num>`\n )\n return `${XML}<w:numbering ${W_DECL}>${abstracts.join('')}${nums.join('')}</w:numbering>`\n}\n\n// ── Theme, fonts, settings ────────────────────────────────────────────────────────────────────────\n\nconst THEME_COLORS: [string, string][] = [\n ['dk2', '1F2937'],\n ['lt2', 'E7E6E6'],\n ['accent1', '1F3864'],\n ['accent2', '7B2C2C'],\n ['accent3', '2E5A2E'],\n ['accent4', '7F6000'],\n ['accent5', '2F5597'],\n ['accent6', '595959'],\n ['hlink', '0563C1'],\n ['folHlink', '954F72'],\n]\nexport function themeXml(major = 'Arial', minor = 'Arial'): string {\n const font = (f: string) =>\n `<a:latin typeface=\"${esc(f)}\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/>`\n return `${XML}<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"ARBI Legal\"><a:themeElements><a:clrScheme name=\"ARBI Legal\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1>${THEME_COLORS.map(\n ([k, v]) => `<a:${k}><a:srgbClr val=\"${v}\"/></a:${k}>`\n ).join(\n ''\n )}</a:clrScheme><a:fontScheme name=\"ARBI Legal\"><a:majorFont>${font(major)}</a:majorFont><a:minorFont>${font(\n minor\n )}</a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln><a:ln w=\"12700\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln><a:ln w=\"19050\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements></a:theme>`\n}\n\nconst FONT_TABLE = `${XML}<w:fonts ${W_DECL}><w:font w:name=\"Arial\"><w:panose1 w:val=\"020B0604020202020204\"/><w:charset w:val=\"00\"/><w:family w:val=\"swiss\"/><w:pitch w:val=\"variable\"/></w:font><w:font w:name=\"Times New Roman\"><w:panose1 w:val=\"02020603050405020304\"/><w:charset w:val=\"00\"/><w:family w:val=\"roman\"/><w:pitch w:val=\"variable\"/></w:font></w:fonts>`\n\nfunction settingsXml(o: { evenAndOdd?: boolean; template?: boolean }): string {\n return `${XML}<w:settings ${W_DECL}><w:zoom w:percent=\"100\"/>${\n o.template ? '' : ''\n }<w:defaultTabStop w:val=\"${STEP}\"/>${\n o.evenAndOdd ? '<w:evenAndOddHeaders/>' : ''\n }<w:characterSpacingControl w:val=\"doNotCompress\"/><w:footnotePr><w:footnote w:id=\"-1\"/><w:footnote w:id=\"0\"/></w:footnotePr><w:endnotePr><w:endnote w:id=\"-1\"/><w:endnote w:id=\"0\"/></w:endnotePr><w:compat><w:compatSetting w:name=\"compatibilityMode\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"15\"/></w:compat><w:themeFontLang w:val=\"en-GB\"/></w:settings>`\n}\n\nconst NOTES = (kind: 'footnote' | 'endnote') =>\n `${XML}<w:${kind}s ${W_DECL}><w:${kind} w:type=\"separator\" w:id=\"-1\"><w:p><w:pPr><w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:r><w:separator/></w:r></w:p></w:${kind}><w:${kind} w:type=\"continuationSeparator\" w:id=\"0\"><w:p><w:pPr><w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:r><w:continuationSeparator/></w:r></w:p></w:${kind}></w:${kind}s>`\n\n// ── Body helpers ──────────────────────────────────────────────────────────────────────────────────\n\nconst run = (text: string, rPr = '') =>\n `<w:r>${rPr ? `<w:rPr>${rPr}</w:rPr>` : ''}<w:t xml:space=\"preserve\">${esc(text)}</w:t></w:r>`\nexport const para = (text: string, styleId?: string, extra = '') =>\n `<w:p>${styleId || extra ? `<w:pPr>${styleId ? `<w:pStyle w:val=\"${styleId}\"/>` : ''}${extra}</w:pPr>` : ''}${\n text ? run(text) : ''\n }</w:p>`\nconst field = (code: string, shown: string) =>\n `<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:instrText xml:space=\"preserve\"> ${code} </w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>${run(\n shown\n )}<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>`\n\n/** A two-column, borderless execution table: who signs on the left, signature lines on the right. */\nfunction executionTable(rows: [string, string][]): string {\n const cell = (xml: string, w: number) =>\n `<w:tc><w:tcPr><w:tcW w:w=\"${w}\" w:type=\"dxa\"/></w:tcPr>${xml}</w:tc>`\n const lines = (s: string) =>\n s\n .split('\\n')\n .map((t) => `<w:p><w:pPr><w:jc w:val=\"left\"/></w:pPr>${run(t)}</w:p>`)\n .join('')\n return `<w:tbl><w:tblPr><w:tblW w:w=\"9026\" w:type=\"dxa\"/><w:tblLook w:val=\"0000\" w:firstRow=\"0\" w:lastRow=\"0\" w:firstColumn=\"0\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"0\"/></w:tblPr><w:tblGrid><w:gridCol w:w=\"4513\"/><w:gridCol w:w=\"4513\"/></w:tblGrid>${rows\n .map(([l, r]) => `<w:tr>${cell(lines(l), 4513)}${cell(lines(r), 4513)}</w:tr>`)\n .join('')}</w:tbl><w:p/>`\n}\n\nconst SIGN = '……………………………………'\n\n/** The front of an agreement, offered as the \"Agreement\" Quick Part. */\nconst AGREEMENT_BODY = [\n para('[Title of agreement]', 'Title'),\n para('This agreement is dated [DATE]'),\n para('Parties', 'Heading1'),\n para(\n '[NAME] incorporated and registered in England and Wales with company number [NUMBER] whose registered office is at [ADDRESS]',\n 'Parties'\n ),\n para(\n '[NAME] incorporated and registered in England and Wales with company number [NUMBER] whose registered office is at [ADDRESS]',\n 'Parties'\n ),\n para('Background', 'Heading1'),\n para('[Recital]', 'Background'),\n para('Agreed terms', 'Heading1'),\n para('Interpretation', 'Level1'),\n para('The following definitions apply in this agreement.', 'Level2'),\n para('[Term]: [definition].', 'Definition'),\n para('[Clause]', 'Level1'),\n para('[Sub-clause]', 'Level2'),\n].join('')\n\nexport interface BuildingBlockSpec {\n name: string\n category: string\n description: string\n body: string\n}\n\n/** Generic UK execution blocks and document markings: placeholders only, no names. */\nexport const LEGAL_BUILDING_BLOCKS: readonly BuildingBlockSpec[] = [\n {\n name: 'Individual (signed)',\n category: 'Signature blocks',\n description: 'An individual signing a simple contract.',\n body: executionTable([['Signed by [NAME]', `${SIGN}\\n[Signature]`]]),\n },\n {\n name: 'Company: director and secretary',\n category: 'Signature blocks',\n description:\n 'A company signing by a director and its secretary (Companies Act 2006, s.44(2)(a)).',\n body: executionTable([\n [\n 'Signed by [NAME], a director, for and on behalf of [COMPANY NAME] LIMITED',\n `${SIGN}\\nDirector`,\n ],\n [\n 'Signed by [NAME], the secretary, for and on behalf of [COMPANY NAME] LIMITED',\n `${SIGN}\\nSecretary`,\n ],\n ]),\n },\n {\n name: 'Company: two directors',\n category: 'Signature blocks',\n description: 'A company signing by two directors (Companies Act 2006, s.44(2)(a)).',\n body: executionTable([\n [\n 'Signed by [NAME], a director, for and on behalf of [COMPANY NAME] LIMITED',\n `${SIGN}\\nDirector`,\n ],\n [\n 'Signed by [NAME], a director, for and on behalf of [COMPANY NAME] LIMITED',\n `${SIGN}\\nDirector`,\n ],\n ]),\n },\n {\n name: 'Company deed: director and witness',\n category: 'Signature blocks',\n description:\n 'A company executing a deed by one director in the presence of a witness (Companies Act 2006, ss.44(2)(b) and 46).',\n body: executionTable([\n [\n 'Executed as a deed by [COMPANY NAME] LIMITED acting by [NAME], a director, in the presence of:',\n `${SIGN}\\nDirector`,\n ],\n [\n 'Witness signature\\nWitness name\\nWitness address\\nWitness occupation',\n `${SIGN}\\n${SIGN}\\n${SIGN}\\n${SIGN}`,\n ],\n ]),\n },\n {\n name: 'LLP: two members',\n category: 'Signature blocks',\n description:\n 'An LLP signing by two members (Limited Liability Partnerships (Application of Companies Act 2006) Regulations 2009, reg.4).',\n body: executionTable([\n ['Signed by [NAME], a member, for and on behalf of [LLP NAME] LLP', `${SIGN}\\nMember`],\n ['Signed by [NAME], a member, for and on behalf of [LLP NAME] LLP', `${SIGN}\\nMember`],\n ]),\n },\n {\n name: 'Individual deed with witness',\n category: 'Signature blocks',\n description: 'An individual executing a deed in the presence of a witness.',\n body: executionTable([\n ['Signed as a deed by [NAME] in the presence of:', `${SIGN}\\n[Signature]`],\n [\n 'Witness signature\\nWitness name\\nWitness address\\nWitness occupation',\n `${SIGN}\\n${SIGN}\\n${SIGN}\\n${SIGN}`,\n ],\n ]),\n },\n {\n name: 'Agreement',\n category: 'Documents',\n description:\n 'The front of an agreement: title, date, parties, background and the first clauses.',\n body: AGREEMENT_BODY,\n },\n ...[\n [\n 'Without prejudice save as to costs',\n 'Settlement correspondence that may be shown to the court on costs.',\n ],\n ['Privileged & confidential', 'Legally privileged communication.'],\n ['Subject to contract', 'Negotiations not intended to be binding.'],\n ['Draft for discussion', 'A draft that is not final.'],\n ].map(([text, description]): BuildingBlockSpec => ({\n name: text,\n category: 'Headings',\n description,\n body: para(text, 'Marking'),\n })),\n]\n\n/** The glossary part's XML for `blocks`, in Word's `w:docParts` shape. */\nfunction glossaryXml(blocks: readonly BuildingBlockSpec[]): string {\n const guid = (i: number) =>\n `{4C2A1B${String(i).padStart(2, '0')}-0000-4000-8000-${String(i).padStart(12, '0')}}`\n return `${XML}<w:glossaryDocument ${W_DECL}><w:docParts>${blocks\n .map(\n (b, i) =>\n `<w:docPart><w:docPartPr><w:name w:val=\"${esc(b.name)}\"/><w:category><w:name w:val=\"${esc(\n b.category\n )}\"/><w:gallery w:val=\"docParts\"/></w:category><w:behaviors><w:behavior w:val=\"content\"/></w:behaviors><w:description w:val=\"${esc(\n b.description\n )}\"/><w:guid w:val=\"${guid(i + 1)}\"/></w:docPartPr><w:docPartBody>${b.body}</w:docPartBody></w:docPart>`\n )\n .join('')}</w:docParts></w:glossaryDocument>`\n}\n\n// ── Letterhead and watermark (optional examples) ──────────────────────────────────────────────────\n\n/** A 1-bit-free, 8-bit grey PNG of `w`×`h` filled with `grey` — a neutral logo placeholder. */\nexport function placeholderPng(w = 160, h = 48, grey = 0xd0): Uint8Array {\n const crcTable = Array.from({ length: 256 }, (_, n) => {\n let c = n\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1\n return c >>> 0\n })\n const crc = (bytes: Uint8Array) => {\n let c = 0xffffffff\n for (const b of bytes) c = crcTable[(c ^ b) & 0xff] ^ (c >>> 8)\n return (c ^ 0xffffffff) >>> 0\n }\n const u32 = (n: number) => [(n >>> 24) & 255, (n >>> 16) & 255, (n >>> 8) & 255, n & 255]\n const chunk = (type: string, data: Uint8Array) => {\n const body = new Uint8Array([...strToU8(type), ...data])\n return [...u32(data.length), ...body, ...u32(crc(body))]\n }\n const raw = new Uint8Array(h * (w + 1))\n for (let y = 0; y < h; y++) raw.fill(grey, y * (w + 1) + 1, (y + 1) * (w + 1))\n return new Uint8Array([\n 0x89,\n 0x50,\n 0x4e,\n 0x47,\n 0x0d,\n 0x0a,\n 0x1a,\n 0x0a,\n ...chunk('IHDR', new Uint8Array([...u32(w), ...u32(h), 8, 0, 0, 0, 0])),\n ...chunk('IDAT', zlibSync(raw)),\n ...chunk('IEND', new Uint8Array()),\n ])\n}\n\nfunction inlineImage(rId: string, cx: number, cy: number, id: number, name: string): string {\n return `<w:r><w:drawing><wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\"><wp:extent cx=\"${cx}\" cy=\"${cy}\"/><wp:docPr id=\"${id}\" name=\"${esc(\n name\n )}\" descr=\"${esc(name)}\"/><a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic><pic:nvPicPr><pic:cNvPr id=\"${id}\" name=\"${esc(\n name\n )}\"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed=\"${rId}\"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r>`\n}\n\n/** Word's watermark: a VML WordArt shape anchored in the header. */\nfunction watermarkXml(text: string): string {\n return `<w:p><w:pPr><w:pStyle w:val=\"Header\"/></w:pPr><w:r><w:pict><v:shapetype id=\"_x0000_t136\" coordsize=\"21600,21600\" o:spt=\"136\" adj=\"10800\" path=\"m@7,l@8,m@5,21600l@6,21600e\"><v:path textpathok=\"t\" o:connecttype=\"custom\"/><v:textpath on=\"t\" fitshape=\"t\"/><o:lock v:ext=\"edit\" text=\"t\" shapetype=\"t\"/></v:shapetype><v:shape id=\"PowerPlusWaterMarkObject1\" o:spid=\"_x0000_s1025\" type=\"#_x0000_t136\" style=\"position:absolute;margin-left:0;margin-top:0;width:412.4pt;height:164.95pt;rotation:315;z-index:-251657216;mso-position-horizontal:center;mso-position-horizontal-relative:margin;mso-position-vertical:center;mso-position-vertical-relative:margin\" o:allowincell=\"f\" fillcolor=\"silver\" stroked=\"f\"><v:fill opacity=\".5\"/><v:textpath style=\"font-family:&quot;Arial&quot;;font-size:1pt\" string=\"${esc(\n text\n )}\"/><w10:wrap anchorx=\"margin\" anchory=\"margin\"/></v:shape></w:pict></w:r></w:p>`\n}\n\nconst hdr = (kind: 'hdr' | 'ftr', body: string) =>\n `${XML}<w:${kind} ${W_DECL} ${VML_DECL} ${DRAWING_DECL}>${body}</w:${kind}>`\n\n// ── The package ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface LegalTemplateOptions {\n /** A neutral placeholder letterhead on the first page and a continuation header after it. */\n letterhead?: boolean\n /** A watermark (e.g. \"DRAFT\") in the page headers. */\n watermark?: string\n /** Include the Quick Parts glossary (default true). */\n buildingBlocks?: boolean\n /** Write a .docx instead of a .dotx (default false). */\n asDocument?: boolean\n /** The starting body of a new document (paragraph XML); default one empty paragraph. */\n body?: string\n}\n\nexport function defaultLegalTemplate(options: LegalTemplateOptions = {}): Uint8Array {\n const files: Record<string, Uint8Array> = {}\n const put = (name: string, xml: string) => (files[name] = strToU8(xml))\n const overrides: [string, string][] = [\n ['/word/document.xml', options.asDocument ? CT.document : CT.template],\n ['/word/styles.xml', CT.styles],\n ['/word/numbering.xml', CT.numbering],\n ['/word/settings.xml', CT.settings],\n ['/word/fontTable.xml', CT.fontTable],\n ['/word/theme/theme1.xml', CT.theme],\n [\n '/word/footnotes.xml',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml',\n ],\n [\n '/word/endnotes.xml',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml',\n ],\n ['/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml'],\n ]\n const rels: [string, string, string][] = [\n ['rId1', RT.styles, 'styles.xml'],\n ['rId2', RT.numbering, 'numbering.xml'],\n ['rId3', RT.settings, 'settings.xml'],\n ['rId4', RT.fontTable, 'fontTable.xml'],\n ['rId5', RT.theme, 'theme/theme1.xml'],\n ['rId6', `${RT.styles.replace('styles', 'footnotes')}`, 'footnotes.xml'],\n ['rId7', `${RT.styles.replace('styles', 'endnotes')}`, 'endnotes.xml'],\n ]\n put('word/styles.xml', legalStylesXml())\n put('word/numbering.xml', legalNumberingXml())\n put('word/fontTable.xml', FONT_TABLE)\n put('word/theme/theme1.xml', themeXml())\n put('word/footnotes.xml', NOTES('footnote'))\n put('word/endnotes.xml', NOTES('endnote'))\n\n // Page furniture: a footer with Page X of Y always; the letterhead and watermark if asked.\n const refs: string[] = []\n const footer = para('', 'Footer', '<w:jc w:val=\"center\"/>').replace(\n '</w:p>',\n `${run('Page ')}${field('PAGE', '1')}${run(' of ')}${field('NUMPAGES', '1')}</w:p>`\n )\n put('word/footer1.xml', hdr('ftr', footer))\n overrides.push(['/word/footer1.xml', CT.footer])\n rels.push(['rId20', RT.footer, 'footer1.xml'])\n refs.push('<w:footerReference w:type=\"default\" r:id=\"rId20\"/>')\n const mark = options.watermark ? watermarkXml(options.watermark) : ''\n if (options.letterhead) {\n files['word/media/letterhead-logo.png'] = placeholderPng()\n put(\n 'word/header1.xml',\n hdr(\n 'hdr',\n `${mark}<w:p><w:pPr><w:pStyle w:val=\"Header\"/><w:jc w:val=\"right\"/></w:pPr>${inlineImage(\n 'rIdLogo',\n 1828800,\n 548640,\n 1,\n 'Logo placeholder'\n )}</w:p>${para('[Firm name]', 'Header', '<w:jc w:val=\"right\"/>')}${para(\n '[Address line] · [Telephone] · [Email] · [Website]',\n 'Header',\n '<w:jc w:val=\"right\"/>'\n )}`\n )\n )\n put(\n 'word/_rels/header1.xml.rels',\n `${XML}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rIdLogo\" Type=\"${RT.image}\" Target=\"media/letterhead-logo.png\"/></Relationships>`\n )\n put(\n 'word/header2.xml',\n hdr('hdr', `${mark}${para('[Document title]', 'Header', '<w:jc w:val=\"right\"/>')}`)\n )\n overrides.push(['/word/header1.xml', CT.header], ['/word/header2.xml', CT.header])\n rels.push(['rId21', RT.header, 'header1.xml'], ['rId22', RT.header, 'header2.xml'])\n refs.unshift(\n '<w:headerReference w:type=\"first\" r:id=\"rId21\"/>',\n '<w:headerReference w:type=\"default\" r:id=\"rId22\"/>'\n )\n refs.push('<w:footerReference w:type=\"first\" r:id=\"rId20\"/>')\n } else if (mark) {\n put('word/header1.xml', hdr('hdr', mark))\n overrides.push(['/word/header1.xml', CT.header])\n rels.push(['rId21', RT.header, 'header1.xml'])\n refs.unshift('<w:headerReference w:type=\"default\" r:id=\"rId21\"/>')\n }\n const sectPr = `<w:sectPr>${refs.join('')}<w:pgSz w:w=\"11906\" w:h=\"16838\"/><w:pgMar w:top=\"1440\" w:right=\"1440\" w:bottom=\"1440\" w:left=\"1440\" w:header=\"708\" w:footer=\"708\" w:gutter=\"0\"/><w:cols w:space=\"708\"/>${\n options.letterhead ? '<w:titlePg/>' : ''\n }<w:docGrid w:linePitch=\"360\"/></w:sectPr>`\n put(\n 'word/document.xml',\n `${XML}<w:document ${W_DECL} ${VML_DECL} ${DRAWING_DECL}><w:body>${options.body ?? '<w:p/>'}${sectPr}</w:body></w:document>`\n )\n put('word/settings.xml', settingsXml({}))\n\n if (options.buildingBlocks !== false) {\n put('word/glossary/document.xml', glossaryXml(LEGAL_BUILDING_BLOCKS))\n put('word/glossary/styles.xml', legalStylesXml())\n put('word/glossary/numbering.xml', legalNumberingXml())\n put(\n 'word/glossary/_rels/document.xml.rels',\n `${XML}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"${RT.styles}\" Target=\"styles.xml\"/><Relationship Id=\"rId2\" Type=\"${RT.numbering}\" Target=\"numbering.xml\"/></Relationships>`\n )\n overrides.push(\n ['/word/glossary/document.xml', CT.glossary],\n ['/word/glossary/styles.xml', CT.styles],\n ['/word/glossary/numbering.xml', CT.numbering]\n )\n rels.push(['rId30', RT.glossary, 'glossary/document.xml'])\n }\n\n put(\n 'docProps/core.xml',\n `${XML}<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"><dc:title>ARBI legal template</dc:title></cp:coreProperties>`\n )\n put(\n 'word/_rels/document.xml.rels',\n `${XML}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">${rels\n .map(([id, type, target]) => `<Relationship Id=\"${id}\" Type=\"${type}\" Target=\"${target}\"/>`)\n .join('')}</Relationships>`\n )\n put(\n '_rels/.rels',\n `${XML}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"${RT.officeDocument}\" Target=\"word/document.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/></Relationships>`\n )\n put(\n '[Content_Types].xml',\n `${XML}<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"${CT.rels}\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Default Extension=\"png\" ContentType=\"image/png\"/>${overrides\n .map(([p, t]) => `<Override PartName=\"${p}\" ContentType=\"${t}\"/>`)\n .join('')}</Types>`\n )\n return zipSync(files, { level: 6 })\n}\n","/**\n * Outline numbering linked to styles: in a legal template each level of one multilevel list names\n * its paragraph style (`w:lvl/w:pStyle`: Level 1 … Level 5). Word's Tab and Shift+Tab at the start\n * of such a paragraph move it to the next or previous level, which means changing its style.\n */\nimport { Pkg, RT } from './pkg'\nimport { kids, val } from './xml'\n\nexport interface LinkedLevel {\n /** The style one level down (Tab), if the list has one. */\n next?: string\n /** The style one level up (Shift+Tab). */\n previous?: string\n}\n\nexport function linkedLevelStyles(document: Uint8Array): Record<string, LinkedLevel> {\n const pkg = Pkg.read(document)\n const part = pkg.partOf(pkg.main, RT.numbering)\n const numbering = part ? pkg.xml(part) : undefined\n const out: Record<string, LinkedLevel> = {}\n for (const abs of numbering ? kids(numbering, 'w:abstractNum') : []) {\n const levels = kids(abs, 'w:lvl')\n .map((l) => ({ ilvl: Number(l.attrs['w:ilvl']), style: val(l, 'w:pStyle') }))\n .sort((a, b) => a.ilvl - b.ilvl)\n levels.forEach(({ style }, i) => {\n if (!style || out[style]) return\n const next = levels[i + 1]?.style\n const previous = levels[i - 1]?.style\n out[style] = { ...(next ? { next } : {}), ...(previous ? { previous } : {}) }\n })\n }\n return out\n}\n"]}
1
+ {"version":3,"sources":["../src/template/xml.ts","../src/template/pkg.ts","../src/template/merge.ts","../src/template/blocks.ts","../src/template/track.ts","../src/template/divergence.ts","../src/template/legal.ts","../src/template/numbering.ts"],"names":["readXml","walk","strFromU8","unzipSync","strToU8","zipSync","copy","style","zlibSync"],"mappings":";;;;;;AAQO,IAAM,IAAA,GAAO,8DAAA;AACb,IAAM,IAAA,GAAO,qEAAA;AASb,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EACvC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAGO,SAAS,KAAA,CAAM,GAAA,EAAa,IAAA,GAAO,MAAA,EAAY;AACpD,EAAA,MAAM,IAAA,GAAOA,aAAA,CAAQ,GAAA,EAAK,EAAE,QAAA,EAAU,KAAK,IAAA,GAAO,IAAA,EAAM,WAAA,EAAa,GAAA,EAAW,CAAA;AAChF,EAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,aAAA,CAAc,CAAA,EAAG,IAAI,CAAA,sBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA,CAAA,CAAG,CAAA;AACpF,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KACf,IAAA,CAAK,SAAS,MAAA,GACV,IAAA,CAAK,KAAA,GACL,EAAE,IAAA,EAAM,IAAA,CAAK,MAAM,KAAA,EAAO,EAAE,GAAG,IAAA,CAAK,UAAA,EAAW,EAAG,UAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,EAAE;AAC7F,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAe,OAAO,CAAA,KAAM,QAAQ,CAAA;AAC/E,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,aAAA,CAAc,CAAA,EAAG,IAAI,CAAA,oBAAA,CAAsB,CAAA;AAChE,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC9B,EAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,aAAA,CAAc,CAAA,EAAG,IAAI,CAAA,aAAA,EAAgB,CAAC,CAAA,CAAE,CAAA;AACrF,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,OAAA,GAAU,CAAC,CAAA,KAAc,CAAA,CAAE,QAAQ,IAAA,EAAM,OAAO,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,MAAM,CAAA;AAClG,IAAM,OAAA,GAAU,CAAC,CAAA,KAAc,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAEzD,SAAS,UAAU,IAAA,EAAkB;AAC1C,EAAA,MAAM,GAAA,GAAgB,CAAC,2DAA2D,CAAA;AAClF,EAAA,MAAMC,KAAAA,GAAO,CAAC,IAAA,KAAe;AAC3B,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA;AAChE,IAAA,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA;AACvB,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,CAAO,QAAQ,IAAA,CAAK,KAAK,CAAA,EAAG,GAAA,CAAI,KAAK,GAAA,EAAK,CAAA,EAAG,MAAM,OAAA,CAAQ,CAAC,GAAG,GAAG,CAAA;AACvF,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,KAAW,CAAA,SAAU,KAAK,GAAA,CAAI,KAAK,IAAI,CAAA;AACzD,IAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AACZ,IAAA,IAAA,CAAK,QAAA,CAAS,QAAQA,KAAI,CAAA;AAC1B,IAAA,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,GAAG,CAAA;AAAA,EAC/B,CAAA;AACA,EAAAA,MAAK,IAAI,CAAA;AACT,EAAA,OAAO,GAAA,CAAI,KAAK,EAAE,CAAA;AACpB;AAEO,IAAM,EAAA,GAAK,CAChB,IAAA,EACA,KAAA,GAAgC,EAAC,EACjC,QAAA,GAAmB,EAAC,MACZ;AAAA,EACR,IAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,CAAA;AACO,IAAM,OAAO,CAAC,CAAA,KAAiC,OAAO,CAAA,KAAM,YAAY,CAAA,KAAM,IAAA;AAC9E,IAAM,OAAO,CAAC,CAAA,EAAO,IAAA,KAC1B,CAAA,CAAE,SAAS,MAAA,CAAO,CAAC,CAAA,KAAe,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,KAAS,MAAA,IAAa,CAAA,CAAE,SAAS,IAAA,CAAK,CAAA;AAC/E,IAAM,GAAA,GAAM,CAAC,CAAA,EAAmB,IAAA,KACrC,CAAA,GAAI,KAAK,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC,CAAA,GAAI,MAAA;AAElB,IAAM,GAAA,GAAM,CAAC,CAAA,EAAmB,IAAA,KACrC,IAAI,CAAA,EAAG,IAAI,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA;AAGtB,UAAU,KAAK,CAAA,EAAsB;AAC1C,EAAA,MAAM,CAAA;AACN,EAAA,KAAA,MAAW,CAAA,IAAK,EAAE,QAAA,EAAU,IAAI,KAAK,CAAC,CAAA,EAAG,OAAO,IAAA,CAAK,CAAC,CAAA;AACxD;AAEO,IAAM,KAAA,GAAQ,CAAiB,CAAA,KACnC,OAAO,MAAM,QAAA,GACV,CAAA,GACA,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAO,EAAE,GAAG,EAAE,KAAA,EAAM,EAAG,UAAU,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA,EAAE;AAGtE,IAAM,MAAA,GAAS,CAAC,CAAA,KACrB,CAAC,GAAG,IAAA,CAAK,CAAC,CAAC,CAAA,CACR,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,KAAK,CAAA,CAC9B,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAO,CAAA,KAAM,QAAQ,EAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAChF,KAAK,EAAE,CAAA;;;ACrFZ,IAAM,GAAA,GAAM,qEAAA;AACL,IAAM,EAAA,GAAK;AAAA,EAChB,cAAA,EAAgB,GAAG,GAAG,CAAA,eAAA,CAAA;AAAA,EACtB,MAAA,EAAQ,GAAG,GAAG,CAAA,OAAA,CAAA;AAAA,EACd,SAAA,EAAW,GAAG,GAAG,CAAA,UAAA,CAAA;AAAA,EACjB,KAAA,EAAO,GAAG,GAAG,CAAA,MAAA,CAAA;AAAA,EACb,SAAA,EAAW,GAAG,GAAG,CAAA,UAAA,CAAA;AAAA,EACjB,QAAA,EAAU,GAAG,GAAG,CAAA,SAAA,CAAA;AAAA,EAChB,MAAA,EAAQ,GAAG,GAAG,CAAA,OAAA,CAAA;AAAA,EACd,MAAA,EAAQ,GAAG,GAAG,CAAA,OAAA,CAAA;AAAA,EACd,KAAA,EAAO,GAAG,GAAG,CAAA,MAAA,CAAA;AAAA,EAEb,QAAA,EAAU,GAAG,GAAG,CAAA,iBAAA,CAAA;AAAA,EAChB,gBAAA,EAAkB,GAAG,GAAG,CAAA,iBAAA;AAC1B,CAAA;AACA,IAAM,GAAA,GAAM,gEAAA;AACL,IAAM,EAAA,GAAK;AAAA,EAChB,QAAA,EAAU,GAAG,GAAG,CAAA,kBAAA,CAAA;AAAA,EAChB,QAAA,EAAU,GAAG,GAAG,CAAA,kBAAA,CAAA;AAAA,EAGhB,MAAA,EAAQ,GAAG,GAAG,CAAA,WAAA,CAAA;AAAA,EACd,SAAA,EAAW,GAAG,GAAG,CAAA,cAAA,CAAA;AAAA,EACjB,QAAA,EAAU,GAAG,GAAG,CAAA,aAAA,CAAA;AAAA,EAChB,SAAA,EAAW,GAAG,GAAG,CAAA,cAAA,CAAA;AAAA,EACjB,MAAA,EAAQ,GAAG,GAAG,CAAA,WAAA,CAAA;AAAA,EACd,MAAA,EAAQ,GAAG,GAAG,CAAA,WAAA,CAAA;AAAA,EACd,QAAA,EAAU,GAAG,GAAG,CAAA,sBAAA,CAAA;AAAA,EAChB,KAAA,EAAO,yDAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAUO,IAAM,GAAA,GAAN,MAAM,IAAA,CAAI;AAAA,EACN,KAAA;AAAA,EACD,KAAA;AAAA,EAER,YAAY,KAAA,EAAgC;AAC1C,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,qBAAqB,CAAA;AAC1C,IAAA,IAAI,CAAC,EAAA,EAAI,MAAM,IAAI,cAAc,4CAA4C,CAAA;AAC7E,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAMC,gBAAA,CAAU,KAAA,CAAM,IAAI,EAAE,CAAE,GAAG,qBAAqB,CAAA;AAAA,EACrE;AAAA,EAEA,OAAO,KAAK,KAAA,EAAwB;AAClC,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI;AACF,MAAA,KAAA,GAAQC,iBAAU,KAAK,CAAA;AAAA,IACzB,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,cAAc,+BAA+B,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,IAAI,IAAA,CAAI,IAAI,IAAI,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA,CAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAA;AAAA,EACjF;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA;AAAA,MACT,IAAA,CAAK,IAAA,CAAK,qBAAqB,CAAA,IAAK,qBAAA;AAAA,MACpCC,cAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,KAAK,CAAC;AAAA,KAC/B;AACA,IAAA,OAAOC,cAAA,CAAQ,OAAO,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA,EAAG,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA;AAAA,EAC7D;AAAA;AAAA,EAGA,KAAK,IAAA,EAAkC;AACrC,IAAA,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,EAAE,WAAA,EAAY;AAChD,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,MAAO,CAAA,CAAE,WAAA,EAAY,KAAM,GAAA,EAAK,OAAO,CAAA;AACvE,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EACA,IAAI,IAAA,EAAc;AAChB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,KAAM,MAAA;AAAA,EAC7B;AAAA,EACA,KAAK,IAAA,EAAkC;AACrC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AACxB,IAAA,OAAO,CAAA,KAAM,SAAY,MAAA,GAAYH,gBAAA,CAAU,KAAK,KAAA,CAAM,GAAA,CAAI,CAAC,CAAE,CAAA;AAAA,EACnE;AAAA,EACA,IAAI,IAAA,EAA8B;AAChC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AACxB,IAAA,OAAO,CAAA,KAAM,MAAA,GAAY,MAAA,GAAY,KAAA,CAAM,GAAG,IAAI,CAAA;AAAA,EACpD;AAAA,EACA,MAAA,CAAO,IAAA,EAAc,IAAA,EAAU,WAAA,EAAsB;AACnD,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA,EAAME,cAAA,CAAQ,SAAA,CAAU,IAAI,CAAC,CAAC,CAAA;AAChE,IAAA,IAAI,WAAA,EAAa,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,WAAW,CAAA;AAAA,EACxD;AAAA,EACA,QAAA,CAAS,IAAA,EAAc,KAAA,EAAmB,WAAA,EAAsB;AAC9D,IAAA,IAAA,CAAK,MAAM,GAAA,CAAI,IAAA,CAAK,KAAK,IAAI,CAAA,IAAK,MAAM,KAAK,CAAA;AAC7C,IAAA,IAAI,WAAA,EAAa,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,WAAW,CAAA;AAAA,EACxD;AAAA,EACA,OAAO,IAAA,EAAc;AACnB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AACxB,IAAA,IAAI,MAAM,MAAA,EAAW;AACrB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA;AACnB,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAA;AAAA,MACxC,CAAC,CAAA,KACC,EACE,OAAO,CAAA,KAAM,YACb,CAAA,CAAE,IAAA,KAAS,UAAA,IACX,CAAA,CAAE,MAAM,QAAA,CAAS,WAAA,OAAkB,CAAA,CAAA,EAAI,CAAA,CAAE,aAAa,CAAA,CAAA;AAAA,KAE5D;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC/B;AAAA,EAEA,YAAY,IAAA,EAAkC;AAC5C,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,CAAC,GAAG,WAAA,EAAY;AACvD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,UAAU,CAAA,CAAE,IAAA;AAAA,MAC5C,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,QAAA,CAAS,aAAY,KAAM;AAAA,KAC5C;AACA,IAAA,IAAI,QAAA,EAAU,OAAO,QAAA,CAAS,KAAA,CAAM,WAAA;AACpC,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,WAAA,CAAY,GAAG,IAAI,CAAC,CAAA;AAChD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,SAAS,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,SAAA,CAAU,WAAA,EAAY,KAAM,GAAG,GAAG,KAAA,CACtF,WAAA;AAAA,EACL;AAAA,EACA,cAAA,CAAe,MAAc,IAAA,EAAc;AACzC,IAAA,MAAM,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,UAAU,CAAA,CAAE,IAAA;AAAA,MAC5C,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,SAAS,WAAA,EAAY,KAAM,KAAK,WAAA;AAAY,KAC7D;AACA,IAAA,IAAI,QAAA,EAAU,QAAA,CAAS,KAAA,CAAM,WAAA,GAAc,IAAA;AAAA,SACtC,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,EAAA,CAAG,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,CAAC,CAAA;AAAA,EACrF;AAAA;AAAA,EAEA,aAAA,CAAc,KAAa,IAAA,EAAc;AACvC,IAAA,IACE,CAAC,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,SAAS,CAAA,CAAE,IAAA;AAAA,MAC3B,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,UAAU,WAAA,EAAY,KAAM,IAAI,WAAA;AAAY,KAC7D;AAEA,MAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,EAAA,CAAG,SAAA,EAAW,EAAE,SAAA,EAAW,GAAA,EAAK,WAAA,EAAa,IAAA,EAAM,CAAC,CAAA;AAAA,EACpF;AAAA,EAEA,KAAK,KAAA,EAAsB;AACzB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,KAAK,CAAC,CAAA;AACrC,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,IAAA,OAAO,KAAK,IAAA,EAAM,cAAc,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC5C,EAAA,EAAI,EAAE,KAAA,CAAM,EAAA;AAAA,MACZ,IAAA,EAAM,EAAE,KAAA,CAAM,IAAA;AAAA,MACd,MAAA,EAAQ,EAAE,KAAA,CAAM,MAAA;AAAA,MAChB,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,UAAA,KAAe;AAAA,KACnC,CAAE,CAAA;AAAA,EACJ;AAAA,EACA,OAAA,CAAQ,OAAe,IAAA,EAAa;AAClC,IAAA,MAAM,IAAA,GAAO,EAAA;AAAA,MACX,eAAA;AAAA,MACA,EAAE,OAAO,8DAAA,EAA+D;AAAA,MACxE,IAAA,CAAK,GAAA;AAAA,QAAI,CAAC,CAAA,KACR,EAAA,CAAG,cAAA,EAAgB;AAAA,UACjB,IAAI,CAAA,CAAE,EAAA;AAAA,UACN,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,QAAQ,CAAA,CAAE,MAAA;AAAA,UACV,GAAI,CAAA,CAAE,QAAA,GAAW,EAAE,UAAA,EAAY,UAAA,KAAe;AAAC,SAChD;AAAA;AACH,KACF;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG,IAAI,CAAA;AAAA,EACnC;AAAA;AAAA,EAEA,MAAA,CAAO,KAAA,EAAe,IAAA,EAAc,MAAA,EAAgB,WAAW,KAAA,EAAe;AAC5E,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAC5B,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA,EAAG,MAAM,CAAA;AACzD,IAAA,IAAA,CAAK,KAAK,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,UAAU,CAAA;AACxC,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,IAAI,CAAA;AACxB,IAAA,OAAO,EAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAA,CAAO,OAAe,GAAA,EAAkB;AACtC,IAAA,OAAO,aAAA,CAAc,KAAA,EAAO,GAAA,CAAI,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA,EAEA,MAAA,CAAO,OAAe,IAAA,EAAkC;AACtD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,CAAC,EAAE,QAAQ,CAAA;AACvE,IAAA,OAAO,OAAO,IAAA,CAAK,IAAA,CAAK,KAAK,MAAA,CAAO,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,EACjD;AAAA;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,EAAA,EAAI,GAAG,cAAc,CAAA;AAC9C,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,cAAc,2CAA2C,CAAA;AAC9E,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAGA,SAAS,SAAS,KAAA,EAAuB;AACvC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,WAAA,CAAY,GAAG,CAAA;AACnC,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAC,CAAA,MAAA,EAAS,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAC,CAAA,KAAA,CAAA;AACpE;AAEA,SAAS,aAAA,CAAc,OAAe,MAAA,EAAwB;AAC5D,EAAA,IAAI,OAAO,UAAA,CAAW,GAAG,GAAG,OAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,KAAA,CACV,KAAA,CAAM,CAAA,EAAG,MAAM,WAAA,CAAY,GAAG,CAAA,GAAI,CAAC,CAAA,CACnC,KAAA,CAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA;AACjB,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,EAAG;AACnC,IAAA,IAAI,GAAA,KAAQ,IAAA,EAAM,IAAA,CAAK,GAAA,EAAI;AAAA,SAAA,IAClB,QAAQ,GAAA,IAAO,GAAA,KAAQ,EAAA,EAAI,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,IAAA,CAAK,KAAK,GAAG,CAAA;AACtB;AAGO,SAAS,cAAA,CAAe,OAAe,IAAA,EAAsB;AAClE,EAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,CAAA,EAAG,MAAM,WAAA,CAAY,GAAG,IAAI,CAAC,CAAA;AACtD,EAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,GAAI,IAAA,CAAK,MAAM,IAAA,CAAK,MAAM,CAAA,GAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACnE;AAEA,SAAS,OAAA,CAAQ,OAA4B,MAAA,EAAwB;AACnE,EAAA,KAAA,IAAS,IAAI,CAAA,IAAK,CAAA,EAAA,EAAK,IAAI,CAAC,MAAM,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,EAAG,CAAC,CAAA,CAAE,CAAA,SAAU,CAAA,EAAG,MAAM,GAAG,CAAC,CAAA,CAAA;AAC9E;AAGO,SAAS,aAAA,CAAc,GAAA,EAAU,MAAA,EAAgB,IAAA,EAAc,GAAA,EAAqB;AACzF,EAAA,KAAA,IAAS,CAAA,GAAI,KAAK,CAAA,EAAA,EAAK;AACrB,IAAA,MAAM,IAAA,GAAO,GAAG,MAAM,CAAA,EAAG,IAAI,CAAA,EAAG,CAAC,IAAI,GAAG,CAAA,CAAA;AACxC,IAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,IAAI,GAAG,OAAO,IAAA;AAAA,EAC7B;AACF;;;ACnNA,IAAM,UAAU,CAAC,CAAA,KAAc,CAAA,CAAE,IAAA,GAAO,WAAA,EAAY;AAmBpD,IAAM,cAAA,GAAiB;AAAA,EACrB,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,6BAAA;AAAA,EACA,qBAAA;AAAA,EACA,8BAAA;AAAA,EACA,0BAAA;AAAA,EACA,2BAAA;AAAA,EACA,iCAAA;AAAA,EACA,kBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,wBAAA;AAAA,EACA,8BAAA;AAAA,EACA,8BAAA;AAAA,EACA,eAAA;AAAA,EACA,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA,sBAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,oBAAA;AAAA,EACA,cAAA;AAAA,EACA,yBAAA;AAAA,EACA,uBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,0BAAA;AAAA,EACA,mBAAA;AAAA,EACA,sBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,0BAAA;AAAA,EACA,gCAAA;AAAA,EACA,8BAAA;AAAA,EACA,qCAAA;AAAA,EACA,mCAAA;AAAA,EACA,uCAAA;AAAA,EACA,+BAAA;AAAA,EACA,6BAAA;AAAA,EACA,sBAAA;AAAA,EACA,wBAAA;AAAA,EACA,2BAAA;AAAA,EACA,iBAAA;AAAA,EACA,2BAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,8BAAA;AAAA,EACA,kBAAA;AAAA,EACA,sBAAA;AAAA,EACA,6BAAA;AAAA,EACA,4BAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,mBAAA;AAAA,EACA,eAAA;AAAA,EACA,6BAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,8BAAA;AAAA,EACA,6BAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,uBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA;AAGA,SAAS,YAAA,CAAa,MAAA,EAAY,KAAA,EAAW,KAAA,EAA0B;AACrE,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,KAAA,CAAM,IAAI,CAAA;AAC5E,EAAA,IAAI,MAAM,CAAA,EAAG,OAAO,MAAM,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA,GAAI,KAAA,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,OAAO,QAAA,CAAS,SAAA;AAAA,IAC7B,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA,GAAI;AAAA,GACzD;AACA,EAAA,IAAI,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,OACrC,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,GAAG,KAAK,CAAA;AAC9C;AAGA,IAAM,iBAAA,GAAoB;AAAA,EACxB,kBAAA;AAAA,EACA,2BAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,WAAA,GAAc,EAAE,SAAA,EAAW,IAAA,EAAM,WAAW,IAAA,EAAK;AAEvD,SAAS,UAAA,CACP,GAAA,EACA,IAAA,EACA,IAAA,EACA,aACA,IAAA,EACQ;AACR,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,MAAM,IAAI,CAAA;AAC1C,EAAA,IAAI,UAAU,OAAO,QAAA;AACrB,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,IAAI,IACrB,aAAA,CAAc,GAAA,EAAK,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,oBAAA,EAAsB,EAAE,CAAA,EAAG,KAAK,CAAA,GACzE,IAAA;AACJ,EAAA,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,IAAA,EAAK,EAAG,WAAW,CAAA;AACpC,EAAA,GAAA,CAAI,MAAA,CAAO,IAAI,IAAA,EAAM,IAAA,EAAM,eAAe,GAAA,CAAI,IAAA,EAAM,IAAI,CAAC,CAAA;AACzD,EAAA,OAAO,IAAA;AACT;AAQA,SAAS,YAAY,MAAA,EAAwB;AAC3C,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAgB;AACjC,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA,EAAG;AACvC,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA;AAC9B,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC,CAAA;AACd,IAAA,MAAM,IAAA,GAAO,CAAC,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA,EAAG,GAAI,GAAA,CAAI,CAAA,EAAG,WAAW,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,IAAK,EAAG,CAAA;AAC1E,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM,IAAI,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAC,IAAI,CAAC,CAAA;AAAA,EACjF;AACA,EAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AACxB;AAEA,IAAM,UAAA,GAAa;AAAA,EACjB,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA;AAGA,SAAS,eAAA,CAAgB,MAAU,GAAA,EAAkC;AACnE,EAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AACpB,EAAA,KAAA,MAAW,CAAA,IAAK,KAAK,IAAI,CAAA;AACvB,IAAA,IAAI,UAAA,CAAW,QAAA,CAAS,CAAA,CAAE,IAAI,CAAA,IAAK,IAAI,GAAA,CAAI,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA;AACzD,MAAA,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA,GAAI,GAAA,CAAI,IAAI,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA;AACjD;AAGA,IAAM,QAAA,GAAW,CAAC,IAAA,KAChB,CAAC,GAAG,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,SAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA;AAEjF,SAAS,KAAA,CAAM,OAAa,IAAA,EAAsB;AAChD,EAAA,OAAO,MAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,KAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,CAAA,CAAE,MAAM,IAAI,CAAC,CAAA,IAAK,CAAC,GAAG,CAAC,CAAA;AAC1E;AAOA,SAAS,eAAA,CACP,IAAA,EACA,IAAA,EACA,MAAA,EACA,UAAA,EACqB;AACrB,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAoB;AACpC,EAAA,IAAI,CAAC,MAAM,OAAO,GAAA;AAClB,EAAA,MAAM,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,KAAA,CAAM,SAAS,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAC5E,EAAA,MAAM,YAAY,IAAI,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,eAAe,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AACjG,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,IAAI,UAAU,KAAA,CAAM,IAAA,CAAK,MAAM,OAAO,CAAA,EAAG,SAAS,CAAA,GAAI,CAAA;AACtD,EAAA,IAAI,eAAe,KAAA,CAAM,IAAA,CAAK,MAAM,eAAe,CAAA,EAAG,iBAAiB,CAAA,GAAI,CAAA;AAC3E,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,IAAA,CAAK,MAAM,eAAe,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAA;AAC9E,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,MAAM,CAAA;AACxB,EAAA,OAAO,MAAM,MAAA,EAAQ;AACnB,IAAA,MAAM,EAAA,GAAK,MAAM,KAAA,EAAM;AACvB,IAAA,IAAI,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,IAAK,OAAO,GAAA,EAAK;AAC/B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACvB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,EAAK,iBAAiB,CAAA;AACxC,IAAA,IAAI,UAAU,MAAA,IAAa,CAAC,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA,EAAG;AAClD,MAAA,MAAM,GAAA,GAAM,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA;AAC/B,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAME,KAAAA,GAAO,MAAM,GAAG,CAAA;AACtB,QAAAA,KAAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA,GAAI,OAAO,YAAY,CAAA;AACnD,QAAA,WAAA,CAAY,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,YAAA,EAAc,CAAC,CAAA;AAG7C,QAAA,MAAM,IAAA,GAAO,GAAA,CAAIA,KAAAA,EAAM,QAAQ,CAAA;AAC/B,QAAA,IAAI,QAAQ,KAAA,CAAM,GAAA,CAAI,KAAK,KAAA,CAAM,OAAO,CAAC,CAAA,EAAG;AAC1C,UAAA,IAAI,CAAA,GAAA,CAAK,SAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG,EAAE,KAAK,SAAA,IAAc,CAAA;AAC5D,UAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,EAAG,CAAA,EAAA;AACjE,UAAA,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,GAAI,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAAA,QACpE;AACA,QAAA,IAAI,MAAM,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA;AAEvC,QAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAKA,KAAAA,EAAM,OAAO,CAAA;AAChC,UAAA,CAAA,CAAE,QAAA,GAAW,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,kBAAA,CAAmB,CAAA;AAEnF,QAAA,MAAM,QAAA,GAAW,KAAK,QAAA,CAAS,SAAA;AAAA,UAC7B,CAAC,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,IAAA,KAAS,qBAAA;AAAA,SACtD;AACA,QAAA,IAAI,QAAA,GAAW,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,KAAKA,KAAI,CAAA;AAAA,aACpC,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,QAAA,EAAU,GAAGA,KAAI,CAAA;AAC3C,QAAA,MAAM,IAAA,GAAO,GAAA,CAAIA,KAAAA,EAAM,gBAAgB,CAAA;AACvC,QAAA,MAAM,MAAA,GAAS,IAAA,GAAO,UAAA,CAAW,IAAI,CAAA,GAAI,MAAA;AACzC,QAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAAA,MAC/B;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,GAAG,CAAA;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAAI,MAAA,CAAO,OAAO,CAAA;AACtC,IAAA,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,MAAA,CAAO,OAAA,EAAS,CAAC,CAAA;AAC7B,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,IAAA,EAAM,iBAAiB,CAAA;AAC1C,IAAA,IAAI,UAAU,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,OAAO,CAAC,CAAA;AACjD,MAAA,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,WAAA,CAAY,IAAI,MAAA,CAAO,KAAA,CAAM,OAAO,CAAC,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,qBAAqB,CAAA;AAC1F,IAAA,IAAI,OAAA,GAAU,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,SACnC,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,WAAA,CAAY,GAAA,EAAU,GAAA,EAAU,MAAA,EAA6B;AACpE,EAAA,MAAM,gBAAgB,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,MAAM,CAAA;AACpD,EAAA,IAAI,CAAC,aAAA,EAAe;AACpB,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,aAAa,CAAA;AAC/B,EAAA,MAAM,UAAA,GAAa,UAAA;AAAA,IAAW,GAAA;AAAA,IAAK,EAAA,CAAG,MAAA;AAAA,IAAQ,iBAAA;AAAA,IAAmB,EAAA,CAAG,MAAA;AAAA,IAAQ,MAC1E,EAAA,CAAG,UAAA,EAAY,EAAE,GAAG,aAAa;AAAA,GACnC;AACA,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,UAAU,CAAA;AAC5B,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,KAAK,CAAA;AACzC,IAAA,IAAI,CAAA,CAAE,UAAA,CAAW,QAAQ,CAAA,IAAK,EAAE,CAAA,IAAK,CAAA,CAAE,KAAA,CAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AAG9D,EAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,gBAAA,EAAkB,eAAe,CAAA,EAAG;AACtD,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AACrB,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,QAAA,CAAS,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA;AACjE,IAAA,IAAI,MAAM,CAAA,EAAG,CAAA,CAAE,SAAS,EAAE,CAAA,GAAI,MAAM,CAAC,CAAA;AAAA,SAChC,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,EAAG,eAAe,CAAA;AACjC,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,EAAG,gBAAgB,CAAA;AAClC,EAAA,CAAA,CAAE,QAAA,GAAW,EAAE,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAA,IAAM,CAAA,KAAM,EAAE,CAAA;AAC1D,EAAA,CAAA,CAAE,QAAA,CAAS,QAAQ,GAAI,CAAC,IAAI,EAAE,CAAA,CAAE,MAAA,CAAO,OAAO,CAAU,CAAA;AAKxD,EAAA,MAAM,MAAA,GAAS,YAAY,CAAC,CAAA;AAC5B,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA,EAAG;AAClC,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA;AAC9B,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AACzB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA;AAC5B,IAAA,MAAM,KAAA,GAAQ,IAAA,IAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAE,CAAA;AAC/E,IAAA,IAAI,SAAS,CAAC,IAAA,CAAK,CAAA,EAAG,SAAS,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,WAAW,CAAA,KAAM,KAAA,CAAM,KAAA,CAAM,WAAW,CAAC,CAAA;AAC5F,MAAA,MAAA,CAAO,GAAA,CAAI,EAAA,EAAI,KAAA,CAAM,KAAA,CAAM,WAAW,CAAC,CAAA;AAAA,EAC3C;AACA,EAAA,MAAM,WAAW,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC7C,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,WAAW,CAAC,CAAA;AACpC,MAAA,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,GAAI,MAAA,CAAO,IAAI,IAAA,CAAK,KAAA,CAAM,WAAW,CAAC,CAAA;AAC9D,IAAA,eAAA,CAAgB,MAAM,MAAM,CAAA;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAGD,EAAA,MAAM,eAAe,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,SAAS,CAAA;AACtD,EAAA,MAAM,KAAA,GAAQ,YAAA,GAAe,GAAA,CAAI,GAAA,CAAI,YAAY,CAAA,GAAI,MAAA;AACrD,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AACxC,EAAA,IAAI,MAAA,uBAAa,GAAA,EAAoB;AACrC,EAAA,IAAI,KAAA,IAAS,OAAO,MAAA,EAAQ;AAC1B,IAAA,MAAM,aAAA,GAAgB,UAAA;AAAA,MAAW,GAAA;AAAA,MAAK,EAAA,CAAG,SAAA;AAAA,MAAW,oBAAA;AAAA,MAAsB,EAAA,CAAG,SAAA;AAAA,MAAW,MACtF,EAAA,CAAG,aAAA,EAAe,EAAE,GAAG,aAAa;AAAA,KACtC;AACA,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,aAAa,CAAA;AACnC,IAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAgB;AACnC,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA,KAAM,GAAG,CAAA;AACtE,MAAA,OAAO,EAAA,GAAK,QAAA,CAAS,EAAE,CAAA,CAAE,CAAC,CAAA,GAAI,MAAA;AAAA,IAChC,CAAA;AACA,IAAA,MAAA,GAAS,eAAA,CAAgB,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,WAAW,CAAA;AAE1D,IAAA,KAAA,MAAW,OAAO,IAAA,CAAK,KAAA,EAAO,eAAe,CAAA,EAAG,eAAA,CAAgB,KAAK,MAAM,CAAA;AAC3E,IAAA,GAAA,CAAI,MAAA,CAAO,eAAe,KAAK,CAAA;AAAA,EACjC;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,QAAA;AACd,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,CAAC,CAAA;AACpB,MAAA,IAAI,CAAA,CAAE,SAAS,SAAA,IAAa,MAAA,CAAO,IAAI,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA;AACrD,QAAA,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA,CAAO,IAAI,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA;AAGpD,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA;AAC9B,IAAA,MAAM,EAAA,GAAK,EAAE,QAAA,CAAS,SAAA;AAAA,MACpB,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,SAAA,IAAa,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA,KAAM;AAAA,KACrE;AACA,IAAA,IAAI,EAAA,IAAM,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,GAAI,CAAA;AAAA,SACzB,CAAA,CAAE,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA;AAAA,EACxB;AAEA,EAAA,KAAA,MAAW,CAAA,IAAK,QAAA;AACd,IAAA,IAAI,CAAA,CAAE,MAAM,WAAW,CAAA,KAAM,OAAO,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA,KAAM,MAAA,EAAA;AAC3D,MAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA;AAC/B,QAAA,IAAI,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAA,IAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA;AAC3E,UAAA,OAAO,CAAA,CAAE,MAAM,WAAW,CAAA;AAAA,IAAA;AAElC,EAAA,GAAA,CAAI,MAAA,CAAO,YAAY,CAAC,CAAA;AACxB,EAAA,MAAA,CAAO,MAAA,GAAS,SAAS,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,WAAW,CAAC,CAAA;AACxD,EAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAC1C,EAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAC9C;AAIA,SAAS,UAAA,CAAW,KAAU,GAAA,EAAU;AACtC,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,KAAK,CAAA;AACvC,EAAA,IAAI,CAAC,CAAA,EAAG;AACR,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA;AAC7B,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,KAAK,CAAA;AACvC,EAAA,IAAI,GAAG,OAAO,KAAK,GAAA,CAAI,QAAA,CAAS,GAAG,KAAK,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,uBAAuB,CAAA,GACxC,cAAc,GAAA,EAAK,aAAA,EAAe,OAAA,EAAS,KAAK,CAAA,GAChD,uBAAA;AACJ,EAAA,GAAA,CAAI,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,EAAA,CAAG,KAAK,CAAA;AAClC,EAAA,GAAA,CAAI,MAAA,CAAO,IAAI,IAAA,EAAM,EAAA,CAAG,OAAO,cAAA,CAAe,GAAA,CAAI,IAAA,EAAM,IAAI,CAAC,CAAA;AAC/D;AAEA,SAAS,UAAA,CAAW,KAAU,GAAA,EAAU;AACtC,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,SAAS,CAAA;AAC3C,EAAA,IAAI,CAAC,CAAA,EAAG;AACR,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA;AACnB,EAAA,MAAM,IAAA,GAAO,UAAA;AAAA,IAAW,GAAA;AAAA,IAAK,EAAA,CAAG,SAAA;AAAA,IAAW,oBAAA;AAAA,IAAsB,EAAA,CAAG,SAAA;AAAA,IAAW,MAC7E,EAAA,CAAG,SAAA,EAAW,EAAE,GAAG,aAAa;AAAA,GAClC;AACA,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AACtB,EAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,CAAA,EAAG,QAAQ,CAAA,EAAG;AACjC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAEpB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,CAAK,CAAC,CAAA,IAAK,UAAA,CAAW,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACjF,IAAA,MAAM,EAAA,GAAK,EAAE,QAAA,CAAS,SAAA;AAAA,MACpB,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,KAAK,CAAA,CAAE,IAAA,KAAS,QAAA,IAAY,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAA,KAAM,CAAA,CAAE,MAAM,QAAQ;AAAA,KACjF;AACA,IAAA,IAAI,EAAA,IAAM,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,GAAI,IAAA;AAAA,SACzB,CAAA,CAAE,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAAA,EAC3B;AACA,EAAA,GAAA,CAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AACpB;AAEA,SAAS,WAAW,GAAA,EAAsC;AACxD,EAAA,MAAM,IAAA,GAAO,UAAA;AAAA,IAAW,GAAA;AAAA,IAAK,EAAA,CAAG,QAAA;AAAA,IAAU,mBAAA;AAAA,IAAqB,EAAA,CAAG,QAAA;AAAA,IAAU,MAC1E,EAAA,CAAG,YAAA,EAAc,EAAE,GAAG,aAAa;AAAA,GACrC;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,EAAG;AACtC;AAEA,SAAS,aAAA,CAAc,GAAA,EAAU,GAAA,EAAU,IAAA,EAA4B;AACrE,EAAA,MAAM,QAAQ,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,QAAQ,CAAA;AAC9C,EAAA,MAAM,CAAA,GAAI,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA;AACnC,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,WAAW,GAAG,CAAA;AACrC,EAAA,IAAI,CAAA;AACF,IAAA,KAAA,MAAW,QAAQ,iBAAA,EAAmB;AACpC,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AACrB,MAAA,IAAI,GAAG,YAAA,CAAa,IAAA,EAAM,KAAA,CAAM,CAAC,GAAG,cAAc,CAAA;AAAA,IACpD;AACF,EAAA,IAAI,IAAA,CAAK,aAAa,CAAA,EAAG;AACvB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,CAAA,EAAG,qBAAqB,CAAA;AACzC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,qBAAA,CAAsB,CAAA;AAC1F,IAAA,IAAI,MAAM,YAAA,CAAa,IAAA,EAAM,KAAA,CAAM,IAAI,GAAG,cAAc,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,IAAA,IAAI,CAAC,KAAK,KAAA,CAAM,SAAS,GAAG,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAAI,IAAA;AACpD,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,EAAA,CAAG,gBAAgB,CAAA;AACxE,IAAA,GAAA,CAAI,OAAA,CAAQ,MAAM,IAAI,CAAA;AACtB,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,EAAA,CAAG,kBAAkB,SAAA,CAAU,IAAA,CAAK,gBAAgB,CAAA,EAAG,IAAI,CAAA;AACvF,IAAA,YAAA,CAAa,IAAA,EAAM,GAAG,oBAAA,EAAsB,EAAE,QAAQ,EAAA,EAAI,GAAG,cAAc,CAAA;AAAA,EAC7E;AACA,EAAA,GAAA,CAAI,MAAA,CAAO,MAAM,IAAI,CAAA;AACvB;AAKA,SAAS,QAAA,CAAS,GAAA,EAAU,GAAA,EAAU,MAAA,EAAgB,IAAA,EAAsB;AAC1E,EAAA,MAAM,MAAM,MAAA,CAAO,KAAA,CAAM,OAAO,WAAA,CAAY,GAAG,IAAI,CAAC,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,CAAA,EAAG,OAAO,WAAA,CAAY,GAAG,IAAI,CAAC,CAAA;AAC1D,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,EAAK,MAAA,EAAQ,MAAM,GAAG,CAAA;AACjD,EAAA,GAAA,CAAI,QAAA,CAAS,IAAA,EAAM,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,EAAI,GAAA,CAAI,WAAA,CAAY,MAAM,CAAC,CAAA;AAClE,EAAA,MAAM,OAAc,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC9C,IAAA,IAAI,CAAA,CAAE,QAAA,EAAU,OAAO,EAAE,GAAG,CAAA,EAAE;AAC9B,IAAA,MAAM,SAAS,GAAA,CAAI,IAAA,CAAK,IAAI,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAC,CAAA;AAC7C,IAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAE,GAAG,CAAA,EAAE;AAC3B,IAAA,MAAM,OAAO,MAAA,CAAO,KAAA,CAAM,OAAO,WAAA,CAAY,GAAG,IAAI,CAAC,CAAA;AACrD,IAAA,MAAM,OAAA,GAAU,OAAO,KAAA,CAAM,CAAA,EAAG,OAAO,WAAA,CAAY,GAAG,IAAI,CAAC,CAAA;AAC3D,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC9F,IAAA,MAAM,SAAS,aAAA,CAAc,GAAA,EAAK,OAAA,EAAS,KAAA,IAAS,QAAQ,IAAI,CAAA;AAChE,IAAA,GAAA,CAAI,SAAS,MAAA,EAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,MAAM,CAAE,CAAA;AAC3C,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,WAAA,CAAY,MAAM,CAAA;AACnC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI,yBAAyB,IAAA,CAAK,IAAI,GAAG,GAAA,CAAI,aAAA,CAAc,MAAM,IAAI,CAAA;AAAA,WAChE,GAAA,CAAI,cAAA,CAAe,MAAA,EAAQ,IAAI,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,EAAE,GAAG,CAAA,EAAG,QAAQ,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA,EAAE;AAAA,EACtD,CAAC,CAAA;AACD,EAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,GAAA,CAAI,OAAA,CAAQ,MAAM,IAAI,CAAA;AACvC,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAY,IAAA,EAA0B;AAC7C,EAAA,OAAO,GAAA,CAAI,MAAM,UAAU,CAAA;AAC7B;AAEA,SAAS,cAAA,CAAe,KAAU,GAAA,EAAU;AAC1C,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,IAAA,EAAM,QAAQ,CAAE,CAAA;AAC9C,EAAA,IAAI,CAAC,KAAA,EAAO;AACZ,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,EAAO,QAAQ,CAAA;AAChC,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,cAAc,0BAA0B,CAAA;AAC7D,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAC5C,IAAA,IAAI,CAAA,CAAE,UAAA,CAAW,QAAQ,CAAA,IAAK,EAAE,CAAA,IAAK,KAAA,CAAM,KAAA,CAAA,EAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AAGtE,EAAA,MAAM,GAAA,GAAM,YAAY,IAAI,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,MACX,IAAA,CAAK,GAAG,EACL,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,mBAAA,IAAuB,EAAE,IAAA,KAAS,mBAAmB,CAAA,CAC9E,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,MAAM,CAAC,CAAA,GAC7B,EAAC;AACL,EAAA,MAAM,YAAY,IAAI,GAAA;AAAA,IACpB,CAAC,GAAG,IAAA,CAAK,IAAI,CAAC,CAAA,CACX,MAAA;AAAA,MACC,CAAC,MAAM,CAAA,KAAM,GAAA,KAAQ,EAAE,IAAA,KAAS,mBAAA,IAAuB,EAAE,IAAA,KAAS,mBAAA;AAAA,KACpE,CACC,OAAO,CAAC,CAAA,KAAM,CAAC,GAAA,IAAO,CAAC,CAAC,GAAG,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA,CACjD,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,MAAM,CAAC;AAAA,GAC/B;AACA,EAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,EAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AAC5B,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,mBAAA,IAAuB,GAAA,CAAI,SAAS,mBAAA,EAAqB;AAC1E,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,GAAA,CAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AACrE,IAAA,MAAM,MAAA,GAAS,OAAO,GAAA,CAAI,IAAA,CAAK,IAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,CAAC,CAAA;AACxD,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,MAAA,EAAQ;AACnB,MAAA,IAAA,CAAK,SAAS,MAAA,CAAO,IAAA,CAAK,SAAS,OAAA,CAAQ,GAAG,GAAG,CAAC,CAAA;AAClD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,QAAA;AAAA,MACb,GAAA;AAAA,MACA,GAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA,CAAI,IAAA,KAAS,mBAAA,GAAsB,QAAA,GAAW;AAAA,KAChD;AACA,IAAA,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,GAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,cAAA,CAAe,GAAA,CAAI,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,EACrF;AACA,EAAA,IAAI,GAAA,OAAU,QAAA,CAAS,IAAA,CAAK,SAAS,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAI,IAAA;AAAA,OAChD,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAC9B,EAAA,KAAA,MAAW,MAAM,MAAA,EAAQ;AACvB,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA,EAAG;AACvB,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AACxC,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,OAAO,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,CAAC,CAAA;AACpC,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,GAAG,CAAC,CAAA;AAAA,EAClC;AACA,EAAA,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAC1B,EAAA,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAC5B;AAKO,SAAS,aAAA,CACd,QAAA,EACA,QAAA,EACA,OAAA,GAAgC,EAAC,EACmB;AACpD,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAC7B,EAAA,MAAM,MAAA,GAA8B,EAAE,MAAA,EAAQ,EAAC,EAAG,SAAS,EAAC,EAAG,SAAA,EAAW,EAAC,EAAE;AAC7E,EAAA,WAAA,CAAY,GAAA,EAAK,KAAK,MAAM,CAAA;AAC5B,EAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AACnB,EAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AACnB,EAAA,aAAA,CAAc,GAAA,EAAK,KAAK,OAAO,CAAA;AAC/B,EAAA,IAAI,OAAA,CAAQ,SAAA,EAAW,cAAA,CAAe,GAAA,EAAK,GAAG,CAAA;AAC9C,EAAA,OAAO,EAAE,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,MAAA,EAAO;AACtC;AAYO,SAAS,eAAA,CACd,QAAA,EACA,OAAA,GAAyC,EAAC,EAC9B;AACZ,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAC7B,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,GAAA,CAAI,cAAA,CAAe,IAAA,EAAM,EAAA,CAAG,QAAQ,CAAA;AACpC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAC1B,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KACZ,IAAA,KAAS,EAAA,CAAG,QAAA,IAAY,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,IAAK,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAA;AACtF,EAAA,KAAA,MAAW,GAAA,IAAO,KAAK,MAAA,CAAO,CAAC,MAAM,IAAA,CAAK,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG;AAClD,IAAA,MAAM,SAAS,GAAA,CAAI,IAAA,CAAK,IAAI,MAAA,CAAO,IAAA,EAAM,GAAG,CAAC,CAAA;AAC7C,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,KAAA,MAAW,GAAA,IAAO,GAAA,CAAI,IAAA,CAAK,MAAM,GAAG,IAAI,CAAC,GAAA,CAAI,QAAA,MAAc,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,GAAG,CAAC,CAAA;AACzF,MAAA,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,GAAA,CAAI,OAAA;AAAA,IACF,IAAA;AAAA,IACA,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,CAAC,IAAA,CAAK,CAAA,CAAE,IAAI,CAAC;AAAA,GAClC;AACA,EAAA,IAAI,QAAQ,gBAAA,EAAkB;AAC5B,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,WAAW,GAAG,CAAA;AACrC,IAAA,IAAI,CAAC,KAAK,KAAA,CAAM,SAAS,GAAG,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAAI,IAAA;AACpD,IAAA,GAAA,CAAI,OAAA;AAAA,MACF,IAAA;AAAA,MACA,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,EAAA,CAAG,gBAAgB;AAAA,KAC7D;AACA,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,EAAA,CAAG,kBAAkB,SAAA,CAAU,OAAA,CAAQ,gBAAgB,CAAA,EAAG,IAAI,CAAA;AAC1F,IAAA,YAAA,CAAa,IAAA,EAAM,GAAG,oBAAA,EAAsB,EAAE,QAAQ,EAAA,EAAI,GAAG,cAAc,CAAA;AAC3E,IAAA,GAAA,CAAI,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAI,KAAA,EAAM;AACnB;AAMO,SAAS,mBAAA,CACd,OAAA,EACA,QAAA,EACA,gBAAA,EACY;AACZ,EAAA,OAAO,aAAA,CAAc,SAAS,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,gBAAA,EAAkB,CAAA,CAAE,KAAA;AACjF;ACvlBA,SAAS,WAAW,GAAA,EAAkD;AACpE,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,QAAQ,CAAA,IAAK,GAAA,CAAI,IAAA,CAAK,4BAA4B,CAAA;AACvF,EAAA,MAAM,IAAA,GAAO,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,GAAI,MAAA;AACpC,EAAA,OAAO,IAAA,IAAQ,IAAA,GAAO,EAAE,IAAA,EAAM,MAAK,GAAI,MAAA;AACzC;AAEA,SAAS,SAAS,IAAA,EAAgB;AAChC,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,EAAM,YAAY,CAAA,IAAK,MAAM,WAAW,CAAA;AAC1D;AAEA,SAAS,OAAO,IAAA,EAAyC;AACvD,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,IAAA,EAAM,aAAa,CAAA;AAClC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,EAAA,EAAI,YAAY,CAAA;AACrC,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA,EAAS,GAAA,CAAI,QAAA,EAAU,WAAW,CAAA,IAAK,UAAA;AAAA,IACvC,QAAA,EAAU,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAA,IAAK,SAAA;AAAA,IACrC,WAAA,EAAa,GAAA,CAAI,EAAA,EAAI,eAAe,CAAA,IAAK,EAAA;AAAA;AAAA,IAEzC,IAAA,EAAM,CAAC,GAAG,IAAA,CAAK,GAAA,CAAI,MAAM,eAAe,CAAA,IAAK,IAAI,CAAC,CAAA,CAC/C,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,KAAK,CAAA,CAC9B,GAAA,CAAI,MAAM,CAAA,CACV,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG;AAAA,GACb;AACF;AAGO,SAAS,mBAAmB,QAAA,EAA2C;AAC5E,EAAA,MAAM,CAAA,GAAI,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAC,CAAA;AACvC,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAC;AAChB,EAAA,OAAO,QAAA,CAAS,CAAA,CAAE,IAAI,CAAA,CACnB,IAAI,MAAM,CAAA,CACV,MAAA,CAAO,CAAC,MAA8B,CAAC,CAAC,CAAA,IAAK,CAAA,CAAE,YAAY,aAAa,CAAA;AAC7E;AAEA,IAAM,iBAAA,GAAoB,CAAA;AAAA,mHAAA,EAA+K,GAAG,IAAI,CAAA,mEAAA,CAAA;AAOzM,SAAS,qBAAA,CAAsB,UAAsB,IAAA,EAAsC;AAChG,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAC7B,EAAA,MAAM,CAAA,GAAI,WAAW,GAAG,CAAA;AACxB,EAAA,MAAM,OAAO,CAAA,IAAK,QAAA,CAAS,CAAA,CAAE,IAAI,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,CAAI,IAAI,CAAA,EAAG,aAAa,CAAA,EAAG,QAAQ,MAAM,IAAI,CAAA;AAC5F,EAAA,MAAM,IAAA,GAAO,IAAA,IAAQ,GAAA,CAAI,IAAA,EAAM,eAAe,CAAA;AAC9C,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,IAAA,EAAM,OAAO,MAAA;AAExB,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,iBAAI,IAAI,GAAA,CAAI,CAAC,CAAC,qBAAA,EAAuBF,cAAAA,CAAQ,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;AAClF,EAAA,GAAA,CAAI,QAAQ,EAAA,EAAI;AAAA,IACd,EAAE,IAAI,MAAA,EAAQ,IAAA,EAAM,GAAG,cAAA,EAAgB,MAAA,EAAQ,mBAAA,EAAqB,QAAA,EAAU,KAAA;AAAM,GACrF,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,mBAAA;AACb,EAAA,MAAM,SAAS,IAAA,CAAK,QAAA,CAAS,OAAO,IAAI,CAAA,CAAE,IAAI,KAAK,CAAA;AACnD,EAAA,GAAA,CAAI,MAAA;AAAA,IACF,IAAA;AAAA,IACA,EAAA,CAAG,YAAA,EAAc,EAAE,GAAG,CAAA,CAAE,IAAA,CAAK,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,IAAA,EAAK,EAAG;AAAA,MACtE,EAAA,CAAG,QAAA,EAAU,EAAC,EAAG,MAAM;AAAA,KACxB,CAAA;AAAA,IACD,EAAA,CAAG;AAAA,GACL;AAEA,EAAA,MAAM,OAAO,EAAC;AACd,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,MAAA,CAAO,CAAA,CAAE,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA,IAAK,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,MAAM,CAAA;AAClF,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,CAAI,UAAU,CAAA;AACjC,IAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,eAAA,CAAgB,CAAA;AACxF,IAAA,GAAA,CAAI,MAAA,CAAO,iBAAA,EAAmB,MAAA,EAAQ,EAAA,CAAG,MAAM,CAAA;AAC/C,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,EAAA,EAAI,WAAA,EAAa,IAAA,EAAM,EAAA,CAAG,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,QAAA,EAAU,KAAA,EAAO,CAAA;AAAA,EACvF;AACA,EAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,MAAA,CAAO,CAAA,CAAE,IAAA,EAAM,EAAA,CAAG,SAAS,CAAA,IAAK,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,SAAS,CAAA;AAC3F,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,GAAA,CAAI,QAAA,CAAS,sBAAsB,GAAA,CAAI,KAAA,CAAM,IAAI,aAAa,CAAA,EAAI,GAAG,SAAS,CAAA;AAC9E,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,EAAA,EAAI,cAAA,EAAgB,IAAA,EAAM,EAAA,CAAG,SAAA,EAAW,MAAA,EAAQ,eAAA,EAAiB,QAAA,EAAU,KAAA,EAAO,CAAA;AAAA,EAChG;AAEA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,GAAG,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAChD,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,CAAO,QAAQ,CAAA,CAAE,KAAK,CAAA,EAAG,IAAI,EAAE,UAAA,CAAW,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAC,CAAA;AAClF,EAAA,KAAA,MAAW,GAAA,IAAO,GAAA,CAAI,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA,EAAG;AAChE,IAAA,IAAI,IAAI,QAAA,EAAU;AAChB,MAAA,IAAA,CAAK,IAAA,CAAK,EAAE,GAAG,GAAA,EAAK,CAAA;AACpB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,CAAE,IAAA,EAAM,GAAG,CAAC,CAAA;AAC/C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,IAAA,GAAO,cAAc,MAAA,CAAO,KAAA,CAAM,OAAO,WAAA,CAAY,GAAG,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AACpE,IAAA,GAAA,CAAI,SAAS,IAAA,EAAM,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,MAAM,CAAE,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,WAAA,CAAY,MAAM,CAAA;AACnC,IAAA,IAAI,IAAA,EAAM,GAAA,CAAI,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,GAAI,CAAC,CAAA,EAAG,IAAI,CAAA;AACvE,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,KAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,CAAA;AAAA,EAC1D;AACA,EAAA,GAAA,CAAI,OAAA,CAAQ,MAAM,IAAI,CAAA;AACtB,EAAA,OAAO,IAAI,KAAA,EAAM;AACnB;AAGO,SAAS,qBAAA,CAAsB,QAAA,EAAsB,OAAA,GAAU,IAAA,EAAc;AAClF,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,IAAK,KAAA;AACxC,IAAA,MAAA,IAAU,MAAA,CAAO,aAAa,GAAG,QAAA,CAAS,SAAS,CAAA,EAAG,CAAA,GAAI,KAAM,CAAC,CAAA;AACnE,EAAA,OAAO,4BAA4B,IAAA,CAAK,MAAM,CAAC,CAAA,0BAAA,EAA6B,OAAA,GAAU,YAAY,MAAM,CAAA,QAAA,CAAA;AAC1G;;;AC5GA,IAAM,OAAA,uBAAc,GAAA,CAAI,CAAC,SAAS,OAAA,EAAS,YAAA,EAAc,UAAU,CAAC,CAAA;AAU7D,SAAS,cAAA,CACd,QAAA,EACA,QAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAC7B,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AACzB,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,EAAM,QAAQ,CAAA;AAC/B,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,EAAM,OAAO,QAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,EAAQ,GAAA,EAAK,YAAY,QAAA,CAAS,MAAA,EAAQ,QAAA,EAAU,QAAA,CAAS,IAAA,EAAK;AAClF,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,KAAK,CAAA;AAEjF,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAa;AAC1B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU;AAC3C,MAAA,IAAI,CAAC,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,KAAA;AACzB,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,KAAA,EAAO,OAAO,QAAQ,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,QAAQ,EAAA,CAAG,OAAA,EAAS,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAC5F,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,GAAG,OAAO,KAAA;AACpC,MAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,KAAA,CAAM,KAAK,CAAA;AACX,MAAA,IAAI,KAAA,CAAM,SAAS,KAAA,KAAU,OAAA,IAAW,UAAU,aAAA,CAAA,EAAgB,aAAA,CAAc,OAAO,KAAK,CAAA;AAC5F,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,KAAA,CAAM,IAAI,CAAA;AACV,EAAA,GAAA,CAAI,MAAA,CAAO,MAAM,IAAI,CAAA;AACrB,EAAA,OAAO,IAAI,KAAA,EAAM;AACnB;AAGA,SAAS,aAAA,CAAc,GAAO,KAAA,EAA+B;AAC3D,EAAA,IAAI,GAAA,GAAM,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA;AACxB,EAAA,IAAI,CAAC,KAAK,CAAA,CAAE,QAAA,CAAS,QAAS,GAAA,GAAM,EAAA,CAAG,OAAO,CAAE,CAAA;AAChD,EAAA,IAAI,GAAA,GAAM,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA;AAC1B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,GAAA,GAAM,GAAG,OAAO,CAAA;AAEhB,IAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,SAAA;AAAA,MACtB,CAAC,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,IAAA,KAAS,aAAA;AAAA,KACzD;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,OAAO,EAAA,GAAK,CAAA,GAAI,IAAI,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA;AAAA,EAC/D;AACA,EAAA,IAAI,CAAC,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,OAAA,CAAQ,EAAA,CAAG,OAAA,EAAS,KAAK,CAAC,CAAA;AACjE;AAGA,SAAS,OAAA,CAAQ,IAAQ,KAAA,EAA+B;AACtD,EAAA,IAAI,IAAA,GAAO,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAA;AAC3B,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,IAAA,GAAO,GAAG,QAAQ,CAAA;AAClB,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,QAAA,CAAS,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,WAAW,CAAA;AAC5E,IAAA,EAAA,CAAG,QAAA,CAAS,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAG,GAAG,IAAI,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA,EAAG;AACxB,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,cAAc,CAAA;AAC9E,EAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,EAAA,GAAK,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI,CAAA,EAAG,EAAA,CAAG,OAAA,EAAS,KAAK,CAAC,CAAA;AAChF;;;AChEA,IAAM,OAAA,uBAAc,GAAA,CAAI;AAAA,EACtB,cAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,kBAAA,CAAmB,WAA2B,KAAA,EAAuB;AAC5E,EAAA,IAAI,CAAC,SAAA,EAAW,OAAO,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA;AACnC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,SAAS,CAAA,KAAM,KAAK,CAAA;AAC7E,EAAA,MAAM,GAAA,GACJ,GAAA,IACA,IAAA,CAAK,SAAA,EAAW,eAAe,CAAA,CAAE,IAAA;AAAA,IAC/B,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA,KAAM,GAAA,CAAI,KAAK,iBAAiB;AAAA,GAClE;AACF,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA;AAC7B,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,EAAK,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AAC3C,IAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,IAAA,CAAA,CAAE,QAAA,GAAW,EAAE,QAAA,CAAS,MAAA;AAAA,MACtB,CAAC,CAAA,KAAM,EAAE,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,kBAAA,IAAsB,CAAA,CAAE,IAAA,KAAS,UAAA,CAAA;AAAA,KACnE;AACA,IAAA,OAAO,UAAU,CAAC,CAAA;AAAA,EACpB,CAAC,CAAA;AACD,EAAA,OAAO,MAAA,CAAO,KAAK,GAAG,CAAA;AACxB;AAEA,SAAS,UAAU,CAAA,EAAe;AAChC,EAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,EAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA,EAAG;AACvB,IAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA;AACjC,MAAA,IAAI,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,CAAE,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AAClE,IAAA,CAAA,CAAE,KAAA,GAAQ,OAAO,WAAA,CAAY,MAAA,CAAO,QAAQ,CAAA,CAAE,KAAK,EAAE,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,EAAE,aAAA,CAAc,CAAC,CAAC,CAAC,CAAA;AAC3F,IAAA,CAAA,CAAE,QAAA,GAAW,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,IAAK,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,SAAA,CAAU,CAAC,CAAA,CAAE,OAAA,CAAQ,mBAAmB,EAAE,CAAA;AACnD;AAEA,SAAS,cAAA,CAAeG,QAAW,SAAA,EAAmC;AACpE,EAAA,MAAM,CAAA,GAAI,MAAMA,MAAK,CAAA;AACrB,EAAA,KAAA,MAAW,CAAA,IAAK,KAAK,CAAC,CAAA;AACpB,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,SAAA,EAAW,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA,GAAI,kBAAA,CAAmB,SAAA,EAAW,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA;AAC7F,EAAA,OAAO,CAAA,CAAE,MAAM,WAAW,CAAA;AAC1B,EAAA,OAAO,UAAU,CAAC,CAAA;AACpB;AAEA,SAAS,QAAQ,KAAA,EAAmB;AAClC,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAC1B,EAAA,MAAM,aAAa,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,MAAM,CAAA;AACjD,EAAA,MAAM,gBAAgB,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,SAAS,CAAA;AACvD,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAA,GAAa,GAAA,CAAI,GAAA,CAAI,UAAU,CAAA,GAAI,MAAA;AAAA,IAC3C,SAAA,EAAW,aAAA,GAAgB,GAAA,CAAI,GAAA,CAAI,aAAa,CAAA,GAAI;AAAA,GACtD;AACF;AAEO,SAAS,eAAA,CAAgB,UAAsB,QAAA,EAAuC;AAC3F,EAAA,MAAM,CAAA,GAAI,QAAQ,QAAQ,CAAA;AAC1B,EAAA,MAAM,CAAA,GAAI,QAAQ,QAAQ,CAAA;AAC1B,EAAA,MAAM,SAA0B,EAAE,MAAA,EAAQ,EAAC,EAAG,aAAa,KAAA,EAAM;AACjE,EAAA,IAAI,CAAC,CAAA,CAAE,MAAA,EAAQ,OAAO,MAAA;AACtB,EAAA,MAAM,OAAA,GAAU,EAAE,MAAA,GAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,SAAS,IAAI,EAAC;AACxD,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAClE,EAAA,MAAM,SAAS,IAAI,GAAA;AAAA,IACjB,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,CAAA,CAAE,MAAM,QAAQ,CAAC,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA,IAAK,EAAA,EAAI,aAAa,CAAA,CAAA,EAAI,CAAC,CAAC;AAAA,GAC1F;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,CAAA,CAAE,MAAA,EAAQ,SAAS,CAAA,EAAG;AACzC,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA,IAAK,EAAA;AACjC,IAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,IAAK,OAAO,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,WAAA,EAAa,CAAA,CAAE,CAAA;AACpF,IAAA,IAAI,CAAC,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,EAAE,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,CAAA;AAAA,SAAA,IAC3D,cAAA,CAAe,MAAM,CAAA,CAAE,SAAS,MAAM,cAAA,CAAe,CAAA,EAAG,EAAE,SAAS,CAAA;AAC1E,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,EAAE,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,EAAG,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,CAAA;AAAA,EAClF;AACA,EAAA,MAAM,KAAK,CAAA,CAAE,MAAA,IAAU,GAAA,CAAI,CAAA,CAAE,QAAQ,eAAe,CAAA;AACpD,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,CAAE,MAAA,EAAQ,eAAe,CAAA;AACxC,EAAA,MAAA,CAAO,WAAA,GAAA,CAAe,KAAK,SAAA,CAAU,EAAE,IAAI,EAAA,OAAS,EAAA,GAAK,SAAA,CAAU,EAAE,CAAA,GAAI,EAAA,CAAA;AACzE,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,mBAAmB,QAAA,EAA0C;AAC3E,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAC7B,EAAA,MAAM,WAAW,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,QAAQ,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,QAAA,GAAW,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA,GAAI,MAAA;AAC5C,EAAA,MAAM,KAAK,IAAA,IAAQ,GAAA,CAAI,MAAM,oBAAoB,CAAA,EAAG,MAAM,MAAM,CAAA;AAChE,EAAA,MAAM,GAAA,GAAM,EAAA,GAAK,GAAA,CAAI,IAAA,CAAK,QAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA,GAAI,MAAA;AAChE,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA;AACnC,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,WAAA,CAAY,GAAG,CAAA,EAAG,MAAA,CAAO,WAAA,CAAY,IAAI,CAAC,IAAI,CAAC,CAAA;AACrF;AClGA,IAAM,MAAA,GACJ,sJAAA;AACF,IAAM,QAAA,GACJ,6IAAA;AACF,IAAM,YAAA,GACJ,wNAAA;AACF,IAAM,GAAA,GAAM,2DAAA;AAEZ,IAAM,MAAM,CAAC,CAAA,KACX,EAAE,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,MAAM,EAAE,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAG7F,IAAM,IAAA,GAAO,GAAA;AAqBb,SAAS,MAAM,CAAA,EAAsB;AACnC,EAAA,MAAM,IAAA,GAAO,EAAE,IAAA,IAAQ,WAAA;AACvB,EAAA,OAAO;AAAA,IACL,oBAAoB,IAAI,CAAA,CAAA,CAAA;AAAA,IACxB,CAAA,CAAE,YAAY,gBAAA,GAAmB,EAAA;AAAA,IACjC,CAAA,CAAE,SAAS,oBAAA,GAAuB,EAAA;AAAA,IAClC,CAAA,YAAA,EAAe,EAAE,EAAE,CAAA,EAAA,CAAA;AAAA,IACnB,CAAA,eAAA,EAAkB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA,GAAA,CAAA;AAAA,IAC7B,EAAE,OAAA,GAAU,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAE,OAAO,CAAC,CAAA,GAAA,CAAA,GAAQ,EAAA;AAAA,IACvD,CAAA,CAAE,OAAA,GAAU,CAAA,kBAAA,EAAqB,CAAA,CAAE,OAAO,CAAA,GAAA,CAAA,GAAQ,EAAA;AAAA,IAClD,CAAA,CAAE,IAAA,GAAO,CAAA,eAAA,EAAkB,CAAA,CAAE,IAAI,CAAA,GAAA,CAAA,GAAQ,EAAA;AAAA,IACzC,CAAA,CAAE,IAAA,GAAO,CAAA,eAAA,EAAkB,CAAA,CAAE,IAAI,CAAA,GAAA,CAAA,GAAQ,EAAA;AAAA,IACzC,EAAE,UAAA,KAAe,MAAA,GAAY,CAAA,qBAAA,EAAwB,CAAA,CAAE,UAAU,CAAA,GAAA,CAAA,GAAQ,EAAA;AAAA,IACzE,CAAA,CAAE,UAAU,cAAA,GAAiB,EAAA;AAAA,IAC7B,EAAE,KAAA,IAAS,EAAA;AAAA,IACX,CAAA,CAAE,GAAA,GAAM,CAAA,OAAA,EAAU,CAAA,CAAE,GAAG,CAAA,QAAA,CAAA,GAAa,EAAA;AAAA,IACpC,CAAA,CAAE,GAAA,GAAM,CAAA,OAAA,EAAU,CAAA,CAAE,GAAG,CAAA,QAAA,CAAA,GAAa,EAAA;AAAA,IACpC;AAAA,GACF,CAAE,KAAK,EAAE,CAAA;AACX;AAEA,IAAM,GAAA,GAAM,CAAC,IAAA,EAAc,OAAA,GAAU,CAAA,KACnC,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAA,EAAI,OAAA,GAAU,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,EAAA,CAAA;AACpE,IAAM,KAAA,GAAQ,CAAC,KAAA,EAAe,IAAA,GAAO,CAAA,KACnC,CAAA,SAAA,EAAY,IAAA,GAAO,CAAA,eAAA,EAAkB,IAAI,CAAA,GAAA,CAAA,GAAQ,EAAE,CAAA,gBAAA,EAAmB,KAAK,CAAA,aAAA,CAAA;AAGtE,IAAM,SAAA,GAAY,EAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,SAAA,EAAW,CAAA;AAG7E,IAAM,UAAA,GAAa,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,IAAA,EAAM,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,IAAI,CAAA;AAE5D,IAAM,YAAA,GAAqC;AAAA,EACzC,EAAE,EAAA,EAAI,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,WAAW,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EAC9E;AAAA,IACE,EAAA,EAAI,sBAAA;AAAA,IACJ,IAAA,EAAM,wBAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,SAAA,EAAW,IAAA;AAAA,IACX,UAAA,EAAY,CAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,EAAA,EAAI,aAAA;AAAA,IACJ,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,SAAA,EAAW,IAAA;AAAA,IACX,UAAA,EAAY,EAAA;AAAA,IACZ,KAAA,EACE;AAAA,GACJ;AAAA,EACA;AAAA,IACE,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,SAAA,EAAW,IAAA;AAAA,IACX,UAAA,EAAY,EAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,EAAA,EAAI,OAAA;AAAA,IACJ,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK,+DAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA,EACA,GAAG,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAkB;AAAA,IAClC,EAAA,EAAI,UAAU,CAAC,CAAA,CAAA;AAAA,IACf,IAAA,EAAM,WAAW,CAAC,CAAA,CAAA;AAAA,IAClB,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,UAAA,EAAY,CAAA;AAAA,IACZ,GAAA,EAAK,CAAA,6DAAA,EAAgE,CAAA,GAAI,CAAC,CAAA,GAAA,CAAA;AAAA,IAC1E,GAAA,EAAK,CAAA,MAAA,EAAS,CAAA,KAAM,CAAA,GAAI,WAAA,GAAc,EAAE,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,QAAA,GAAW,EAAE,CAAA;AAAA,GACpE,CAAE,CAAA;AAAA,EACF;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,GAAA,EAAK,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,OAAO,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,GACpD;AAAA,EACA;AAAA,IACE,EAAA,EAAI,YAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,GAAA,EAAK,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,UAAU,CAAC,CAAA,EAAG,GAAA,CAAI,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,GACvD;AAAA,EACA,GAAG,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAkB;AAAA,IACxC,EAAA,EAAI,QAAQ,CAAC,CAAA,CAAA;AAAA,IACb,IAAA,EAAM,SAAS,CAAC,CAAA,CAAA;AAAA,IAChB,OAAA,EAAS,QAAA;AAAA,IACT,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,QAAQ,CAAC,CAAA,CAAA;AAAA,IACf,GAAA,EAAK,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,OAAA,EAAS,CAAA,GAAI,CAAC,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,eAAA,GAAkB,EAAE,CAAA,EAAG,GAAA;AAAA,MACzE,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,MAChB;AAAA,KACD,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,8BAA8B,EAAE,CAAA,CAAA;AAAA,IAC9C,GAAA,EAAK,CAAA,KAAM,CAAA,GAAI,iBAAA,GAAoB;AAAA,GACrC,CAAE,CAAA;AAAA,EACF,GAAG,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAkB;AAAA,IACxC,EAAA,EAAI,OAAO,CAAC,CAAA,CAAA;AAAA,IACZ,IAAA,EAAM,QAAQ,CAAC,CAAA,CAAA;AAAA,IACf,OAAA,EAAS,QAAA;AAAA,IACT,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,GAAA,EAAK,GAAA,CAAI,UAAA,CAAW,CAAA,GAAI,CAAC,CAAC;AAAA,GAC5B,CAAE,CAAA;AAAA,EACF;AAAA,IACE,EAAA,EAAI,YAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,GAAA,EAAK,IAAI,IAAI;AAAA,GACf;AAAA,EACA;AAAA,IACE,EAAA,EAAI,UAAA;AAAA,IACJ,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,GAAA,EAAK,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,SAAS,CAAC,CAAA,gFAAA,CAAA;AAAA,IAClC,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,KAAK,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,SAAA,EAAW,CAAC,CAAC,CAAA,4DAAA,CAAA;AAAA,IACrC,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,WAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS,aAAA;AAAA,IACT,OAAA,EAAS,QAAA;AAAA,IACT,UAAA,EAAY,EAAA;AAAA,IACZ,KAAK,CAAA,eAAA,EAAkB,CAAA,GAAI,IAAI,CAAA,WAAA,EAAc,IAAI,IAAI,CAAA,GAAA;AAAA,GACvD;AAAA,EACA;AAAA,IACE,EAAA,EAAI,OAAA;AAAA,IACJ,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK,CAAA,eAAA,EAAkB,IAAI,CAAA,WAAA,EAAc,IAAI,CAAA,GAAA,CAAA;AAAA,IAC7C,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,kBAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,GAAA,EAAK,uBAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,cAAA;AAAA,IACJ,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK,yDAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,kBAAA;AAAA,IACJ,IAAA,EAAM,oBAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS,sBAAA;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,mBAAA;AAAA,IACJ,IAAA,EAAM,oBAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS,sBAAA;AAAA,IACT,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,aAAA;AAAA,IACJ,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,kBAAA;AAAA,IACJ,IAAA,EAAM,mBAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS,sBAAA;AAAA,IACT,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK,CAAA,gHAAA,CAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,QAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,EAAA,EAAI,WAAA;AAAA,IACJ,IAAA,EAAM,WAAA;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS,sBAAA;AAAA,IACT,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK;AAAA,GACP;AAAA,EACA;AAAA,IACE,EAAA,EAAI,WAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,aAAA;AAAA,IACT,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK,yDAAA;AAAA,IACL,KAAA,EACE;AAAA;AAEN,CAAA;AAEA,IAAM,YAAA,GACJ,uZAAA;AACF,IAAM,MAAA,GACJ,iiBAAA;AAEF,SAAS,cAAA,GAAyB;AAChC,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,UAAA,EAAa,MAAM,IAAI,YAAY,CAAA,EAAG,MAAM,CAAA,EAAG,aAAa,GAAA,CAAI,KAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,WAAA,CAAA;AAC9F;AAcA,SAAS,GAAA,CAAI,GAAW,CAAA,EAAsB;AAC5C,EAAA,OAAO,CAAA,eAAA,EAAkB,CAAC,CAAA,kBAAA,EAAqB,CAAA,CAAE,KAAA,IAAS,CAAC,CAAA,oBAAA,EAAuB,CAAA,CAAE,GAAG,CAAA,GAAA,EACrF,CAAA,CAAE,MAAA,GAAS,CAAA,iBAAA,EAAoB,EAAE,MAAM,CAAA,GAAA,CAAA,GAAQ,EACjD,CAAA,kBAAA,EAAqB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA,mBAAA,EAAsB,CAAA,CAAE,EAAA,IAAM,MAAM,CAAA,UAAA,EAAa,GAAA;AAAA,IAC/E,CAAA,CAAE,IAAA;AAAA,IACF,EAAE,OAAA,IAAW;AAAA,GACd,WAAW,CAAA,CAAE,GAAA,GAAM,UAAU,CAAA,CAAE,GAAG,aAAa,EAAE,CAAA,QAAA,CAAA;AACpD;AACA,SAAS,WAAA,CAAY,EAAA,EAAY,IAAA,EAAc,IAAA,EAAc,MAAA,EAA6B;AACxF,EAAA,OAAO,CAAA,gCAAA,EAAmC,EAAE,CAAA,iBAAA,EAAoB,IAAI,CAAA,4BAAA,EAClE,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,YAAA,GAAe,aACrC,CAAA,kBAAA,EAAqB,GAAA,CAAI,IAAI,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,gBAAA,CAAA;AAC9E;AAGA,IAAM,aAAA,GAA6B;AAAA,EACjC,EAAE,GAAA,EAAK,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,GAAA,EAAK,QAAA,EAAS;AAAA,EAC1F;AAAA,IACE,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,EAAE,GAAA,EAAK,aAAA,EAAe,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,CAAA,GAAI,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAAA,EACpF,EAAE,GAAA,EAAK,YAAA,EAAc,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,CAAA,GAAI,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAAA,EACnF,EAAE,GAAA,EAAK,aAAA,EAAe,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,CAAA,GAAI,IAAA,EAAM,OAAA,EAAS,IAAA;AACjF,CAAA;AAEA,SAAS,iBAAA,GAA4B;AACnC,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,WAAA,CAAY,CAAA,EAAG,UAAA,EAAY,eAAA,EAAiB,aAAa,CAAA;AAAA,IACzD,WAAA,CAAY,CAAA,EAAG,UAAA,EAAY,SAAA,EAAW;AAAA,MACpC,EAAE,GAAA,EAAK,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,QAAQ,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA;AAAK,KAC9E,CAAA;AAAA,IACD,WAAA,CAAY,CAAA,EAAG,UAAA,EAAY,YAAA,EAAc;AAAA,MACvC,EAAE,GAAA,EAAK,aAAA,EAAe,IAAA,EAAM,MAAA,EAAQ,QAAQ,YAAA,EAAc,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA;AAAK,KACrF,CAAA;AAAA,IACD,WAAA,CAAY,CAAA,EAAG,UAAA,EAAY,WAAA,EAAa;AAAA,MACtC,EAAE,GAAA,EAAK,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,QAAQ,UAAA,EAAY,IAAA,EAAM,CAAA,EAAG,EAAA,EAAI,QAAA,EAAS;AAAA,MACjF,EAAE,GAAA,EAAK,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,QAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,EAAA,EAAI,QAAA;AAAS,KAC1E;AAAA,GACH;AACA,EAAA,MAAM,OAAO,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA;AAAA,IACxB,CAAC,CAAA,KAAM,CAAA,gBAAA,EAAmB,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAC,CAAA,WAAA;AAAA,GAC/D;AACA,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,aAAA,EAAgB,MAAM,CAAA,CAAA,EAAI,SAAA,CAAU,IAAA,CAAK,EAAE,CAAC,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,EAAE,CAAC,CAAA,cAAA,CAAA;AAC3E;AAIA,IAAM,YAAA,GAAmC;AAAA,EACvC,CAAC,OAAO,QAAQ,CAAA;AAAA,EAChB,CAAC,OAAO,QAAQ,CAAA;AAAA,EAChB,CAAC,WAAW,QAAQ,CAAA;AAAA,EACpB,CAAC,WAAW,QAAQ,CAAA;AAAA,EACpB,CAAC,WAAW,QAAQ,CAAA;AAAA,EACpB,CAAC,WAAW,QAAQ,CAAA;AAAA,EACpB,CAAC,WAAW,QAAQ,CAAA;AAAA,EACpB,CAAC,WAAW,QAAQ,CAAA;AAAA,EACpB,CAAC,SAAS,QAAQ,CAAA;AAAA,EAClB,CAAC,YAAY,QAAQ;AACvB,CAAA;AACO,SAAS,QAAA,CAAS,KAAA,GAAQ,OAAA,EAAS,KAAA,GAAQ,OAAA,EAAiB;AACjE,EAAA,MAAM,OAAO,CAAC,CAAA,KACZ,CAAA,mBAAA,EAAsB,GAAA,CAAI,CAAC,CAAC,CAAA,yCAAA,CAAA;AAC9B,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,+PAAA,EAAkQ,YAAA,CAAa,GAAA;AAAA,IAC1R,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,MAAM,CAAC,CAAA,iBAAA,EAAoB,CAAC,CAAA,OAAA,EAAU,CAAC,CAAA,CAAA;AAAA,GACrD,CAAE,IAAA;AAAA,IACA;AAAA,GACD,CAAA,2DAAA,EAA8D,IAAA,CAAK,KAAK,CAAC,CAAA,2BAAA,EAA8B,IAAA;AAAA,IACtG;AAAA,GACD,CAAA,k5BAAA,CAAA;AACH;AAEA,IAAM,UAAA,GAAa,CAAA,EAAG,GAAG,CAAA,SAAA,EAAY,MAAM,CAAA,6TAAA,CAAA;AAE3C,SAAS,YAAY,CAAA,EAAyD;AAC5E,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,YAAA,EAAe,MAAM,6BAChC,CAAA,CAAE,QAAA,GAAW,EAAA,GAAK,EACpB,4BAA4B,IAAI,CAAA,GAAA,EAC9B,CAAA,CAAE,UAAA,GAAa,2BAA2B,EAC5C,CAAA,6WAAA,CAAA;AACF;AAEA,IAAM,QAAQ,CAAC,IAAA,KACb,GAAG,GAAG,CAAA,GAAA,EAAM,IAAI,CAAA,EAAA,EAAK,MAAM,CAAA,IAAA,EAAO,IAAI,+IAA+I,IAAI,CAAA,IAAA,EAAO,IAAI,CAAA,mKAAA,EAAsK,IAAI,QAAQ,IAAI,CAAA,EAAA,CAAA;AAI5X,IAAM,GAAA,GAAM,CAAC,IAAA,EAAc,GAAA,GAAM,OAC/B,CAAA,KAAA,EAAQ,GAAA,GAAM,CAAA,OAAA,EAAU,GAAG,CAAA,QAAA,CAAA,GAAa,EAAE,CAAA,0BAAA,EAA6B,GAAA,CAAI,IAAI,CAAC,CAAA,YAAA,CAAA;AAC3E,IAAM,IAAA,GAAO,CAAC,IAAA,EAAc,OAAA,EAAkB,KAAA,GAAQ,OAC3D,CAAA,KAAA,EAAQ,OAAA,IAAW,KAAA,GAAQ,CAAA,OAAA,EAAU,OAAA,GAAU,CAAA,iBAAA,EAAoB,OAAO,CAAA,GAAA,CAAA,GAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,QAAA,CAAA,GAAa,EAAE,GACzG,IAAA,GAAO,GAAA,CAAI,IAAI,CAAA,GAAI,EACrB,CAAA,MAAA,CAAA;AACF,IAAM,QAAQ,CAAC,IAAA,EAAc,KAAA,KAC3B,CAAA,qFAAA,EAAwF,IAAI,CAAA,qEAAA,EAAwE,GAAA;AAAA,EAClK;AACF,CAAC,CAAA,2CAAA,CAAA;AAGH,SAAS,eAAe,IAAA,EAAkC;AACxD,EAAA,MAAM,OAAO,CAAC,GAAA,EAAa,MACzB,CAAA,0BAAA,EAA6B,CAAC,4BAA4B,GAAG,CAAA,OAAA,CAAA;AAC/D,EAAA,MAAM,QAAQ,CAAC,CAAA,KACb,CAAA,CACG,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,2CAA2C,GAAA,CAAI,CAAC,CAAC,CAAA,MAAA,CAAQ,CAAA,CACpE,KAAK,EAAE,CAAA;AACZ,EAAA,OAAO,CAAA,qPAAA,EAAwP,IAAA,CAC5P,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,MAAA,EAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG,IAAI,CAAC,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG,IAAI,CAAC,CAAA,OAAA,CAAS,CAAA,CAC7E,IAAA,CAAK,EAAE,CAAC,CAAA,cAAA,CAAA;AACb;AAEA,IAAM,IAAA,GAAO,sFAAA;AAGb,IAAM,cAAA,GAAiB;AAAA,EACrB,IAAA,CAAK,wBAAwB,OAAO,CAAA;AAAA,EACpC,KAAK,gCAAgC,CAAA;AAAA,EACrC,IAAA,CAAK,WAAW,UAAU,CAAA;AAAA,EAC1B,IAAA;AAAA,IACE,8HAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,IAAA;AAAA,IACE,8HAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,IAAA,CAAK,cAAc,UAAU,CAAA;AAAA,EAC7B,IAAA,CAAK,aAAa,YAAY,CAAA;AAAA,EAC9B,IAAA,CAAK,gBAAgB,UAAU,CAAA;AAAA,EAC/B,IAAA,CAAK,kBAAkB,QAAQ,CAAA;AAAA,EAC/B,IAAA,CAAK,sDAAsD,QAAQ,CAAA;AAAA,EACnE,IAAA,CAAK,yBAAyB,YAAY,CAAA;AAAA,EAC1C,IAAA,CAAK,YAAY,QAAQ,CAAA;AAAA,EACzB,IAAA,CAAK,gBAAgB,QAAQ;AAC/B,CAAA,CAAE,KAAK,EAAE,CAAA;AAUF,IAAM,qBAAA,GAAsD;AAAA,EACjE;AAAA,IACE,IAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAU,kBAAA;AAAA,IACV,WAAA,EAAa,0CAAA;AAAA,IACb,MAAM,cAAA,CAAe,CAAC,CAAC,kBAAA,EAAoB,GAAG,IAAI;AAAA,WAAA,CAAe,CAAC,CAAC;AAAA,GACrE;AAAA,EACA;AAAA,IACE,IAAA,EAAM,iCAAA;AAAA,IACN,QAAA,EAAU,kBAAA;AAAA,IACV,WAAA,EACE,qFAAA;AAAA,IACF,MAAM,cAAA,CAAe;AAAA,MACnB;AAAA,QACE,2EAAA;AAAA,QACA,GAAG,IAAI;AAAA,QAAA;AAAA,OACT;AAAA,MACA;AAAA,QACE,8EAAA;AAAA,QACA,GAAG,IAAI;AAAA,SAAA;AAAA;AACT,KACD;AAAA,GACH;AAAA,EACA;AAAA,IACE,IAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAU,kBAAA;AAAA,IACV,WAAA,EAAa,sEAAA;AAAA,IACb,MAAM,cAAA,CAAe;AAAA,MACnB;AAAA,QACE,2EAAA;AAAA,QACA,GAAG,IAAI;AAAA,QAAA;AAAA,OACT;AAAA,MACA;AAAA,QACE,2EAAA;AAAA,QACA,GAAG,IAAI;AAAA,QAAA;AAAA;AACT,KACD;AAAA,GACH;AAAA,EACA;AAAA,IACE,IAAA,EAAM,oCAAA;AAAA,IACN,QAAA,EAAU,kBAAA;AAAA,IACV,WAAA,EACE,mHAAA;AAAA,IACF,MAAM,cAAA,CAAe;AAAA,MACnB;AAAA,QACE,gGAAA;AAAA,QACA,GAAG,IAAI;AAAA,QAAA;AAAA,OACT;AAAA,MACA;AAAA,QACE,sEAAA;AAAA,QACA,GAAG,IAAI;AAAA,EAAK,IAAI;AAAA,EAAK,IAAI;AAAA,EAAK,IAAI,CAAA;AAAA;AACpC,KACD;AAAA,GACH;AAAA,EACA;AAAA,IACE,IAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAU,kBAAA;AAAA,IACV,WAAA,EACE,6HAAA;AAAA,IACF,MAAM,cAAA,CAAe;AAAA,MACnB,CAAC,iEAAA,EAAmE,CAAA,EAAG,IAAI;AAAA,MAAA,CAAU,CAAA;AAAA,MACrF,CAAC,iEAAA,EAAmE,CAAA,EAAG,IAAI;AAAA,MAAA,CAAU;AAAA,KACtF;AAAA,GACH;AAAA,EACA;AAAA,IACE,IAAA,EAAM,8BAAA;AAAA,IACN,QAAA,EAAU,kBAAA;AAAA,IACV,WAAA,EAAa,8DAAA;AAAA,IACb,MAAM,cAAA,CAAe;AAAA,MACnB,CAAC,gDAAA,EAAkD,CAAA,EAAG,IAAI;AAAA,WAAA,CAAe,CAAA;AAAA,MACzE;AAAA,QACE,sEAAA;AAAA,QACA,GAAG,IAAI;AAAA,EAAK,IAAI;AAAA,EAAK,IAAI;AAAA,EAAK,IAAI,CAAA;AAAA;AACpC,KACD;AAAA,GACH;AAAA,EACA;AAAA,IACE,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,WAAA;AAAA,IACV,WAAA,EACE,oFAAA;AAAA,IACF,IAAA,EAAM;AAAA,GACR;AAAA,EACA,GAAG;AAAA,IACD;AAAA,MACE,oCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,CAAC,6BAA6B,mCAAmC,CAAA;AAAA,IACjE,CAAC,uBAAuB,0CAA0C,CAAA;AAAA,IAClE,CAAC,wBAAwB,4BAA4B;AAAA,IACrD,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,WAAW,CAAA,MAA0B;AAAA,IACjD,IAAA,EAAM,IAAA;AAAA,IACN,QAAA,EAAU,UAAA;AAAA,IACV,WAAA;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAS;AAAA,GAC5B,CAAE;AACJ;AAGA,SAAS,YAAY,MAAA,EAA8C;AACjE,EAAA,MAAM,OAAO,CAAC,CAAA,KACZ,UAAU,MAAA,CAAO,CAAC,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,mBAAmB,MAAA,CAAO,CAAC,EAAE,QAAA,CAAS,EAAA,EAAI,GAAG,CAAC,CAAA,CAAA,CAAA;AACpF,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,oBAAA,EAAuB,MAAM,gBAAgB,MAAA,CACvD,GAAA;AAAA,IACC,CAAC,GAAG,CAAA,KACF,CAAA,uCAAA,EAA0C,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,8BAAA,EAAiC,GAAA;AAAA,MACpF,CAAA,CAAE;AAAA,KACH,CAAA,2HAAA,EAA8H,GAAA;AAAA,MAC7H,CAAA,CAAE;AAAA,KACH,qBAAqB,IAAA,CAAK,CAAA,GAAI,CAAC,CAAC,CAAA,gCAAA,EAAmC,EAAE,IAAI,CAAA,4BAAA;AAAA,GAC9E,CACC,IAAA,CAAK,EAAE,CAAC,CAAA,kCAAA,CAAA;AACb;AAKO,SAAS,eAAe,CAAA,GAAI,GAAA,EAAK,CAAA,GAAI,EAAA,EAAI,OAAO,GAAA,EAAkB;AACvE,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,EAAE,QAAQ,GAAA,EAAI,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AACrD,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,UAAA,GAAc,CAAA,KAAM,CAAA,GAAK,CAAA,KAAM,CAAA;AACvE,IAAA,OAAO,CAAA,KAAM,CAAA;AAAA,EACf,CAAC,CAAA;AACD,EAAA,MAAM,GAAA,GAAM,CAAC,KAAA,KAAsB;AACjC,IAAA,IAAI,CAAA,GAAI,UAAA;AACR,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,CAAA,GAAI,QAAA,CAAA,CAAU,IAAI,CAAA,IAAK,GAAI,IAAK,CAAA,KAAM,CAAA;AAC7D,IAAA,OAAA,CAAQ,IAAI,UAAA,MAAgB,CAAA;AAAA,EAC9B,CAAA;AACA,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAc,CAAE,MAAM,EAAA,GAAM,GAAA,EAAM,CAAA,KAAM,EAAA,GAAM,GAAA,EAAM,CAAA,KAAM,CAAA,GAAK,GAAA,EAAK,IAAI,GAAG,CAAA;AACxF,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,EAAc,IAAA,KAAqB;AAChD,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,CAAC,GAAGH,eAAQ,IAAI,CAAA,EAAG,GAAG,IAAI,CAAC,CAAA;AACvD,IAAA,OAAO,CAAC,GAAG,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,EAAG,GAAG,IAAA,EAAM,GAAG,GAAA,CAAI,GAAA,CAAI,IAAI,CAAC,CAAC,CAAA;AAAA,EACzD,CAAA;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,CAAA,IAAK,IAAI,CAAA,CAAE,CAAA;AACtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,CAAA,IAAK,IAAI,CAAA,CAAA,GAAK,CAAA,EAAA,CAAI,CAAA,GAAI,CAAA,KAAM,IAAI,CAAA,CAAE,CAAA;AAC7E,EAAA,OAAO,IAAI,UAAA,CAAW;AAAA,IACpB,GAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,GAAG,MAAM,MAAA,EAAQ,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,CAAA,EAAG,GAAG,GAAA,CAAI,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAAA,IACtE,GAAG,KAAA,CAAM,MAAA,EAAQI,eAAA,CAAS,GAAG,CAAC,CAAA;AAAA,IAC9B,GAAG,KAAA,CAAM,MAAA,EAAQ,IAAI,YAAY;AAAA,GAClC,CAAA;AACH;AAEA,SAAS,WAAA,CAAY,GAAA,EAAa,EAAA,EAAY,EAAA,EAAY,IAAY,IAAA,EAAsB;AAC1F,EAAA,OAAO,qFAAqF,EAAE,CAAA,MAAA,EAAS,EAAE,CAAA,iBAAA,EAAoB,EAAE,CAAA,QAAA,EAAW,GAAA;AAAA,IACxI;AAAA,GACD,CAAA,SAAA,EAAY,GAAA,CAAI,IAAI,CAAC,CAAA,iIAAA,EAAoI,EAAE,CAAA,QAAA,EAAW,GAAA;AAAA,IACrK;AAAA,GACD,CAAA,+DAAA,EAAkE,GAAG,CAAA,uGAAA,EAA0G,EAAE,SAAS,EAAE,CAAA,0IAAA,CAAA;AAC/L;AAGA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,OAAO,CAAA,qxBAAA,EAAwxB,GAAA;AAAA,IAC7xB;AAAA,GACD,CAAA,+EAAA,CAAA;AACH;AAEA,IAAM,MAAM,CAAC,IAAA,EAAqB,IAAA,KAChC,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,MAAM,IAAI,QAAQ,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,EAAI,IAAI,OAAO,IAAI,CAAA,CAAA,CAAA;AAiBpE,SAAS,oBAAA,CAAqB,OAAA,GAAgC,EAAC,EAAe;AACnF,EAAA,MAAM,QAAoC,EAAC;AAC3C,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,EAAc,GAAA,KAAiB,MAAM,IAAI,CAAA,GAAIJ,eAAQ,GAAG,CAAA;AACrE,EAAA,MAAM,SAAA,GAAgC;AAAA,IACpC,CAAC,oBAAA,EAAsB,OAAA,CAAQ,aAAa,EAAA,CAAG,QAAA,GAAW,GAAG,QAAQ,CAAA;AAAA,IACrE,CAAC,kBAAA,EAAoB,EAAA,CAAG,MAAM,CAAA;AAAA,IAC9B,CAAC,qBAAA,EAAuB,EAAA,CAAG,SAAS,CAAA;AAAA,IACpC,CAAC,oBAAA,EAAsB,EAAA,CAAG,QAAQ,CAAA;AAAA,IAClC,CAAC,qBAAA,EAAuB,EAAA,CAAG,SAAS,CAAA;AAAA,IACpC,CAAC,wBAAA,EAA0B,EAAA,CAAG,KAAK,CAAA;AAAA,IACnC;AAAA,MACE,qBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA;AAAA,MACE,oBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,CAAC,sBAAsB,4DAA4D;AAAA,GACrF;AACA,EAAA,MAAM,IAAA,GAAmC;AAAA,IACvC,CAAC,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAQ,YAAY,CAAA;AAAA,IAChC,CAAC,MAAA,EAAQ,EAAA,CAAG,SAAA,EAAW,eAAe,CAAA;AAAA,IACtC,CAAC,MAAA,EAAQ,EAAA,CAAG,QAAA,EAAU,cAAc,CAAA;AAAA,IACpC,CAAC,MAAA,EAAQ,EAAA,CAAG,SAAA,EAAW,eAAe,CAAA;AAAA,IACtC,CAAC,MAAA,EAAQ,EAAA,CAAG,KAAA,EAAO,kBAAkB,CAAA;AAAA,IACrC,CAAC,MAAA,EAAQ,CAAA,EAAG,EAAA,CAAG,MAAA,CAAO,QAAQ,QAAA,EAAU,WAAW,CAAC,CAAA,CAAA,EAAI,eAAe,CAAA;AAAA,IACvE,CAAC,MAAA,EAAQ,CAAA,EAAG,EAAA,CAAG,MAAA,CAAO,QAAQ,QAAA,EAAU,UAAU,CAAC,CAAA,CAAA,EAAI,cAAc;AAAA,GACvE;AACA,EAAA,GAAA,CAAI,iBAAA,EAAmB,gBAAgB,CAAA;AACvC,EAAA,GAAA,CAAI,oBAAA,EAAsB,mBAAmB,CAAA;AAC7C,EAAA,GAAA,CAAI,sBAAsB,UAAU,CAAA;AACpC,EAAA,GAAA,CAAI,uBAAA,EAAyB,UAAU,CAAA;AACvC,EAAA,GAAA,CAAI,oBAAA,EAAsB,KAAA,CAAM,UAAU,CAAC,CAAA;AAC3C,EAAA,GAAA,CAAI,mBAAA,EAAqB,KAAA,CAAM,SAAS,CAAC,CAAA;AAGzC,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,EAAA,EAAI,QAAA,EAAU,wBAAwB,CAAA,CAAE,OAAA;AAAA,IAC1D,QAAA;AAAA,IACA,GAAG,GAAA,CAAI,OAAO,CAAC,CAAA,EAAG,MAAM,MAAA,EAAQ,GAAG,CAAC,CAAA,EAAG,IAAI,MAAM,CAAC,GAAG,KAAA,CAAM,UAAA,EAAY,GAAG,CAAC,CAAA,MAAA;AAAA,GAC7E;AACA,EAAA,GAAA,CAAI,kBAAA,EAAoB,GAAA,CAAI,KAAA,EAAO,MAAM,CAAC,CAAA;AAC1C,EAAA,SAAA,CAAU,IAAA,CAAK,CAAC,mBAAA,EAAqB,EAAA,CAAG,MAAM,CAAC,CAAA;AAC/C,EAAA,IAAA,CAAK,KAAK,CAAC,OAAA,EAAS,EAAA,CAAG,MAAA,EAAQ,aAAa,CAAC,CAAA;AAC7C,EAAA,IAAA,CAAK,KAAK,oDAAoD,CAAA;AAC9D,EAAA,MAAM,OAAO,OAAA,CAAQ,SAAA,GAAY,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA,GAAI,EAAA;AACnE,EAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,IAAA,KAAA,CAAM,gCAAgC,IAAI,cAAA,EAAe;AACzD,IAAA,GAAA;AAAA,MACE,kBAAA;AAAA,MACA,GAAA;AAAA,QACE,KAAA;AAAA,QACA,CAAA,EAAG,IAAI,CAAA,mEAAA,EAAsE,WAAA;AAAA,UAC3E,SAAA;AAAA,UACA,OAAA;AAAA,UACA,MAAA;AAAA,UACA,CAAA;AAAA,UACA;AAAA,SACD,CAAA,MAAA,EAAS,IAAA,CAAK,eAAe,QAAA,EAAU,uBAAuB,CAAC,CAAA,EAAG,IAAA;AAAA,UACjE,6DAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA;AACH,KACF;AACA,IAAA,GAAA;AAAA,MACE,6BAAA;AAAA,MACA,CAAA,EAAG,GAAG,CAAA,qHAAA,EAAwH,EAAA,CAAG,KAAK,CAAA,sDAAA;AAAA,KACxI;AACA,IAAA,GAAA;AAAA,MACE,kBAAA;AAAA,MACA,GAAA,CAAI,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,kBAAA,EAAoB,QAAA,EAAU,uBAAuB,CAAC,CAAA,CAAE;AAAA,KACpF;AACA,IAAA,SAAA,CAAU,IAAA,CAAK,CAAC,mBAAA,EAAqB,EAAA,CAAG,MAAM,GAAG,CAAC,mBAAA,EAAqB,EAAA,CAAG,MAAM,CAAC,CAAA;AACjF,IAAA,IAAA,CAAK,IAAA,CAAK,CAAC,OAAA,EAAS,EAAA,CAAG,MAAA,EAAQ,aAAa,CAAA,EAAG,CAAC,OAAA,EAAS,EAAA,CAAG,MAAA,EAAQ,aAAa,CAAC,CAAA;AAClF,IAAA,IAAA,CAAK,OAAA;AAAA,MACH,kDAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,KAAK,kDAAkD,CAAA;AAAA,EAC9D,WAAW,IAAA,EAAM;AACf,IAAA,GAAA,CAAI,kBAAA,EAAoB,GAAA,CAAI,KAAA,EAAO,IAAI,CAAC,CAAA;AACxC,IAAA,SAAA,CAAU,IAAA,CAAK,CAAC,mBAAA,EAAqB,EAAA,CAAG,MAAM,CAAC,CAAA;AAC/C,IAAA,IAAA,CAAK,KAAK,CAAC,OAAA,EAAS,EAAA,CAAG,MAAA,EAAQ,aAAa,CAAC,CAAA;AAC7C,IAAA,IAAA,CAAK,QAAQ,oDAAoD,CAAA;AAAA,EACnE;AACA,EAAA,MAAM,MAAA,GAAS,CAAA,UAAA,EAAa,IAAA,CAAK,IAAA,CAAK,EAAE,CAAC,CAAA,uKAAA,EACvC,OAAA,CAAQ,UAAA,GAAa,cAAA,GAAiB,EACxC,CAAA,yCAAA,CAAA;AACA,EAAA,GAAA;AAAA,IACE,mBAAA;AAAA,IACA,CAAA,EAAG,GAAG,CAAA,YAAA,EAAe,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,YAAY,CAAA,SAAA,EAAY,OAAA,CAAQ,IAAA,IAAQ,QAAQ,GAAG,MAAM,CAAA,sBAAA;AAAA,GACtG;AACA,EAAA,GAAA,CAAI,mBAAA,EAAqB,WAAA,CAAY,EAAE,CAAC,CAAA;AAExC,EAAA,IAAI,OAAA,CAAQ,mBAAmB,KAAA,EAAO;AACpC,IAAA,GAAA,CAAI,4BAAA,EAA8B,WAAA,CAAY,qBAAqB,CAAC,CAAA;AACpE,IAAA,GAAA,CAAI,0BAAA,EAA4B,gBAAgB,CAAA;AAChD,IAAA,GAAA,CAAI,6BAAA,EAA+B,mBAAmB,CAAA;AACtD,IAAA,GAAA;AAAA,MACE,uCAAA;AAAA,MACA,GAAG,GAAG,CAAA,kHAAA,EAAqH,GAAG,MAAM,CAAA,qDAAA,EAAwD,GAAG,SAAS,CAAA,0CAAA;AAAA,KAC1M;AACA,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,CAAC,6BAAA,EAA+B,EAAA,CAAG,QAAQ,CAAA;AAAA,MAC3C,CAAC,2BAAA,EAA6B,EAAA,CAAG,MAAM,CAAA;AAAA,MACvC,CAAC,8BAAA,EAAgC,EAAA,CAAG,SAAS;AAAA,KAC/C;AACA,IAAA,IAAA,CAAK,KAAK,CAAC,OAAA,EAAS,EAAA,CAAG,QAAA,EAAU,uBAAuB,CAAC,CAAA;AAAA,EAC3D;AAEA,EAAA,GAAA;AAAA,IACE,mBAAA;AAAA,IACA,GAAG,GAAG,CAAA,8MAAA;AAAA,GACR;AACA,EAAA,GAAA;AAAA,IACE,8BAAA;AAAA,IACA,CAAA,EAAG,GAAG,CAAA,oFAAA,EAAuF,IAAA,CAC1F,IAAI,CAAC,CAAC,IAAI,IAAA,EAAM,MAAM,MAAM,CAAA,kBAAA,EAAqB,EAAE,WAAW,IAAI,CAAA,UAAA,EAAa,MAAM,CAAA,GAAA,CAAK,CAAA,CAC1F,IAAA,CAAK,EAAE,CAAC,CAAA,gBAAA;AAAA,GACb;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACA,CAAA,EAAG,GAAG,CAAA,kHAAA,EAAqH,EAAA,CAAG,cAAc,CAAA,+LAAA;AAAA,GAC9I;AACA,EAAA,GAAA;AAAA,IACE,qBAAA;AAAA,IACA,CAAA,EAAG,GAAG,CAAA,mHAAA,EAAsH,EAAA,CAAG,IAAI,CAAA,6GAAA,EAAgH,SAAA,CAChP,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,uBAAuB,CAAC,CAAA,eAAA,EAAkB,CAAC,CAAA,GAAA,CAAK,CAAA,CAChE,IAAA,CAAK,EAAE,CAAC,CAAA,QAAA;AAAA,GACb;AACA,EAAA,OAAOC,cAAAA,CAAQ,KAAA,EAAO,EAAE,KAAA,EAAO,GAAG,CAAA;AACpC;;;AClwBO,SAAS,kBAAkB,QAAA,EAAmD;AACnF,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAC7B,EAAA,MAAM,OAAO,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,GAAG,SAAS,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,GAAI,MAAA;AACzC,EAAA,MAAM,MAAmC,EAAC;AAC1C,EAAA,KAAA,MAAW,OAAO,SAAA,GAAY,IAAA,CAAK,WAAW,eAAe,CAAA,GAAI,EAAC,EAAG;AACnE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAK,OAAO,CAAA,CAC7B,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,MAAM,QAAQ,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,CAAA,EAAG,UAAU,CAAA,EAAE,CAAE,CAAA,CAC3E,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,IAAA,GAAO,EAAE,IAAI,CAAA;AACjC,IAAA,MAAA,CAAO,QAAQ,CAAC,EAAE,KAAA,EAAAE,MAAAA,IAAS,CAAA,KAAM;AAC/B,MAAA,IAAI,CAACA,MAAAA,IAAS,GAAA,CAAIA,MAAK,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,EAAG,KAAA;AAC5B,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,EAAG,KAAA;AAChC,MAAA,GAAA,CAAIA,MAAK,CAAA,GAAI,EAAE,GAAI,IAAA,GAAO,EAAE,IAAA,EAAK,GAAI,EAAC,EAAI,GAAI,QAAA,GAAW,EAAE,QAAA,EAAS,GAAI,EAAC,EAAG;AAAA,IAC9E,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,GAAA;AACT","file":"template.cjs","sourcesContent":["/**\n * A small mutable XML tree over core's hardened reader (`readXml`: no DTDs or entities, bounded),\n * for rewriting WordprocessingML parts. Names are qualified as written (`w:style`); every part this\n * module edits is written by Word, LibreOffice or this engine with the conventional prefixes, and\n * `readPart` refuses a part whose `w` prefix is bound elsewhere rather than editing it blind.\n */\nimport { readXml } from '@docx-editor.dev/core/store'\n\nexport const W_NS = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'\nexport const R_NS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'\n\nexport interface El {\n name: string\n attrs: Record<string, string>\n children: Node[]\n}\nexport type Node = El | string\n\nexport class TemplateError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'TemplateError'\n }\n}\n\n/** Parse one part. Text is decoded; comments and the declaration are dropped. */\nexport function parse(xml: string, part = 'part'): El {\n const read = readXml(xml, { maxBytes: 64 * 1024 * 1024, maxElements: 2_000_000 })\n if (!read.ok) throw new TemplateError(`${part} is not readable XML (${read.reason})`)\n const convert = (node: (typeof read.nodes)[number]): Node =>\n node.type === 'text'\n ? node.value\n : { name: node.name, attrs: { ...node.attributes }, children: node.children.map(convert) }\n const root = read.nodes.map(convert).find((n): n is El => typeof n !== 'string')\n if (!root) throw new TemplateError(`${part} has no root element`)\n const w = root.attrs['xmlns:w']\n if (w !== undefined && w !== W_NS) throw new TemplateError(`${part} binds w: to ${w}`)\n return root\n}\n\nconst escText = (s: string) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\nconst escAttr = (s: string) => escText(s).replace(/\"/g, '&quot;')\n\nexport function serialize(root: El): string {\n const out: string[] = ['<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n']\n const walk = (node: Node) => {\n if (typeof node === 'string') return void out.push(escText(node))\n out.push('<', node.name)\n for (const [k, v] of Object.entries(node.attrs)) out.push(' ', k, '=\"', escAttr(v), '\"')\n if (node.children.length === 0) return void out.push('/>')\n out.push('>')\n node.children.forEach(walk)\n out.push('</', node.name, '>')\n }\n walk(root)\n return out.join('')\n}\n\nexport const el = (\n name: string,\n attrs: Record<string, string> = {},\n children: Node[] = []\n): El => ({\n name,\n attrs,\n children,\n})\nexport const isEl = (n: Node | undefined): n is El => typeof n === 'object' && n !== null\nexport const kids = (e: El, name?: string): El[] =>\n e.children.filter((c): c is El => isEl(c) && (name === undefined || c.name === name))\nexport const kid = (e: El | undefined, name: string): El | undefined =>\n e ? kids(e, name)[0] : undefined\n/** `w:val` of a child, e.g. `val(style, 'w:basedOn')`. */\nexport const val = (e: El | undefined, name: string): string | undefined =>\n kid(e, name)?.attrs['w:val']\n\n/** Every descendant element (depth-first, document order), the root included. */\nexport function* walk(e: El): Generator<El> {\n yield e\n for (const c of e.children) if (isEl(c)) yield* walk(c)\n}\n\nexport const clone = <T extends Node>(n: T): T =>\n (typeof n === 'string'\n ? n\n : { name: n.name, attrs: { ...n.attrs }, children: n.children.map(clone) }) as T\n\n/** Text of an element's `w:t` descendants. */\nexport const textOf = (e: El): string =>\n [...walk(e)]\n .filter((x) => x.name === 'w:t')\n .map((x) => x.children.filter((c): c is string => typeof c === 'string').join(''))\n .join('')\n","/**\n * A DOCX/DOTX as a map of part names to bytes, with the OPC plumbing a merge needs: content types,\n * relationships, and resolving a relationship's target to a part name.\n */\nimport { strFromU8, strToU8, unzipSync, zipSync } from 'fflate'\nimport { el, kids, parse, serialize, TemplateError, type El } from './xml'\n\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'\nexport const RT = {\n officeDocument: `${REL}/officeDocument`,\n styles: `${REL}/styles`,\n numbering: `${REL}/numbering`,\n theme: `${REL}/theme`,\n fontTable: `${REL}/fontTable`,\n settings: `${REL}/settings`,\n header: `${REL}/header`,\n footer: `${REL}/footer`,\n image: `${REL}/image`,\n hyperlink: `${REL}/hyperlink`,\n glossary: `${REL}/glossaryDocument`,\n attachedTemplate: `${REL}/attachedTemplate`,\n} as const\nconst WML = 'application/vnd.openxmlformats-officedocument.wordprocessingml'\nexport const CT = {\n document: `${WML}.document.main+xml`,\n template: `${WML}.template.main+xml`,\n macroDocument: 'application/vnd.ms-word.document.macroEnabled.main+xml',\n macroTemplate: 'application/vnd.ms-word.template.macroEnabledTemplate.main+xml',\n styles: `${WML}.styles+xml`,\n numbering: `${WML}.numbering+xml`,\n settings: `${WML}.settings+xml`,\n fontTable: `${WML}.fontTable+xml`,\n header: `${WML}.header+xml`,\n footer: `${WML}.footer+xml`,\n glossary: `${WML}.document.glossary+xml`,\n theme: 'application/vnd.openxmlformats-officedocument.theme+xml',\n rels: 'application/vnd.openxmlformats-package.relationships+xml',\n} as const\n\nexport interface Rel {\n id: string\n type: string\n target: string\n external: boolean\n}\n\n/** Part names are kept without the leading slash, as the zip stores them. */\nexport class Pkg {\n readonly files: Map<string, Uint8Array>\n private types: El\n\n constructor(files: Map<string, Uint8Array>) {\n this.files = files\n const ct = this.find('[Content_Types].xml')\n if (!ct) throw new TemplateError('not a Word package: no [Content_Types].xml')\n this.types = parse(strFromU8(files.get(ct)!), '[Content_Types].xml')\n }\n\n static read(bytes: Uint8Array): Pkg {\n let files: Record<string, Uint8Array>\n try {\n files = unzipSync(bytes)\n } catch {\n throw new TemplateError('not a Word package: not a zip')\n }\n return new Pkg(new Map(Object.entries(files).filter(([n]) => !n.endsWith('/'))))\n }\n\n write(): Uint8Array {\n this.files.set(\n this.find('[Content_Types].xml') ?? '[Content_Types].xml',\n strToU8(serialize(this.types))\n )\n return zipSync(Object.fromEntries(this.files), { level: 6 })\n }\n\n /** The stored name of a part, matched case-insensitively as OPC does. */\n find(name: string): string | undefined {\n const key = name.replace(/^\\//, '').toLowerCase()\n for (const n of this.files.keys()) if (n.toLowerCase() === key) return n\n return undefined\n }\n has(name: string) {\n return this.find(name) !== undefined\n }\n text(name: string): string | undefined {\n const n = this.find(name)\n return n === undefined ? undefined : strFromU8(this.files.get(n)!)\n }\n xml(name: string): El | undefined {\n const t = this.text(name)\n return t === undefined ? undefined : parse(t, name)\n }\n setXml(name: string, root: El, contentType?: string) {\n this.files.set(this.find(name) ?? name, strToU8(serialize(root)))\n if (contentType) this.setContentType(name, contentType)\n }\n setBytes(name: string, bytes: Uint8Array, contentType?: string) {\n this.files.set(this.find(name) ?? name, bytes)\n if (contentType) this.setContentType(name, contentType)\n }\n remove(name: string) {\n const n = this.find(name)\n if (n === undefined) return\n this.files.delete(n)\n this.types.children = this.types.children.filter(\n (c) =>\n !(\n typeof c !== 'string' &&\n c.name === 'Override' &&\n c.attrs.PartName.toLowerCase() === `/${n.toLowerCase()}`\n )\n )\n this.files.delete(relsName(n))\n }\n\n contentType(name: string): string | undefined {\n const part = `/${name.replace(/^\\//, '')}`.toLowerCase()\n const override = kids(this.types, 'Override').find(\n (o) => o.attrs.PartName.toLowerCase() === part\n )\n if (override) return override.attrs.ContentType\n const ext = part.slice(part.lastIndexOf('.') + 1)\n return kids(this.types, 'Default').find((d) => d.attrs.Extension.toLowerCase() === ext)?.attrs\n .ContentType\n }\n setContentType(name: string, type: string) {\n const part = `/${name.replace(/^\\//, '')}`\n const override = kids(this.types, 'Override').find(\n (o) => o.attrs.PartName.toLowerCase() === part.toLowerCase()\n )\n if (override) override.attrs.ContentType = type\n else this.types.children.push(el('Override', { PartName: part, ContentType: type }))\n }\n /** A `Default` for an extension (media), unless one exists. */\n ensureDefault(ext: string, type: string) {\n if (\n !kids(this.types, 'Default').some(\n (d) => d.attrs.Extension.toLowerCase() === ext.toLowerCase()\n )\n )\n this.types.children.unshift(el('Default', { Extension: ext, ContentType: type }))\n }\n\n rels(owner: string): Rel[] {\n const root = this.xml(relsName(owner))\n if (!root) return []\n return kids(root, 'Relationship').map((r) => ({\n id: r.attrs.Id,\n type: r.attrs.Type,\n target: r.attrs.Target,\n external: r.attrs.TargetMode === 'External',\n }))\n }\n setRels(owner: string, rels: Rel[]) {\n const root = el(\n 'Relationships',\n { xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships' },\n rels.map((r) =>\n el('Relationship', {\n Id: r.id,\n Type: r.type,\n Target: r.target,\n ...(r.external ? { TargetMode: 'External' } : {}),\n })\n )\n )\n this.setXml(relsName(owner), root)\n }\n /** Add a relationship from `owner`; returns its new id. */\n addRel(owner: string, type: string, target: string, external = false): string {\n const rels = this.rels(owner)\n const id = freshId(new Set(rels.map((r) => r.id)), 'rIdT')\n rels.push({ id, type, target, external })\n this.setRels(owner, rels)\n return id\n }\n\n /** The part a relationship of `owner` points at (internal targets only). */\n target(owner: string, rel: Rel): string {\n return resolveTarget(owner, rel.target)\n }\n /** The first internal part of a relationship type from `owner`. */\n partOf(owner: string, type: string): string | undefined {\n const rel = this.rels(owner).find((r) => r.type === type && !r.external)\n return rel && this.find(this.target(owner, rel))\n }\n /** The main document part (`word/document.xml` by convention). */\n get main(): string {\n const main = this.partOf('', RT.officeDocument)\n if (!main) throw new TemplateError('not a Word package: no main document part')\n return main\n }\n}\n\n/** `word/document.xml` → `word/_rels/document.xml.rels`; '' (the package) → `_rels/.rels`. */\nfunction relsName(owner: string): string {\n const slash = owner.lastIndexOf('/')\n return `${owner.slice(0, slash + 1)}_rels/${owner.slice(slash + 1)}.rels`\n}\n\nfunction resolveTarget(owner: string, target: string): string {\n if (target.startsWith('/')) return target.slice(1)\n const base = owner\n .slice(0, owner.lastIndexOf('/') + 1)\n .split('/')\n .filter(Boolean)\n for (const seg of target.split('/')) {\n if (seg === '..') base.pop()\n else if (seg !== '.' && seg !== '') base.push(seg)\n }\n return base.join('/')\n}\n\n/** A target for `part` relative to `owner`'s folder. */\nexport function relativeTarget(owner: string, part: string): string {\n const from = owner.slice(0, owner.lastIndexOf('/') + 1)\n return part.startsWith(from) ? part.slice(from.length) : `/${part}`\n}\n\nfunction freshId(taken: ReadonlySet<string>, prefix: string): string {\n for (let i = 1; ; i++) if (!taken.has(`${prefix}${i}`)) return `${prefix}${i}`\n}\n\n/** An unused part name like `word/header3.xml` / `word/media/image2.png`. */\nexport function freshPartName(pkg: Pkg, folder: string, stem: string, ext: string): string {\n for (let i = 1; ; i++) {\n const name = `${folder}${stem}${i}.${ext}`\n if (!pkg.has(name)) return name\n }\n}\n","/**\n * House templates the way Word applies them, as pure functions over package bytes:\n *\n * - `newFromTemplate`: File › New from a .dotx/.docx — the whole template package (styles,\n * numbering, theme, fonts, settings, section setup, headers and footers with their media, the\n * starting body) becomes a new document; the glossary stays with the template, as in Word.\n * - `applyTemplate`: Word's Organizer / \"Attach template\" with \"Automatically update document\n * styles\" — the template's docDefaults, latent styles and every style definition replace the\n * document's (house style wins on a style id; styles only the document has stay), with their\n * numbering brought across under fresh ids, the theme, font table entries and layout settings.\n * With `furniture`, the final section also takes the template's page setup and its headers and\n * footers (letterhead, watermark), which is how generated content is put into the house shape.\n *\n * Nothing here knows about the editor: the backend can run the same code on stored bytes.\n */\nimport { CT, Pkg, RT, freshPartName, relativeTarget, type Rel } from './pkg'\nimport { clone, el, isEl, kid, kids, val, walk, W_NS, R_NS, TemplateError, type El } from './xml'\n\n/** Style ids are compared as Word compares them: exactly. Names case-insensitively. */\nconst nameKey = (s: string) => s.trim().toLowerCase()\n\nexport interface ApplyTemplateOptions {\n /** Record the template in settings.xml (`w:attachedTemplate`), e.g. \"House template.dotx\". */\n attachedTemplate?: string\n /** Also take the template's page setup, headers and footers for the final section. */\n furniture?: boolean\n}\n\nexport interface ApplyTemplateReport {\n /** Template style ids written into the document (replaced or added). */\n styles: string[]\n /** Template style id → the document's id it was matched to by name (localised built-ins). */\n renamed: Record<string, string>\n /** Template numId → new numId in the document. */\n numbering: Record<string, string>\n}\n\n/** CT_Settings element order, for the few settings this module writes. */\nconst SETTINGS_ORDER = [\n 'w:writeProtection',\n 'w:view',\n 'w:zoom',\n 'w:removePersonalInformation',\n 'w:removeDateAndTime',\n 'w:doNotDisplayPageBoundaries',\n 'w:displayBackgroundShape',\n 'w:printPostScriptOverText',\n 'w:printFractionalCharacterWidth',\n 'w:printFormsData',\n 'w:embedTrueTypeFonts',\n 'w:embedSystemFonts',\n 'w:saveSubsetFonts',\n 'w:saveFormsData',\n 'w:mirrorMargins',\n 'w:alignBordersAndEdges',\n 'w:bordersDoNotSurroundHeader',\n 'w:bordersDoNotSurroundFooter',\n 'w:gutterAtTop',\n 'w:hideSpellingErrors',\n 'w:hideGrammaticalErrors',\n 'w:activeWritingStyle',\n 'w:proofState',\n 'w:formsDesign',\n 'w:attachedTemplate',\n 'w:linkStyles',\n 'w:stylePaneFormatFilter',\n 'w:stylePaneSortMethod',\n 'w:documentType',\n 'w:mailMerge',\n 'w:revisionView',\n 'w:trackRevisions',\n 'w:doNotTrackMoves',\n 'w:doNotTrackFormatting',\n 'w:documentProtection',\n 'w:autoFormatOverride',\n 'w:styleLockTheme',\n 'w:styleLockQFSet',\n 'w:defaultTabStop',\n 'w:autoHyphenation',\n 'w:consecutiveHyphenLimit',\n 'w:hyphenationZone',\n 'w:doNotHyphenateCaps',\n 'w:showEnvelope',\n 'w:summaryLength',\n 'w:clickAndTypeStyle',\n 'w:defaultTableStyle',\n 'w:evenAndOddHeaders',\n 'w:bookFoldRevPrinting',\n 'w:bookFoldPrinting',\n 'w:bookFoldPrintingSheets',\n 'w:drawingGridHorizontalSpacing',\n 'w:drawingGridVerticalSpacing',\n 'w:displayHorizontalDrawingGridEvery',\n 'w:displayVerticalDrawingGridEvery',\n 'w:doNotUseMarginsForDrawingGridOrigin',\n 'w:drawingGridHorizontalOrigin',\n 'w:drawingGridVerticalOrigin',\n 'w:doNotShadeFormData',\n 'w:noPunctuationKerning',\n 'w:characterSpacingControl',\n 'w:printTwoOnOne',\n 'w:strictFirstAndLastChars',\n 'w:noLineBreaksAfter',\n 'w:noLineBreaksBefore',\n 'w:savePreviewPicture',\n 'w:doNotValidateAgainstSchema',\n 'w:saveInvalidXml',\n 'w:ignoreMixedContent',\n 'w:alwaysShowPlaceholderText',\n 'w:doNotDemarcateInvalidXml',\n 'w:saveXmlDataOnly',\n 'w:useXSLTWhenSaving',\n 'w:saveThroughXslt',\n 'w:showXMLTags',\n 'w:alwaysMergeEmptyNamespace',\n 'w:updateFields',\n 'w:hdrShapeDefaults',\n 'w:footnotePr',\n 'w:endnotePr',\n 'w:compat',\n 'w:docVars',\n 'w:rsids',\n 'm:mathPr',\n 'w:attachedSchema',\n 'w:themeFontLang',\n 'w:clrSchemeMapping',\n 'w:doNotIncludeSubdocsInStats',\n 'w:doNotAutoCompressPictures',\n 'w:forceUpgrade',\n 'w:captions',\n 'w:readModeInkLockDown',\n 'w:smartTagType',\n 'sl:schemaLibrary',\n 'w:shapeDefaults',\n 'w:doNotEmbedSmartTags',\n 'w:decimalSymbol',\n 'w:listSeparator',\n]\n\n/** Put `child` into `parent` where `order` says it goes, replacing one of the same name. */\nfunction placeOrdered(parent: El, child: El, order: readonly string[]) {\n const at = parent.children.findIndex((c) => isEl(c) && c.name === child.name)\n if (at >= 0) return void (parent.children[at] = child)\n const rank = order.indexOf(child.name)\n const before = parent.children.findIndex(\n (c) => isEl(c) && rank >= 0 && order.indexOf(c.name) > rank\n )\n if (before < 0) parent.children.push(child)\n else parent.children.splice(before, 0, child)\n}\n\n/** The template's layout settings Word takes along when it attaches a template. */\nconst TEMPLATE_SETTINGS = [\n 'w:defaultTabStop',\n 'w:characterSpacingControl',\n 'w:compat',\n 'w:themeFontLang',\n 'w:clrSchemeMapping',\n 'w:hyphenationZone',\n 'w:autoHyphenation',\n 'w:defaultTableStyle',\n]\n\nconst W_DOC_ATTRS = { 'xmlns:w': W_NS, 'xmlns:r': R_NS }\n\nfunction ensurePart(\n pkg: Pkg,\n type: string,\n name: string,\n contentType: string,\n root: () => El\n): string {\n const existing = pkg.partOf(pkg.main, type)\n if (existing) return existing\n const part = pkg.has(name)\n ? freshPartName(pkg, 'word/', name.replace(/^word\\/|\\d*\\.xml$/g, ''), 'xml')\n : name\n pkg.setXml(part, root(), contentType)\n pkg.addRel(pkg.main, type, relativeTarget(pkg.main, part))\n return part\n}\n\n// ── Styles and numbering ──────────────────────────────────────────────────────────────────────────\n\ninterface StyleIndex {\n byId: Map<string, El>\n byName: Map<string, El>\n}\nfunction indexStyles(styles: El): StyleIndex {\n const byId = new Map<string, El>()\n const byName = new Map<string, El>()\n for (const s of kids(styles, 'w:style')) {\n const id = s.attrs['w:styleId']\n if (!id) continue\n byId.set(id, s)\n const keys = [val(s, 'w:name'), ...(val(s, 'w:aliases')?.split(',') ?? [])]\n for (const k of keys) if (k) byName.set(`${s.attrs['w:type']}:${nameKey(k)}`, s)\n }\n return { byId, byName }\n}\n\nconst STYLE_REFS = [\n 'w:basedOn',\n 'w:next',\n 'w:link',\n 'w:pStyle',\n 'w:rStyle',\n 'w:tblStyle',\n 'w:numStyleLink',\n 'w:styleLink',\n]\n\n/** Rewrite style-id references in `root` through `map`. */\nfunction renameStyleRefs(root: El, map: ReadonlyMap<string, string>) {\n if (map.size === 0) return\n for (const e of walk(root))\n if (STYLE_REFS.includes(e.name) && map.has(e.attrs['w:val']))\n e.attrs['w:val'] = map.get(e.attrs['w:val'])!\n}\n\n/** Every numId referenced in `root` (numPr/numId). */\nconst numIdsIn = (root: El) =>\n [...walk(root)].filter((e) => e.name === 'w:numId').map((e) => e.attrs['w:val'])\n\nfunction maxId(nodes: El[], attr: string): number {\n return nodes.reduce((m, n) => Math.max(m, Number(n.attrs[attr]) || 0), 0)\n}\n\n/**\n * Bring the numbering `numIds` need from `from` into `into`, under fresh numIds and\n * abstractNumIds; returns the numId map. A template's numbering-style indirection\n * (`w:numStyleLink` → a numbering style → its numId) is followed.\n */\nfunction importNumbering(\n from: El | undefined,\n into: El,\n numIds: Iterable<string>,\n styleNumId: (styleId: string) => string | undefined\n): Map<string, string> {\n const map = new Map<string, string>()\n if (!from) return map\n const nums = new Map(kids(from, 'w:num').map((n) => [n.attrs['w:numId'], n]))\n const abstracts = new Map(kids(from, 'w:abstractNum').map((a) => [a.attrs['w:abstractNumId'], a]))\n const abstractMap = new Map<string, string>()\n let nextNum = maxId(kids(into, 'w:num'), 'w:numId') + 1\n let nextAbstract = maxId(kids(into, 'w:abstractNum'), 'w:abstractNumId') + 1\n const nsids = new Set(kids(into, 'w:abstractNum').map((a) => val(a, 'w:nsid')))\n const queue = [...numIds]\n while (queue.length) {\n const id = queue.shift()!\n if (map.has(id) || id === '0') continue\n const num = nums.get(id)\n if (!num) continue\n const absId = val(num, 'w:abstractNumId')\n if (absId !== undefined && !abstractMap.has(absId)) {\n const abs = abstracts.get(absId)\n if (abs) {\n const copy = clone(abs)\n copy.attrs['w:abstractNumId'] = String(nextAbstract)\n abstractMap.set(absId, String(nextAbstract++))\n // Word identifies a list by its nsid: a clash would join the template's list to one of\n // the document's.\n const nsid = kid(copy, 'w:nsid')\n if (nsid && nsids.has(nsid.attrs['w:val'])) {\n let n = (parseInt(nsid.attrs['w:val'], 16) || 0x10000000) + 1\n while (nsids.has(n.toString(16).toUpperCase().padStart(8, '0'))) n++\n nsid.attrs['w:val'] = n.toString(16).toUpperCase().padStart(8, '0')\n }\n if (nsid) nsids.add(nsid.attrs['w:val'])\n // Picture bullets live in the numbering part's own relationships: fall back to the text.\n for (const l of kids(copy, 'w:lvl'))\n l.children = l.children.filter((c) => !(isEl(c) && c.name === 'w:lvlPicBulletId'))\n // Abstract definitions precede every w:num (CT_Numbering's order).\n const firstNum = into.children.findIndex(\n (c) => isEl(c) && (c.name === 'w:num' || c.name === 'w:numIdMacAtCleanup')\n )\n if (firstNum < 0) into.children.push(copy)\n else into.children.splice(firstNum, 0, copy)\n const link = val(copy, 'w:numStyleLink')\n const linked = link ? styleNumId(link) : undefined\n if (linked) queue.push(linked)\n }\n }\n const copy = clone(num)\n copy.attrs['w:numId'] = String(nextNum)\n map.set(id, String(nextNum++))\n const absRef = kid(copy, 'w:abstractNumId')\n if (absRef && abstractMap.has(absRef.attrs['w:val']))\n absRef.attrs['w:val'] = abstractMap.get(absRef.attrs['w:val'])!\n const cleanup = into.children.findIndex((c) => isEl(c) && c.name === 'w:numIdMacAtCleanup')\n if (cleanup < 0) into.children.push(copy)\n else into.children.splice(cleanup, 0, copy)\n }\n return map\n}\n\nfunction applyStyles(doc: Pkg, tpl: Pkg, report: ApplyTemplateReport) {\n const tplStylesPart = tpl.partOf(tpl.main, RT.styles)\n if (!tplStylesPart) return\n const T = tpl.xml(tplStylesPart)!\n const stylesPart = ensurePart(doc, RT.styles, 'word/styles.xml', CT.styles, () =>\n el('w:styles', { ...W_DOC_ATTRS })\n )\n const D = doc.xml(stylesPart)!\n for (const [k, v] of Object.entries(T.attrs))\n if (k.startsWith('xmlns:') && !(k in D.attrs)) D.attrs[k] = v\n\n // docDefaults and latentStyles: the template's, as Word's Organizer copies them.\n for (const name of ['w:latentStyles', 'w:docDefaults']) {\n const t = kid(T, name)\n if (!t) continue\n const at = D.children.findIndex((c) => isEl(c) && c.name === name)\n if (at >= 0) D.children[at] = clone(t)\n else D.children.unshift(clone(t))\n }\n // keep docDefaults first, then latentStyles\n const dd = kid(D, 'w:docDefaults')\n const ls = kid(D, 'w:latentStyles')\n D.children = D.children.filter((c) => c !== dd && c !== ls)\n D.children.unshift(...([dd, ls].filter(Boolean) as El[]))\n\n // Which id each template style takes in the document: its own, or — for a built-in the document\n // names the same but under another id (a localised \"Überschrift1\" for \"heading 1\") — the\n // document's, so the document's paragraphs keep pointing at the ids they use.\n const dIndex = indexStyles(D)\n const rename = new Map<string, string>()\n for (const s of kids(T, 'w:style')) {\n const id = s.attrs['w:styleId']\n if (dIndex.byId.has(id)) continue\n const name = val(s, 'w:name')\n const match = name && dIndex.byName.get(`${s.attrs['w:type']}:${nameKey(name)}`)\n if (match && !kids(T, 'w:style').some((o) => o.attrs['w:styleId'] === match.attrs['w:styleId']))\n rename.set(id, match.attrs['w:styleId'])\n }\n const imported = kids(T, 'w:style').map((s) => {\n const copy = clone(s)\n if (rename.has(copy.attrs['w:styleId']))\n copy.attrs['w:styleId'] = rename.get(copy.attrs['w:styleId'])!\n renameStyleRefs(copy, rename)\n return copy\n })\n\n // Numbering the imported styles use, under fresh ids.\n const tplNumbering = tpl.partOf(tpl.main, RT.numbering)\n const T_num = tplNumbering ? tpl.xml(tplNumbering) : undefined\n const wanted = imported.flatMap(numIdsIn)\n let numMap = new Map<string, string>()\n if (T_num && wanted.length) {\n const numberingPart = ensurePart(doc, RT.numbering, 'word/numbering.xml', CT.numbering, () =>\n el('w:numbering', { ...W_DOC_ATTRS })\n )\n const D_num = doc.xml(numberingPart)!\n const tplStyleNum = (sid: string) => {\n const st = kids(T, 'w:style').find((s) => s.attrs['w:styleId'] === sid)\n return st ? numIdsIn(st)[0] : undefined\n }\n numMap = importNumbering(T_num, D_num, wanted, tplStyleNum)\n // The levels' style links (w:pStyle in w:lvl) follow the renamed styles.\n for (const abs of kids(D_num, 'w:abstractNum')) renameStyleRefs(abs, rename)\n doc.setXml(numberingPart, D_num)\n }\n for (const s of imported)\n for (const e of walk(s))\n if (e.name === 'w:numId' && numMap.has(e.attrs['w:val']))\n e.attrs['w:val'] = numMap.get(e.attrs['w:val'])!\n\n // Template wins on an id; the document's other styles stay.\n for (const s of imported) {\n const id = s.attrs['w:styleId']\n const at = D.children.findIndex(\n (c) => isEl(c) && c.name === 'w:style' && c.attrs['w:styleId'] === id\n )\n if (at >= 0) D.children[at] = s\n else D.children.push(s)\n }\n // One default per style type: the template's.\n for (const s of imported)\n if (s.attrs['w:default'] === '1' || s.attrs['w:default'] === 'true')\n for (const o of kids(D, 'w:style'))\n if (o !== s && o.attrs['w:type'] === s.attrs['w:type'] && o.attrs['w:default'])\n delete o.attrs['w:default']\n\n doc.setXml(stylesPart, D)\n report.styles = imported.map((s) => s.attrs['w:styleId'])\n report.renamed = Object.fromEntries(rename)\n report.numbering = Object.fromEntries(numMap)\n}\n\n// ── Theme, fonts, settings ────────────────────────────────────────────────────────────────────────\n\nfunction applyTheme(doc: Pkg, tpl: Pkg) {\n const t = tpl.partOf(tpl.main, RT.theme)\n if (!t) return\n const bytes = tpl.files.get(t)!\n const d = doc.partOf(doc.main, RT.theme)\n if (d) return void doc.setBytes(d, bytes)\n const name = doc.has('word/theme/theme1.xml')\n ? freshPartName(doc, 'word/theme/', 'theme', 'xml')\n : 'word/theme/theme1.xml'\n doc.setBytes(name, bytes, CT.theme)\n doc.addRel(doc.main, RT.theme, relativeTarget(doc.main, name))\n}\n\nfunction applyFonts(doc: Pkg, tpl: Pkg) {\n const t = tpl.partOf(tpl.main, RT.fontTable)\n if (!t) return\n const T = tpl.xml(t)!\n const part = ensurePart(doc, RT.fontTable, 'word/fontTable.xml', CT.fontTable, () =>\n el('w:fonts', { ...W_DOC_ATTRS })\n )\n const D = doc.xml(part)!\n for (const f of kids(T, 'w:font')) {\n const copy = clone(f)\n // Embedded (obfuscated) font parts belong to the template's package.\n copy.children = copy.children.filter((c) => !(isEl(c) && /^w:embed/.test(c.name)))\n const at = D.children.findIndex(\n (c) => isEl(c) && c.name === 'w:font' && c.attrs['w:name'] === f.attrs['w:name']\n )\n if (at >= 0) D.children[at] = copy\n else D.children.push(copy)\n }\n doc.setXml(part, D)\n}\n\nfunction settingsOf(pkg: Pkg): { part: string; root: El } {\n const part = ensurePart(pkg, RT.settings, 'word/settings.xml', CT.settings, () =>\n el('w:settings', { ...W_DOC_ATTRS })\n )\n return { part, root: pkg.xml(part)! }\n}\n\nfunction applySettings(doc: Pkg, tpl: Pkg, opts: ApplyTemplateOptions) {\n const tPart = tpl.partOf(tpl.main, RT.settings)\n const T = tPart ? tpl.xml(tPart) : undefined\n const { part, root } = settingsOf(doc)\n if (T)\n for (const name of TEMPLATE_SETTINGS) {\n const t = kid(T, name)\n if (t) placeOrdered(root, clone(t), SETTINGS_ORDER)\n }\n if (opts.furniture && T) {\n const even = kid(T, 'w:evenAndOddHeaders')\n root.children = root.children.filter((c) => !(isEl(c) && c.name === 'w:evenAndOddHeaders'))\n if (even) placeOrdered(root, clone(even), SETTINGS_ORDER)\n }\n if (opts.attachedTemplate) {\n if (!root.attrs['xmlns:r']) root.attrs['xmlns:r'] = R_NS\n const rels = doc.rels(part).filter((r) => r.type !== RT.attachedTemplate)\n doc.setRels(part, rels)\n const id = doc.addRel(part, RT.attachedTemplate, encodeURI(opts.attachedTemplate), true)\n placeOrdered(root, el('w:attachedTemplate', { 'r:id': id }), SETTINGS_ORDER)\n }\n doc.setXml(part, root)\n}\n\n// ── Page furniture ────────────────────────────────────────────────────────────────────────────────\n\n/** Copy a part and the internal parts its relationships reach, under fresh names; returns its name. */\nfunction copyPart(doc: Pkg, tpl: Pkg, source: string, stem: string): string {\n const ext = source.slice(source.lastIndexOf('.') + 1)\n const folder = source.slice(0, source.lastIndexOf('/') + 1)\n const name = freshPartName(doc, folder, stem, ext)\n doc.setBytes(name, tpl.files.get(source)!, tpl.contentType(source))\n const rels: Rel[] = tpl.rels(source).map((r) => {\n if (r.external) return { ...r }\n const target = tpl.find(tpl.target(source, r))\n if (!target) return { ...r }\n const tExt = target.slice(target.lastIndexOf('.') + 1)\n const tFolder = target.slice(0, target.lastIndexOf('/') + 1)\n const tStem = target.slice(tFolder.length, target.length - tExt.length - 1).replace(/\\d+$/, '')\n const copied = freshPartName(doc, tFolder, tStem || 'part', tExt)\n doc.setBytes(copied, tpl.files.get(target)!)\n const type = tpl.contentType(target)\n if (type) {\n if (/^(image|video|audio)\\//.test(type)) doc.ensureDefault(tExt, type)\n else doc.setContentType(copied, type)\n }\n return { ...r, target: relativeTarget(name, copied) }\n })\n if (rels.length) doc.setRels(name, rels)\n return name\n}\n\nfunction finalSectPr(body: El): El | undefined {\n return kid(body, 'w:sectPr')\n}\n\nfunction applyFurniture(doc: Pkg, tpl: Pkg) {\n const tDoc = tpl.xml(tpl.main)!\n const tSect = finalSectPr(kid(tDoc, 'w:body')!)\n if (!tSect) return\n const dRoot = doc.xml(doc.main)!\n const body = kid(dRoot, 'w:body')\n if (!body) throw new TemplateError('the document has no body')\n for (const [k, v] of Object.entries(tDoc.attrs))\n if (k.startsWith('xmlns:') && !(k in dRoot.attrs)) dRoot.attrs[k] = v\n\n // The document's own furniture for the final section goes, unless another section uses it.\n const old = finalSectPr(body)\n const oldIds = old\n ? kids(old)\n .filter((c) => c.name === 'w:headerReference' || c.name === 'w:footerReference')\n .map((c) => c.attrs['r:id'])\n : []\n const stillUsed = new Set(\n [...walk(body)]\n .filter(\n (e) => e !== old && (e.name === 'w:headerReference' || e.name === 'w:footerReference')\n )\n .filter((e) => !old || ![...walk(old)].includes(e))\n .map((e) => e.attrs['r:id'])\n )\n const sect = clone(tSect)\n for (const ref of kids(sect)) {\n if (ref.name !== 'w:headerReference' && ref.name !== 'w:footerReference') continue\n const rel = tpl.rels(tpl.main).find((r) => r.id === ref.attrs['r:id'])\n const source = rel && tpl.find(tpl.target(tpl.main, rel))\n if (!rel || !source) {\n sect.children.splice(sect.children.indexOf(ref), 1)\n continue\n }\n const copied = copyPart(\n doc,\n tpl,\n source,\n ref.name === 'w:headerReference' ? 'header' : 'footer'\n )\n ref.attrs['r:id'] = doc.addRel(doc.main, rel.type, relativeTarget(doc.main, copied))\n }\n if (old) body.children[body.children.indexOf(old)] = sect\n else body.children.push(sect)\n const rels = doc.rels(doc.main)\n for (const id of oldIds) {\n if (stillUsed.has(id)) continue\n const rel = rels.find((r) => r.id === id)\n if (!rel) continue\n doc.remove(doc.target(doc.main, rel))\n rels.splice(rels.indexOf(rel), 1)\n }\n doc.setRels(doc.main, rels)\n doc.setXml(doc.main, dRoot)\n}\n\n// ── Public API ────────────────────────────────────────────────────────────────────────────────────\n\n/** Word's Organizer + attach template, optionally with the template's page furniture. */\nexport function applyTemplate(\n document: Uint8Array,\n template: Uint8Array,\n options: ApplyTemplateOptions = {}\n): { bytes: Uint8Array; report: ApplyTemplateReport } {\n const doc = Pkg.read(document)\n const tpl = Pkg.read(template)\n const report: ApplyTemplateReport = { styles: [], renamed: {}, numbering: {} }\n applyStyles(doc, tpl, report)\n applyTheme(doc, tpl)\n applyFonts(doc, tpl)\n applySettings(doc, tpl, options)\n if (options.furniture) applyFurniture(doc, tpl)\n return { bytes: doc.write(), report }\n}\n\n/**\n * File › New from a template: the template package as a new document. A .dotx/.dotm main part\n * becomes a document part (macros are not carried), the glossary stays behind, and the template\n * is recorded as attached.\n *\n * Word 2010's `stylesWithEffects.xml`, a second copy of the style definitions that Word 2013 and\n * later neither read nor write, stays behind too: the new document's styles are `styles.xml`\n * alone, and a template saved by python-docx does not put hundreds of kilobytes of duplicate\n * styles into every new note.\n */\nexport function newFromTemplate(\n template: Uint8Array,\n options: { attachedTemplate?: string } = {}\n): Uint8Array {\n const pkg = Pkg.read(template)\n const main = pkg.main\n pkg.setContentType(main, CT.document)\n const rels = pkg.rels(main)\n const left = (type: string) =>\n type === RT.glossary || /vbaProject$/.test(type) || /\\/stylesWithEffects$/.test(type)\n for (const rel of rels.filter((r) => left(r.type))) {\n const target = pkg.find(pkg.target(main, rel))\n if (target) {\n for (const sub of pkg.rels(target)) if (!sub.external) pkg.remove(pkg.target(target, sub))\n pkg.remove(target)\n }\n }\n pkg.setRels(\n main,\n rels.filter((r) => !left(r.type))\n )\n if (options.attachedTemplate) {\n const { part, root } = settingsOf(pkg)\n if (!root.attrs['xmlns:r']) root.attrs['xmlns:r'] = R_NS\n pkg.setRels(\n part,\n pkg.rels(part).filter((r) => r.type !== RT.attachedTemplate)\n )\n const id = pkg.addRel(part, RT.attachedTemplate, encodeURI(options.attachedTemplate), true)\n placeOrdered(root, el('w:attachedTemplate', { 'r:id': id }), SETTINGS_ORDER)\n pkg.setXml(part, root)\n }\n return pkg.write()\n}\n\n/**\n * Put content into the house shape: the template's styles, numbering, theme, fonts, settings and\n * page furniture applied to `content` (an AI draft, a converted Markdown file).\n */\nexport function composeWithTemplate(\n content: Uint8Array,\n template: Uint8Array,\n attachedTemplate?: string\n): Uint8Array {\n return applyTemplate(content, template, { furniture: true, attachedTemplate }).bytes\n}\n","/**\n * Quick Parts: the building blocks a template's glossary carries (`word/glossary/document.xml`),\n * listed by gallery and category, and packaged one at a time as a self-contained fragment — the\n * block's body with the styles, numbering and media it uses — for the editor's paste to merge.\n */\nimport { strToU8 } from 'fflate'\nimport { CT, Pkg, RT } from './pkg'\nimport { clone, el, isEl, kid, kids, val, walk, W_NS, R_NS, textOf, type El } from './xml'\n\nexport interface BuildingBlockInfo {\n name: string\n gallery: string\n category: string\n description: string\n /** Plain text of the block, for a preview. */\n text: string\n}\n\nfunction glossaryOf(pkg: Pkg): { part: string; root: El } | undefined {\n const part = pkg.partOf(pkg.main, RT.glossary) ?? pkg.find('word/glossary/document.xml')\n const root = part ? pkg.xml(part) : undefined\n return part && root ? { part, root } : undefined\n}\n\nfunction docParts(root: El): El[] {\n return kids(kid(root, 'w:docParts') ?? root, 'w:docPart')\n}\n\nfunction infoOf(part: El): BuildingBlockInfo | undefined {\n const pr = kid(part, 'w:docPartPr')\n const name = val(pr, 'w:name')\n if (!name) return undefined\n const category = kid(pr, 'w:category')\n return {\n name,\n gallery: val(category, 'w:gallery') ?? 'docParts',\n category: val(category, 'w:name') ?? 'General',\n description: val(pr, 'w:description') ?? '',\n // One space between paragraphs (and table cells), as a one-line preview reads.\n text: [...walk(kid(part, 'w:docPartBody') ?? part)]\n .filter((e) => e.name === 'w:p')\n .map(textOf)\n .filter(Boolean)\n .join(' '),\n }\n}\n\n/** Quick Parts and AutoText first, as Word's Insert › Quick Parts lists them; sorted by category. */\nexport function listBuildingBlocks(template: Uint8Array): BuildingBlockInfo[] {\n const g = glossaryOf(Pkg.read(template))\n if (!g) return []\n return docParts(g.root)\n .map(infoOf)\n .filter((b): b is BuildingBlockInfo => !!b && b.gallery !== 'placeholder')\n}\n\nconst MIN_CONTENT_TYPES = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"${CT.rels}\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/></Types>`\n\n/**\n * One building block as a fragment package: its `w:docPartBody` as the body, with the glossary's\n * styles (without document defaults: pasted text takes the defaults of the document it lands in),\n * numbering, and the media its relationships reach. Undefined when the template has no such block.\n */\nexport function buildingBlockFragment(template: Uint8Array, name: string): Uint8Array | undefined {\n const tpl = Pkg.read(template)\n const g = glossaryOf(tpl)\n const part = g && docParts(g.root).find((p) => val(kid(p, 'w:docPartPr'), 'w:name') === name)\n const body = part && kid(part, 'w:docPartBody')\n if (!g || !body) return undefined\n\n const out = new Pkg(new Map([['[Content_Types].xml', strToU8(MIN_CONTENT_TYPES)]]))\n out.setRels('', [\n { id: 'rId1', type: RT.officeDocument, target: 'word/document.xml', external: false },\n ])\n const main = 'word/document.xml'\n const blocks = body.children.filter(isEl).map(clone)\n out.setXml(\n main,\n el('w:document', { ...g.root.attrs, 'xmlns:w': W_NS, 'xmlns:r': R_NS }, [\n el('w:body', {}, blocks),\n ]),\n CT.document\n )\n\n const rels = []\n const stylesPart = tpl.partOf(g.part, RT.styles) ?? tpl.partOf(tpl.main, RT.styles)\n if (stylesPart) {\n const styles = tpl.xml(stylesPart)!\n styles.children = styles.children.filter((c) => !(isEl(c) && c.name === 'w:docDefaults'))\n out.setXml('word/styles.xml', styles, CT.styles)\n rels.push({ id: 'rIdStyles', type: RT.styles, target: 'styles.xml', external: false })\n }\n const numberingPart = tpl.partOf(g.part, RT.numbering) ?? tpl.partOf(tpl.main, RT.numbering)\n if (numberingPart) {\n out.setBytes('word/numbering.xml', tpl.files.get(numberingPart)!, CT.numbering)\n rels.push({ id: 'rIdNumbering', type: RT.numbering, target: 'numbering.xml', external: false })\n }\n // The relationships the block itself uses (pictures, hyperlinks), under their own ids.\n const used = new Set<string>()\n for (const e of blocks.flatMap((b) => [...walk(b)]))\n for (const [k, v] of Object.entries(e.attrs)) if (k.startsWith('r:')) used.add(v)\n for (const rel of tpl.rels(g.part).filter((r) => used.has(r.id))) {\n if (rel.external) {\n rels.push({ ...rel })\n continue\n }\n const target = tpl.find(tpl.target(g.part, rel))\n if (!target) continue\n const file = `word/media/${target.slice(target.lastIndexOf('/') + 1)}`\n out.setBytes(file, tpl.files.get(target)!)\n const type = tpl.contentType(target)\n if (type) out.ensureDefault(file.slice(file.lastIndexOf('.') + 1), type)\n rels.push({ ...rel, target: file.slice('word/'.length) })\n }\n out.setRels(main, rels)\n return out.write()\n}\n\n/** A fragment's body as clipboard HTML the editor's paste recognises as its own. */\nexport function fragmentClipboardHtml(fragment: Uint8Array, covered = true): string {\n let binary = ''\n for (let i = 0; i < fragment.length; i += 0x8000)\n binary += String.fromCharCode(...fragment.subarray(i, i + 0x8000))\n return `<div data-docx-fragment=\"${btoa(binary)}\" data-docx-fragment-end=\"${covered ? 'covered' : 'open'}\"></div>`\n}\n","/**\n * A fragment package marked as one tracked insertion, so that pasting it while suggesting lands a\n * change to review rather than an untracked edit. The editor's paste keeps `w:ins` from a\n * fragment (renumbering its id), and accepting or rejecting the change takes the whole insertion.\n */\nimport { Pkg } from './pkg'\nimport { el, isEl, kid, type El } from './xml'\n\n/** Who made a tracked change and when (`w:author`, `w:date`). */\nexport interface Revision {\n author: string\n /** ISO 8601, seconds precision, e.g. `2026-10-19T09:30:00Z`. */\n date: string\n}\n\n/** Already tracked in the fragment: left as they are. */\nconst TRACKED = new Set(['w:ins', 'w:del', 'w:moveFrom', 'w:moveTo'])\n\n/**\n * The fragment with every run wrapped in `w:ins` and every new paragraph mark marked inserted. A\n * table row is marked inserted as a whole, its cells left as they are: the editor rejects an\n * inserted row whose content is tracked as well only partly. A run is not descended into, so a\n * text box goes in with its run. `covered`: the fragment's last paragraph mark is pasted too (a\n * block before the caret's paragraph); otherwise the last paragraph runs into the text after the\n * caret and its mark is not new.\n */\nexport function trackInsertion(\n fragment: Uint8Array,\n revision: Revision,\n covered: boolean\n): Uint8Array {\n const pkg = Pkg.read(fragment)\n const main = pkg.main\n const root = pkg.xml(main)\n const body = kid(root, 'w:body')\n if (!root || !body) return fragment\n const attrs = { 'w:id': '1', 'w:author': revision.author, 'w:date': revision.date }\n const lastParagraph = body.children.filter(isEl).findLast((c) => c.name === 'w:p')\n\n const visit = (node: El) => {\n node.children = node.children.map((child) => {\n if (!isEl(child)) return child\n if (child.name === 'w:r') return TRACKED.has(node.name) ? child : el('w:ins', attrs, [child])\n if (TRACKED.has(child.name)) return child\n if (child.name === 'w:tr') {\n markRow(child, attrs)\n return child\n }\n visit(child)\n if (child.name === 'w:p' && (covered || child !== lastParagraph)) markParagraph(child, attrs)\n return child\n })\n }\n visit(body)\n pkg.setXml(main, root)\n return pkg.write()\n}\n\n/** `w:pPr/w:rPr/w:ins`: the paragraph mark is inserted (`w:ins` comes first in `CT_ParaRPr`). */\nfunction markParagraph(p: El, attrs: Record<string, string>) {\n let pPr = kid(p, 'w:pPr')\n if (!pPr) p.children.unshift((pPr = el('w:pPr')))\n let rPr = kid(pPr, 'w:rPr')\n if (!rPr) {\n rPr = el('w:rPr')\n // Before `w:sectPr` and `w:pPrChange`, which close `CT_PPr`.\n const at = pPr.children.findIndex(\n (c) => isEl(c) && (c.name === 'w:sectPr' || c.name === 'w:pPrChange')\n )\n pPr.children.splice(at < 0 ? pPr.children.length : at, 0, rPr)\n }\n if (!kid(rPr, 'w:ins')) rPr.children.unshift(el('w:ins', attrs))\n}\n\n/** `w:trPr/w:ins`: the table row is inserted (after the row properties, before `w:trPrChange`). */\nfunction markRow(tr: El, attrs: Record<string, string>) {\n let trPr = kid(tr, 'w:trPr')\n if (!trPr) {\n trPr = el('w:trPr')\n const after = tr.children.findIndex((c) => isEl(c) && c.name === 'w:tblPrEx')\n tr.children.splice(after + 1, 0, trPr)\n }\n if (kid(trPr, 'w:ins')) return\n const at = trPr.children.findIndex((c) => isEl(c) && c.name === 'w:trPrChange')\n trPr.children.splice(at < 0 ? trPr.children.length : at, 0, el('w:ins', attrs))\n}\n","/**\n * Where a document's styles have drifted from its house template: style definitions compared as\n * formatting (what they look like), not as bytes — revision ids, UI flags and the numbering ids a\n * merge renumbers are left out, and a style's numbering is compared by its list levels.\n */\nimport { Pkg, RT } from './pkg'\nimport { isEl, kid, kids, serialize, val, walk, clone, type El } from './xml'\n\nexport interface StyleDifference {\n styleId: string\n name: string\n /** `changed`: defined differently; `missing`: the template defines it, the document does not. */\n kind: 'changed' | 'missing'\n}\nexport interface StyleDivergence {\n styles: StyleDifference[]\n /** The documents' default paragraph and run formatting differ. */\n docDefaults: boolean\n}\n\n/** Presentation-only parts of a style definition: what the style pane shows, not the text. */\nconst UI_ONLY = new Set([\n 'w:uiPriority',\n 'w:semiHidden',\n 'w:unhideWhenUsed',\n 'w:qFormat',\n 'w:locked',\n 'w:personal',\n 'w:personalCompose',\n 'w:personalReply',\n 'w:rsid',\n 'w:autoRedefine',\n 'w:hidden',\n 'w:aliases',\n])\n\nfunction numberingSignature(numbering: El | undefined, numId: string): string {\n if (!numbering) return `num:${numId}`\n const num = kids(numbering, 'w:num').find((n) => n.attrs['w:numId'] === numId)\n const abs =\n num &&\n kids(numbering, 'w:abstractNum').find(\n (a) => a.attrs['w:abstractNumId'] === val(num, 'w:abstractNumId')\n )\n if (!abs) return `num:${numId}`\n const levels = kids(abs, 'w:lvl').map((l) => {\n const c = clone(l)\n c.children = c.children.filter(\n (x) => !(isEl(x) && (x.name === 'w:lvlPicBulletId' || x.name === 'w:pStyle'))\n )\n return canonical(c)\n })\n return levels.join('|')\n}\n\nfunction canonical(e: El): string {\n const c = clone(e)\n for (const x of walk(c)) {\n for (const k of Object.keys(x.attrs))\n if (/^w:rsid/.test(k) || k.startsWith('xmlns')) delete x.attrs[k]\n x.attrs = Object.fromEntries(Object.entries(x.attrs).sort(([a], [b]) => a.localeCompare(b)))\n x.children = x.children.filter((k) => isEl(k) && !UI_ONLY.has(k.name))\n }\n return serialize(c).replace(/^<\\?xml[^>]*>\\n/, '')\n}\n\nfunction styleSignature(style: El, numbering: El | undefined): string {\n const c = clone(style)\n for (const x of walk(c))\n if (x.name === 'w:numId') x.attrs['w:val'] = numberingSignature(numbering, x.attrs['w:val'])\n delete c.attrs['w:styleId']\n return canonical(c)\n}\n\nfunction partsOf(bytes: Uint8Array) {\n const pkg = Pkg.read(bytes)\n const stylesPart = pkg.partOf(pkg.main, RT.styles)\n const numberingPart = pkg.partOf(pkg.main, RT.numbering)\n return {\n styles: stylesPart ? pkg.xml(stylesPart) : undefined,\n numbering: numberingPart ? pkg.xml(numberingPart) : undefined,\n }\n}\n\nexport function styleDivergence(document: Uint8Array, template: Uint8Array): StyleDivergence {\n const d = partsOf(document)\n const t = partsOf(template)\n const result: StyleDivergence = { styles: [], docDefaults: false }\n if (!t.styles) return result\n const dStyles = d.styles ? kids(d.styles, 'w:style') : []\n const byId = new Map(dStyles.map((s) => [s.attrs['w:styleId'], s]))\n const byName = new Map(\n dStyles.map((s) => [`${s.attrs['w:type']}:${(val(s, 'w:name') ?? '').toLowerCase()}`, s])\n )\n for (const s of kids(t.styles, 'w:style')) {\n const id = s.attrs['w:styleId']\n const name = val(s, 'w:name') ?? id\n const mine = byId.get(id) ?? byName.get(`${s.attrs['w:type']}:${name.toLowerCase()}`)\n if (!mine) result.styles.push({ styleId: id, name, kind: 'missing' })\n else if (styleSignature(mine, d.numbering) !== styleSignature(s, t.numbering))\n result.styles.push({ styleId: mine.attrs['w:styleId'], name, kind: 'changed' })\n }\n const dd = d.styles && kid(d.styles, 'w:docDefaults')\n const td = kid(t.styles, 'w:docDefaults')\n result.docDefaults = (dd ? canonical(dd) : '') !== (td ? canonical(td) : '')\n return result\n}\n\n/** The template a document records as attached (`w:attachedTemplate`), by file name. */\nexport function attachedTemplateOf(document: Uint8Array): string | undefined {\n const pkg = Pkg.read(document)\n const settings = pkg.partOf(pkg.main, RT.settings)\n const root = settings ? pkg.xml(settings) : undefined\n const id = root && kid(root, 'w:attachedTemplate')?.attrs['r:id']\n const rel = id ? pkg.rels(settings!).find((r) => r.id === id) : undefined\n if (!rel) return undefined\n const target = decodeURI(rel.target)\n return target.slice(Math.max(target.lastIndexOf('/'), target.lastIndexOf('\\\\')) + 1)\n}\n","/**\n * ARBI's built-in house template: a UK legal drafting template, as a `.dotx`.\n *\n * The style set follows the convention of UK legal precedents (Practical Law's standard documents\n * and the firm templates built on the same scheme): numbered clause levels \"Level 1\"-\"Level 5\"\n * (1 / 1.1 / (a) / (i) / (A)) driven by ONE multilevel list whose levels are linked to the styles,\n * so Enter continues the numbering and inserting a clause renumbers the rest; \"Body 1\"-\"Body 5\"\n * for unnumbered text aligned with each level's text; \"Parties\" ((1), (2)) and \"Background\"\n * ((A), (B)) for the front of an agreement; \"Definition\" for the definitions clause; \"Schedule\" and\n * \"Part\" headings (SCHEDULE 1 / PART 1, Part restarting in each Schedule); Word's built-in\n * \"Title\", \"Heading 1-3\", \"Block Text\" (aliased \"Block Quote\"), \"Quote\", note, header and footer\n * styles.\n *\n * It carries a glossary of Quick Parts: UK execution blocks (Companies Act 2006 ss.43-44 and 46,\n * the LLP Regulations 2009 forms, an individual's deed) and the usual document markings. A neutral\n * placeholder letterhead and a DRAFT watermark are optional, as examples of page furniture.\n */\nimport { strToU8, zipSync, zlibSync } from 'fflate'\nimport { CT, RT } from './pkg'\n\nconst W_DECL =\n 'xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"'\nconst VML_DECL =\n 'xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\"'\nconst DRAWING_DECL =\n 'xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"'\nconst XML = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n'\n\nconst esc = (s: string) =>\n s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;')\n\n/** Twips per level of indent: the half-inch steps of a UK precedent. */\nconst STEP = 720\n\n// ── Styles ────────────────────────────────────────────────────────────────────────────────────────\n\ninterface StyleSpec {\n id: string\n name: string\n type?: 'paragraph' | 'character' | 'table' | 'numbering'\n basedOn?: string\n next?: string\n link?: string\n aliases?: string\n pPr?: string\n rPr?: string\n extra?: string\n isDefault?: boolean\n custom?: boolean\n qFormat?: boolean\n uiPriority?: number\n}\n\nfunction style(s: StyleSpec): string {\n const type = s.type ?? 'paragraph'\n return [\n `<w:style w:type=\"${type}\"`,\n s.isDefault ? ' w:default=\"1\"' : '',\n s.custom ? ' w:customStyle=\"1\"' : '',\n ` w:styleId=\"${s.id}\">`,\n `<w:name w:val=\"${esc(s.name)}\"/>`,\n s.aliases ? `<w:aliases w:val=\"${esc(s.aliases)}\"/>` : '',\n s.basedOn ? `<w:basedOn w:val=\"${s.basedOn}\"/>` : '',\n s.next ? `<w:next w:val=\"${s.next}\"/>` : '',\n s.link ? `<w:link w:val=\"${s.link}\"/>` : '',\n s.uiPriority !== undefined ? `<w:uiPriority w:val=\"${s.uiPriority}\"/>` : '',\n s.qFormat ? '<w:qFormat/>' : '',\n s.extra ?? '',\n s.pPr ? `<w:pPr>${s.pPr}</w:pPr>` : '',\n s.rPr ? `<w:rPr>${s.rPr}</w:rPr>` : '',\n '</w:style>',\n ].join('')\n}\n\nconst ind = (left: number, hanging = 0) =>\n `<w:ind w:left=\"${left}\"${hanging ? ` w:hanging=\"${hanging}\"` : ''}/>`\nconst numPr = (numId: number, ilvl = 0) =>\n `<w:numPr>${ilvl ? `<w:ilvl w:val=\"${ilvl}\"/>` : ''}<w:numId w:val=\"${numId}\"/></w:numPr>`\n\n/** numIds of the template's lists. */\nexport const LEGAL_NUM = { clauses: 1, parties: 2, background: 3, schedules: 4 } as const\n\n/** Text indent of each clause level: 1 and 1.1 hang their number at the margin. */\nconst LEVEL_TEXT = [STEP, STEP, 2 * STEP, 3 * STEP, 4 * STEP]\n\nconst LEGAL_STYLES: readonly StyleSpec[] = [\n { id: 'Normal', name: 'Normal', isDefault: true, qFormat: true, uiPriority: 0 },\n {\n id: 'DefaultParagraphFont',\n name: 'Default Paragraph Font',\n type: 'character',\n isDefault: true,\n uiPriority: 1,\n extra: '<w:semiHidden/><w:unhideWhenUsed/>',\n },\n {\n id: 'TableNormal',\n name: 'Normal Table',\n type: 'table',\n isDefault: true,\n uiPriority: 99,\n extra:\n '<w:semiHidden/><w:unhideWhenUsed/><w:tblPr><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblCellMar><w:top w:w=\"0\" w:type=\"dxa\"/><w:left w:w=\"108\" w:type=\"dxa\"/><w:bottom w:w=\"0\" w:type=\"dxa\"/><w:right w:w=\"108\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr>',\n },\n {\n id: 'NoList',\n name: 'No List',\n type: 'numbering',\n isDefault: true,\n uiPriority: 99,\n extra: '<w:semiHidden/><w:unhideWhenUsed/>',\n },\n {\n id: 'Title',\n name: 'Title',\n next: 'Normal',\n qFormat: true,\n uiPriority: 10,\n pPr: '<w:keepNext/><w:spacing w:after=\"360\"/><w:jc w:val=\"center\"/>',\n rPr: '<w:b/><w:caps/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/>',\n },\n ...[1, 2, 3].map((n): StyleSpec => ({\n id: `Heading${n}`,\n name: `heading ${n}`,\n basedOn: 'Normal',\n next: 'Normal',\n qFormat: true,\n uiPriority: 9,\n pPr: `<w:keepNext/><w:spacing w:before=\"240\"/><w:outlineLvl w:val=\"${n - 1}\"/>`,\n rPr: `<w:b/>${n === 1 ? '<w:caps/>' : ''}${n === 3 ? '<w:i/>' : ''}`,\n })),\n {\n id: 'Parties',\n name: 'Parties',\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n pPr: `${numPr(LEGAL_NUM.parties)}${ind(STEP, STEP)}`,\n },\n {\n id: 'Background',\n name: 'Background',\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n pPr: `${numPr(LEGAL_NUM.background)}${ind(STEP, STEP)}`,\n },\n ...[1, 2, 3, 4, 5].map((n): StyleSpec => ({\n id: `Level${n}`,\n name: `Level ${n}`,\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n next: `Level${n}`,\n pPr: `${numPr(LEGAL_NUM.clauses, n - 1)}${n === 1 ? '<w:keepNext/>' : ''}${ind(\n LEVEL_TEXT[n - 1],\n STEP\n )}${n === 1 ? '<w:outlineLvl w:val=\"0\"/>' : ''}`,\n rPr: n === 1 ? '<w:b/><w:caps/>' : undefined,\n })),\n ...[1, 2, 3, 4, 5].map((n): StyleSpec => ({\n id: `Body${n}`,\n name: `Body ${n}`,\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n pPr: ind(LEVEL_TEXT[n - 1]),\n })),\n {\n id: 'Definition',\n name: 'Definition',\n basedOn: 'Normal',\n custom: true,\n qFormat: true,\n pPr: ind(STEP),\n },\n {\n id: 'Schedule',\n name: 'Schedule',\n basedOn: 'Normal',\n next: 'Normal',\n custom: true,\n qFormat: true,\n pPr: `${numPr(LEGAL_NUM.schedules)}<w:keepNext/><w:pageBreakBefore/><w:jc w:val=\"center\"/><w:outlineLvl w:val=\"0\"/>`,\n rPr: '<w:b/><w:caps/>',\n },\n {\n id: 'Part',\n name: 'Part',\n basedOn: 'Normal',\n next: 'Normal',\n custom: true,\n qFormat: true,\n pPr: `${numPr(LEGAL_NUM.schedules, 1)}<w:keepNext/><w:jc w:val=\"center\"/><w:outlineLvl w:val=\"1\"/>`,\n rPr: '<w:b/>',\n },\n {\n id: 'BlockText',\n name: 'Block Text',\n aliases: 'Block Quote',\n basedOn: 'Normal',\n uiPriority: 99,\n pPr: `<w:ind w:left=\"${2 * STEP}\" w:right=\"${2 * STEP}\"/>`,\n },\n {\n id: 'Quote',\n name: 'Quote',\n basedOn: 'Normal',\n next: 'Normal',\n qFormat: true,\n uiPriority: 29,\n pPr: `<w:ind w:left=\"${STEP}\" w:right=\"${STEP}\"/>`,\n rPr: '<w:i/>',\n },\n {\n id: 'Marking',\n name: 'Document Marking',\n basedOn: 'Normal',\n next: 'Normal',\n custom: true,\n pPr: '<w:jc w:val=\"right\"/>',\n rPr: '<w:b/><w:caps/>',\n },\n {\n id: 'FootnoteText',\n name: 'footnote text',\n basedOn: 'Normal',\n link: 'FootnoteTextChar',\n uiPriority: 99,\n pPr: '<w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/>',\n rPr: '<w:sz w:val=\"18\"/><w:szCs w:val=\"18\"/>',\n },\n {\n id: 'FootnoteTextChar',\n name: 'Footnote Text Char',\n type: 'character',\n basedOn: 'DefaultParagraphFont',\n link: 'FootnoteText',\n custom: true,\n uiPriority: 99,\n rPr: '<w:sz w:val=\"18\"/><w:szCs w:val=\"18\"/>',\n },\n {\n id: 'FootnoteReference',\n name: 'footnote reference',\n type: 'character',\n basedOn: 'DefaultParagraphFont',\n uiPriority: 99,\n rPr: '<w:vertAlign w:val=\"superscript\"/>',\n },\n {\n id: 'EndnoteText',\n name: 'endnote text',\n basedOn: 'FootnoteText',\n uiPriority: 99,\n },\n {\n id: 'EndnoteReference',\n name: 'endnote reference',\n type: 'character',\n basedOn: 'DefaultParagraphFont',\n uiPriority: 99,\n rPr: '<w:vertAlign w:val=\"superscript\"/>',\n },\n {\n id: 'Header',\n name: 'header',\n basedOn: 'Normal',\n uiPriority: 99,\n pPr: `<w:tabs><w:tab w:val=\"center\" w:pos=\"4513\"/><w:tab w:val=\"right\" w:pos=\"9026\"/></w:tabs><w:spacing w:after=\"0\"/>`,\n rPr: '<w:sz w:val=\"16\"/><w:szCs w:val=\"16\"/>',\n },\n {\n id: 'Footer',\n name: 'footer',\n basedOn: 'Header',\n uiPriority: 99,\n },\n {\n id: 'Hyperlink',\n name: 'Hyperlink',\n type: 'character',\n basedOn: 'DefaultParagraphFont',\n uiPriority: 99,\n rPr: '<w:color w:val=\"0563C1\" w:themeColor=\"hyperlink\"/><w:u w:val=\"single\"/>',\n },\n {\n id: 'TableGrid',\n name: 'Table Grid',\n type: 'table',\n basedOn: 'TableNormal',\n uiPriority: 39,\n pPr: '<w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/>',\n extra:\n '<w:tblPr><w:tblBorders><w:top w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:left w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:bottom w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:right w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:insideH w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/><w:insideV w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/></w:tblBorders></w:tblPr>',\n },\n]\n\nconst DOC_DEFAULTS =\n '<w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:asciiTheme=\"minorHAnsi\" w:eastAsiaTheme=\"minorHAnsi\" w:hAnsiTheme=\"minorHAnsi\" w:cstheme=\"minorBidi\"/><w:sz w:val=\"21\"/><w:szCs w:val=\"21\"/><w:lang w:val=\"en-GB\" w:eastAsia=\"en-US\" w:bidi=\"ar-SA\"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after=\"240\" w:line=\"288\" w:lineRule=\"auto\"/><w:jc w:val=\"both\"/></w:pPr></w:pPrDefault></w:docDefaults>'\nconst LATENT =\n '<w:latentStyles w:defLockedState=\"0\" w:defUIPriority=\"99\" w:defSemiHidden=\"0\" w:defUnhideWhenUsed=\"0\" w:defQFormat=\"0\" w:count=\"376\"><w:lsdException w:name=\"Normal\" w:uiPriority=\"0\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 1\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 2\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"heading 3\" w:uiPriority=\"9\" w:qFormat=\"1\"/><w:lsdException w:name=\"Title\" w:uiPriority=\"10\" w:qFormat=\"1\"/><w:lsdException w:name=\"Quote\" w:uiPriority=\"29\" w:qFormat=\"1\"/></w:latentStyles>'\n\nfunction legalStylesXml(): string {\n return `${XML}<w:styles ${W_DECL}>${DOC_DEFAULTS}${LATENT}${LEGAL_STYLES.map(style).join('')}</w:styles>`\n}\n\n// ── Numbering ─────────────────────────────────────────────────────────────────────────────────────\n\ninterface LevelSpec {\n fmt: string\n text: string\n pStyle?: string\n left: number\n hanging?: number\n start?: number\n jc?: string\n rPr?: string\n}\nfunction lvl(i: number, l: LevelSpec): string {\n return `<w:lvl w:ilvl=\"${i}\"><w:start w:val=\"${l.start ?? 1}\"/><w:numFmt w:val=\"${l.fmt}\"/>${\n l.pStyle ? `<w:pStyle w:val=\"${l.pStyle}\"/>` : ''\n }<w:lvlText w:val=\"${esc(l.text)}\"/><w:lvlJc w:val=\"${l.jc ?? 'left'}\"/><w:pPr>${ind(\n l.left,\n l.hanging ?? 0\n )}</w:pPr>${l.rPr ? `<w:rPr>${l.rPr}</w:rPr>` : ''}</w:lvl>`\n}\nfunction abstractNum(id: number, nsid: string, name: string, levels: LevelSpec[]): string {\n return `<w:abstractNum w:abstractNumId=\"${id}\"><w:nsid w:val=\"${nsid}\"/><w:multiLevelType w:val=\"${\n levels.length > 1 ? 'multilevel' : 'singleLevel'\n }\"/><w:name w:val=\"${esc(name)}\"/>${levels.map((l, i) => lvl(i, l)).join('')}</w:abstractNum>`\n}\n\n/** The clause numbering: 1. / 1.1 / (a) / (i) / (A), each level linked to its \"Level n\" style. */\nconst CLAUSE_LEVELS: LevelSpec[] = [\n { fmt: 'decimal', text: '%1.', pStyle: 'Level1', left: STEP, hanging: STEP, rPr: '<w:b/>' },\n {\n fmt: 'decimal',\n text: '%1.%2',\n pStyle: 'Level2',\n left: STEP,\n hanging: STEP,\n rPr: '<w:b w:val=\"0\"/><w:caps w:val=\"0\"/>',\n },\n { fmt: 'lowerLetter', text: '(%3)', pStyle: 'Level3', left: 2 * STEP, hanging: STEP },\n { fmt: 'lowerRoman', text: '(%4)', pStyle: 'Level4', left: 3 * STEP, hanging: STEP },\n { fmt: 'upperLetter', text: '(%5)', pStyle: 'Level5', left: 4 * STEP, hanging: STEP },\n]\n\nfunction legalNumberingXml(): string {\n const abstracts = [\n abstractNum(0, '4C2A1B01', 'Legal clauses', CLAUSE_LEVELS),\n abstractNum(1, '4C2A1B02', 'Parties', [\n { fmt: 'decimal', text: '(%1)', pStyle: 'Parties', left: STEP, hanging: STEP },\n ]),\n abstractNum(2, '4C2A1B03', 'Background', [\n { fmt: 'upperLetter', text: '(%1)', pStyle: 'Background', left: STEP, hanging: STEP },\n ]),\n abstractNum(3, '4C2A1B04', 'Schedules', [\n { fmt: 'decimal', text: 'Schedule %1', pStyle: 'Schedule', left: 0, jc: 'center' },\n { fmt: 'decimal', text: 'Part %2', pStyle: 'Part', left: 0, jc: 'center' },\n ]),\n ]\n const nums = [1, 2, 3, 4].map(\n (n) => `<w:num w:numId=\"${n}\"><w:abstractNumId w:val=\"${n - 1}\"/></w:num>`\n )\n return `${XML}<w:numbering ${W_DECL}>${abstracts.join('')}${nums.join('')}</w:numbering>`\n}\n\n// ── Theme, fonts, settings ────────────────────────────────────────────────────────────────────────\n\nconst THEME_COLORS: [string, string][] = [\n ['dk2', '1F2937'],\n ['lt2', 'E7E6E6'],\n ['accent1', '1F3864'],\n ['accent2', '7B2C2C'],\n ['accent3', '2E5A2E'],\n ['accent4', '7F6000'],\n ['accent5', '2F5597'],\n ['accent6', '595959'],\n ['hlink', '0563C1'],\n ['folHlink', '954F72'],\n]\nexport function themeXml(major = 'Arial', minor = 'Arial'): string {\n const font = (f: string) =>\n `<a:latin typeface=\"${esc(f)}\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/>`\n return `${XML}<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"ARBI Legal\"><a:themeElements><a:clrScheme name=\"ARBI Legal\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1>${THEME_COLORS.map(\n ([k, v]) => `<a:${k}><a:srgbClr val=\"${v}\"/></a:${k}>`\n ).join(\n ''\n )}</a:clrScheme><a:fontScheme name=\"ARBI Legal\"><a:majorFont>${font(major)}</a:majorFont><a:minorFont>${font(\n minor\n )}</a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln><a:ln w=\"12700\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln><a:ln w=\"19050\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements></a:theme>`\n}\n\nconst FONT_TABLE = `${XML}<w:fonts ${W_DECL}><w:font w:name=\"Arial\"><w:panose1 w:val=\"020B0604020202020204\"/><w:charset w:val=\"00\"/><w:family w:val=\"swiss\"/><w:pitch w:val=\"variable\"/></w:font><w:font w:name=\"Times New Roman\"><w:panose1 w:val=\"02020603050405020304\"/><w:charset w:val=\"00\"/><w:family w:val=\"roman\"/><w:pitch w:val=\"variable\"/></w:font></w:fonts>`\n\nfunction settingsXml(o: { evenAndOdd?: boolean; template?: boolean }): string {\n return `${XML}<w:settings ${W_DECL}><w:zoom w:percent=\"100\"/>${\n o.template ? '' : ''\n }<w:defaultTabStop w:val=\"${STEP}\"/>${\n o.evenAndOdd ? '<w:evenAndOddHeaders/>' : ''\n }<w:characterSpacingControl w:val=\"doNotCompress\"/><w:footnotePr><w:footnote w:id=\"-1\"/><w:footnote w:id=\"0\"/></w:footnotePr><w:endnotePr><w:endnote w:id=\"-1\"/><w:endnote w:id=\"0\"/></w:endnotePr><w:compat><w:compatSetting w:name=\"compatibilityMode\" w:uri=\"http://schemas.microsoft.com/office/word\" w:val=\"15\"/></w:compat><w:themeFontLang w:val=\"en-GB\"/></w:settings>`\n}\n\nconst NOTES = (kind: 'footnote' | 'endnote') =>\n `${XML}<w:${kind}s ${W_DECL}><w:${kind} w:type=\"separator\" w:id=\"-1\"><w:p><w:pPr><w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:r><w:separator/></w:r></w:p></w:${kind}><w:${kind} w:type=\"continuationSeparator\" w:id=\"0\"><w:p><w:pPr><w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:r><w:continuationSeparator/></w:r></w:p></w:${kind}></w:${kind}s>`\n\n// ── Body helpers ──────────────────────────────────────────────────────────────────────────────────\n\nconst run = (text: string, rPr = '') =>\n `<w:r>${rPr ? `<w:rPr>${rPr}</w:rPr>` : ''}<w:t xml:space=\"preserve\">${esc(text)}</w:t></w:r>`\nexport const para = (text: string, styleId?: string, extra = '') =>\n `<w:p>${styleId || extra ? `<w:pPr>${styleId ? `<w:pStyle w:val=\"${styleId}\"/>` : ''}${extra}</w:pPr>` : ''}${\n text ? run(text) : ''\n }</w:p>`\nconst field = (code: string, shown: string) =>\n `<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:instrText xml:space=\"preserve\"> ${code} </w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>${run(\n shown\n )}<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>`\n\n/** A two-column, borderless execution table: who signs on the left, signature lines on the right. */\nfunction executionTable(rows: [string, string][]): string {\n const cell = (xml: string, w: number) =>\n `<w:tc><w:tcPr><w:tcW w:w=\"${w}\" w:type=\"dxa\"/></w:tcPr>${xml}</w:tc>`\n const lines = (s: string) =>\n s\n .split('\\n')\n .map((t) => `<w:p><w:pPr><w:jc w:val=\"left\"/></w:pPr>${run(t)}</w:p>`)\n .join('')\n return `<w:tbl><w:tblPr><w:tblW w:w=\"9026\" w:type=\"dxa\"/><w:tblLook w:val=\"0000\" w:firstRow=\"0\" w:lastRow=\"0\" w:firstColumn=\"0\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"0\"/></w:tblPr><w:tblGrid><w:gridCol w:w=\"4513\"/><w:gridCol w:w=\"4513\"/></w:tblGrid>${rows\n .map(([l, r]) => `<w:tr>${cell(lines(l), 4513)}${cell(lines(r), 4513)}</w:tr>`)\n .join('')}</w:tbl><w:p/>`\n}\n\nconst SIGN = '……………………………………'\n\n/** The front of an agreement, offered as the \"Agreement\" Quick Part. */\nconst AGREEMENT_BODY = [\n para('[Title of agreement]', 'Title'),\n para('This agreement is dated [DATE]'),\n para('Parties', 'Heading1'),\n para(\n '[NAME] incorporated and registered in England and Wales with company number [NUMBER] whose registered office is at [ADDRESS]',\n 'Parties'\n ),\n para(\n '[NAME] incorporated and registered in England and Wales with company number [NUMBER] whose registered office is at [ADDRESS]',\n 'Parties'\n ),\n para('Background', 'Heading1'),\n para('[Recital]', 'Background'),\n para('Agreed terms', 'Heading1'),\n para('Interpretation', 'Level1'),\n para('The following definitions apply in this agreement.', 'Level2'),\n para('[Term]: [definition].', 'Definition'),\n para('[Clause]', 'Level1'),\n para('[Sub-clause]', 'Level2'),\n].join('')\n\nexport interface BuildingBlockSpec {\n name: string\n category: string\n description: string\n body: string\n}\n\n/** Generic UK execution blocks and document markings: placeholders only, no names. */\nexport const LEGAL_BUILDING_BLOCKS: readonly BuildingBlockSpec[] = [\n {\n name: 'Individual (signed)',\n category: 'Signature blocks',\n description: 'An individual signing a simple contract.',\n body: executionTable([['Signed by [NAME]', `${SIGN}\\n[Signature]`]]),\n },\n {\n name: 'Company: director and secretary',\n category: 'Signature blocks',\n description:\n 'A company signing by a director and its secretary (Companies Act 2006, s.44(2)(a)).',\n body: executionTable([\n [\n 'Signed by [NAME], a director, for and on behalf of [COMPANY NAME] LIMITED',\n `${SIGN}\\nDirector`,\n ],\n [\n 'Signed by [NAME], the secretary, for and on behalf of [COMPANY NAME] LIMITED',\n `${SIGN}\\nSecretary`,\n ],\n ]),\n },\n {\n name: 'Company: two directors',\n category: 'Signature blocks',\n description: 'A company signing by two directors (Companies Act 2006, s.44(2)(a)).',\n body: executionTable([\n [\n 'Signed by [NAME], a director, for and on behalf of [COMPANY NAME] LIMITED',\n `${SIGN}\\nDirector`,\n ],\n [\n 'Signed by [NAME], a director, for and on behalf of [COMPANY NAME] LIMITED',\n `${SIGN}\\nDirector`,\n ],\n ]),\n },\n {\n name: 'Company deed: director and witness',\n category: 'Signature blocks',\n description:\n 'A company executing a deed by one director in the presence of a witness (Companies Act 2006, ss.44(2)(b) and 46).',\n body: executionTable([\n [\n 'Executed as a deed by [COMPANY NAME] LIMITED acting by [NAME], a director, in the presence of:',\n `${SIGN}\\nDirector`,\n ],\n [\n 'Witness signature\\nWitness name\\nWitness address\\nWitness occupation',\n `${SIGN}\\n${SIGN}\\n${SIGN}\\n${SIGN}`,\n ],\n ]),\n },\n {\n name: 'LLP: two members',\n category: 'Signature blocks',\n description:\n 'An LLP signing by two members (Limited Liability Partnerships (Application of Companies Act 2006) Regulations 2009, reg.4).',\n body: executionTable([\n ['Signed by [NAME], a member, for and on behalf of [LLP NAME] LLP', `${SIGN}\\nMember`],\n ['Signed by [NAME], a member, for and on behalf of [LLP NAME] LLP', `${SIGN}\\nMember`],\n ]),\n },\n {\n name: 'Individual deed with witness',\n category: 'Signature blocks',\n description: 'An individual executing a deed in the presence of a witness.',\n body: executionTable([\n ['Signed as a deed by [NAME] in the presence of:', `${SIGN}\\n[Signature]`],\n [\n 'Witness signature\\nWitness name\\nWitness address\\nWitness occupation',\n `${SIGN}\\n${SIGN}\\n${SIGN}\\n${SIGN}`,\n ],\n ]),\n },\n {\n name: 'Agreement',\n category: 'Documents',\n description:\n 'The front of an agreement: title, date, parties, background and the first clauses.',\n body: AGREEMENT_BODY,\n },\n ...[\n [\n 'Without prejudice save as to costs',\n 'Settlement correspondence that may be shown to the court on costs.',\n ],\n ['Privileged & confidential', 'Legally privileged communication.'],\n ['Subject to contract', 'Negotiations not intended to be binding.'],\n ['Draft for discussion', 'A draft that is not final.'],\n ].map(([text, description]): BuildingBlockSpec => ({\n name: text,\n category: 'Headings',\n description,\n body: para(text, 'Marking'),\n })),\n]\n\n/** The glossary part's XML for `blocks`, in Word's `w:docParts` shape. */\nfunction glossaryXml(blocks: readonly BuildingBlockSpec[]): string {\n const guid = (i: number) =>\n `{4C2A1B${String(i).padStart(2, '0')}-0000-4000-8000-${String(i).padStart(12, '0')}}`\n return `${XML}<w:glossaryDocument ${W_DECL}><w:docParts>${blocks\n .map(\n (b, i) =>\n `<w:docPart><w:docPartPr><w:name w:val=\"${esc(b.name)}\"/><w:category><w:name w:val=\"${esc(\n b.category\n )}\"/><w:gallery w:val=\"docParts\"/></w:category><w:behaviors><w:behavior w:val=\"content\"/></w:behaviors><w:description w:val=\"${esc(\n b.description\n )}\"/><w:guid w:val=\"${guid(i + 1)}\"/></w:docPartPr><w:docPartBody>${b.body}</w:docPartBody></w:docPart>`\n )\n .join('')}</w:docParts></w:glossaryDocument>`\n}\n\n// ── Letterhead and watermark (optional examples) ──────────────────────────────────────────────────\n\n/** A 1-bit-free, 8-bit grey PNG of `w`×`h` filled with `grey` — a neutral logo placeholder. */\nexport function placeholderPng(w = 160, h = 48, grey = 0xd0): Uint8Array {\n const crcTable = Array.from({ length: 256 }, (_, n) => {\n let c = n\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1\n return c >>> 0\n })\n const crc = (bytes: Uint8Array) => {\n let c = 0xffffffff\n for (const b of bytes) c = crcTable[(c ^ b) & 0xff] ^ (c >>> 8)\n return (c ^ 0xffffffff) >>> 0\n }\n const u32 = (n: number) => [(n >>> 24) & 255, (n >>> 16) & 255, (n >>> 8) & 255, n & 255]\n const chunk = (type: string, data: Uint8Array) => {\n const body = new Uint8Array([...strToU8(type), ...data])\n return [...u32(data.length), ...body, ...u32(crc(body))]\n }\n const raw = new Uint8Array(h * (w + 1))\n for (let y = 0; y < h; y++) raw.fill(grey, y * (w + 1) + 1, (y + 1) * (w + 1))\n return new Uint8Array([\n 0x89,\n 0x50,\n 0x4e,\n 0x47,\n 0x0d,\n 0x0a,\n 0x1a,\n 0x0a,\n ...chunk('IHDR', new Uint8Array([...u32(w), ...u32(h), 8, 0, 0, 0, 0])),\n ...chunk('IDAT', zlibSync(raw)),\n ...chunk('IEND', new Uint8Array()),\n ])\n}\n\nfunction inlineImage(rId: string, cx: number, cy: number, id: number, name: string): string {\n return `<w:r><w:drawing><wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\"><wp:extent cx=\"${cx}\" cy=\"${cy}\"/><wp:docPr id=\"${id}\" name=\"${esc(\n name\n )}\" descr=\"${esc(name)}\"/><a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic><pic:nvPicPr><pic:cNvPr id=\"${id}\" name=\"${esc(\n name\n )}\"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed=\"${rId}\"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r>`\n}\n\n/** Word's watermark: a VML WordArt shape anchored in the header. */\nfunction watermarkXml(text: string): string {\n return `<w:p><w:pPr><w:pStyle w:val=\"Header\"/></w:pPr><w:r><w:pict><v:shapetype id=\"_x0000_t136\" coordsize=\"21600,21600\" o:spt=\"136\" adj=\"10800\" path=\"m@7,l@8,m@5,21600l@6,21600e\"><v:path textpathok=\"t\" o:connecttype=\"custom\"/><v:textpath on=\"t\" fitshape=\"t\"/><o:lock v:ext=\"edit\" text=\"t\" shapetype=\"t\"/></v:shapetype><v:shape id=\"PowerPlusWaterMarkObject1\" o:spid=\"_x0000_s1025\" type=\"#_x0000_t136\" style=\"position:absolute;margin-left:0;margin-top:0;width:412.4pt;height:164.95pt;rotation:315;z-index:-251657216;mso-position-horizontal:center;mso-position-horizontal-relative:margin;mso-position-vertical:center;mso-position-vertical-relative:margin\" o:allowincell=\"f\" fillcolor=\"silver\" stroked=\"f\"><v:fill opacity=\".5\"/><v:textpath style=\"font-family:&quot;Arial&quot;;font-size:1pt\" string=\"${esc(\n text\n )}\"/><w10:wrap anchorx=\"margin\" anchory=\"margin\"/></v:shape></w:pict></w:r></w:p>`\n}\n\nconst hdr = (kind: 'hdr' | 'ftr', body: string) =>\n `${XML}<w:${kind} ${W_DECL} ${VML_DECL} ${DRAWING_DECL}>${body}</w:${kind}>`\n\n// ── The package ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface LegalTemplateOptions {\n /** A neutral placeholder letterhead on the first page and a continuation header after it. */\n letterhead?: boolean\n /** A watermark (e.g. \"DRAFT\") in the page headers. */\n watermark?: string\n /** Include the Quick Parts glossary (default true). */\n buildingBlocks?: boolean\n /** Write a .docx instead of a .dotx (default false). */\n asDocument?: boolean\n /** The starting body of a new document (paragraph XML); default one empty paragraph. */\n body?: string\n}\n\nexport function defaultLegalTemplate(options: LegalTemplateOptions = {}): Uint8Array {\n const files: Record<string, Uint8Array> = {}\n const put = (name: string, xml: string) => (files[name] = strToU8(xml))\n const overrides: [string, string][] = [\n ['/word/document.xml', options.asDocument ? CT.document : CT.template],\n ['/word/styles.xml', CT.styles],\n ['/word/numbering.xml', CT.numbering],\n ['/word/settings.xml', CT.settings],\n ['/word/fontTable.xml', CT.fontTable],\n ['/word/theme/theme1.xml', CT.theme],\n [\n '/word/footnotes.xml',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml',\n ],\n [\n '/word/endnotes.xml',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml',\n ],\n ['/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml'],\n ]\n const rels: [string, string, string][] = [\n ['rId1', RT.styles, 'styles.xml'],\n ['rId2', RT.numbering, 'numbering.xml'],\n ['rId3', RT.settings, 'settings.xml'],\n ['rId4', RT.fontTable, 'fontTable.xml'],\n ['rId5', RT.theme, 'theme/theme1.xml'],\n ['rId6', `${RT.styles.replace('styles', 'footnotes')}`, 'footnotes.xml'],\n ['rId7', `${RT.styles.replace('styles', 'endnotes')}`, 'endnotes.xml'],\n ]\n put('word/styles.xml', legalStylesXml())\n put('word/numbering.xml', legalNumberingXml())\n put('word/fontTable.xml', FONT_TABLE)\n put('word/theme/theme1.xml', themeXml())\n put('word/footnotes.xml', NOTES('footnote'))\n put('word/endnotes.xml', NOTES('endnote'))\n\n // Page furniture: a footer with Page X of Y always; the letterhead and watermark if asked.\n const refs: string[] = []\n const footer = para('', 'Footer', '<w:jc w:val=\"center\"/>').replace(\n '</w:p>',\n `${run('Page ')}${field('PAGE', '1')}${run(' of ')}${field('NUMPAGES', '1')}</w:p>`\n )\n put('word/footer1.xml', hdr('ftr', footer))\n overrides.push(['/word/footer1.xml', CT.footer])\n rels.push(['rId20', RT.footer, 'footer1.xml'])\n refs.push('<w:footerReference w:type=\"default\" r:id=\"rId20\"/>')\n const mark = options.watermark ? watermarkXml(options.watermark) : ''\n if (options.letterhead) {\n files['word/media/letterhead-logo.png'] = placeholderPng()\n put(\n 'word/header1.xml',\n hdr(\n 'hdr',\n `${mark}<w:p><w:pPr><w:pStyle w:val=\"Header\"/><w:jc w:val=\"right\"/></w:pPr>${inlineImage(\n 'rIdLogo',\n 1828800,\n 548640,\n 1,\n 'Logo placeholder'\n )}</w:p>${para('[Firm name]', 'Header', '<w:jc w:val=\"right\"/>')}${para(\n '[Address line] · [Telephone] · [Email] · [Website]',\n 'Header',\n '<w:jc w:val=\"right\"/>'\n )}`\n )\n )\n put(\n 'word/_rels/header1.xml.rels',\n `${XML}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rIdLogo\" Type=\"${RT.image}\" Target=\"media/letterhead-logo.png\"/></Relationships>`\n )\n put(\n 'word/header2.xml',\n hdr('hdr', `${mark}${para('[Document title]', 'Header', '<w:jc w:val=\"right\"/>')}`)\n )\n overrides.push(['/word/header1.xml', CT.header], ['/word/header2.xml', CT.header])\n rels.push(['rId21', RT.header, 'header1.xml'], ['rId22', RT.header, 'header2.xml'])\n refs.unshift(\n '<w:headerReference w:type=\"first\" r:id=\"rId21\"/>',\n '<w:headerReference w:type=\"default\" r:id=\"rId22\"/>'\n )\n refs.push('<w:footerReference w:type=\"first\" r:id=\"rId20\"/>')\n } else if (mark) {\n put('word/header1.xml', hdr('hdr', mark))\n overrides.push(['/word/header1.xml', CT.header])\n rels.push(['rId21', RT.header, 'header1.xml'])\n refs.unshift('<w:headerReference w:type=\"default\" r:id=\"rId21\"/>')\n }\n const sectPr = `<w:sectPr>${refs.join('')}<w:pgSz w:w=\"11906\" w:h=\"16838\"/><w:pgMar w:top=\"1440\" w:right=\"1440\" w:bottom=\"1440\" w:left=\"1440\" w:header=\"708\" w:footer=\"708\" w:gutter=\"0\"/><w:cols w:space=\"708\"/>${\n options.letterhead ? '<w:titlePg/>' : ''\n }<w:docGrid w:linePitch=\"360\"/></w:sectPr>`\n put(\n 'word/document.xml',\n `${XML}<w:document ${W_DECL} ${VML_DECL} ${DRAWING_DECL}><w:body>${options.body ?? '<w:p/>'}${sectPr}</w:body></w:document>`\n )\n put('word/settings.xml', settingsXml({}))\n\n if (options.buildingBlocks !== false) {\n put('word/glossary/document.xml', glossaryXml(LEGAL_BUILDING_BLOCKS))\n put('word/glossary/styles.xml', legalStylesXml())\n put('word/glossary/numbering.xml', legalNumberingXml())\n put(\n 'word/glossary/_rels/document.xml.rels',\n `${XML}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"${RT.styles}\" Target=\"styles.xml\"/><Relationship Id=\"rId2\" Type=\"${RT.numbering}\" Target=\"numbering.xml\"/></Relationships>`\n )\n overrides.push(\n ['/word/glossary/document.xml', CT.glossary],\n ['/word/glossary/styles.xml', CT.styles],\n ['/word/glossary/numbering.xml', CT.numbering]\n )\n rels.push(['rId30', RT.glossary, 'glossary/document.xml'])\n }\n\n put(\n 'docProps/core.xml',\n `${XML}<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"><dc:title>ARBI legal template</dc:title></cp:coreProperties>`\n )\n put(\n 'word/_rels/document.xml.rels',\n `${XML}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">${rels\n .map(([id, type, target]) => `<Relationship Id=\"${id}\" Type=\"${type}\" Target=\"${target}\"/>`)\n .join('')}</Relationships>`\n )\n put(\n '_rels/.rels',\n `${XML}<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"${RT.officeDocument}\" Target=\"word/document.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/></Relationships>`\n )\n put(\n '[Content_Types].xml',\n `${XML}<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"${CT.rels}\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Default Extension=\"png\" ContentType=\"image/png\"/>${overrides\n .map(([p, t]) => `<Override PartName=\"${p}\" ContentType=\"${t}\"/>`)\n .join('')}</Types>`\n )\n return zipSync(files, { level: 6 })\n}\n","/**\n * Outline numbering linked to styles: in a legal template each level of one multilevel list names\n * its paragraph style (`w:lvl/w:pStyle`: Level 1 … Level 5). Word's Tab and Shift+Tab at the start\n * of such a paragraph move it to the next or previous level, which means changing its style.\n */\nimport { Pkg, RT } from './pkg'\nimport { kids, val } from './xml'\n\nexport interface LinkedLevel {\n /** The style one level down (Tab), if the list has one. */\n next?: string\n /** The style one level up (Shift+Tab). */\n previous?: string\n}\n\nexport function linkedLevelStyles(document: Uint8Array): Record<string, LinkedLevel> {\n const pkg = Pkg.read(document)\n const part = pkg.partOf(pkg.main, RT.numbering)\n const numbering = part ? pkg.xml(part) : undefined\n const out: Record<string, LinkedLevel> = {}\n for (const abs of numbering ? kids(numbering, 'w:abstractNum') : []) {\n const levels = kids(abs, 'w:lvl')\n .map((l) => ({ ilvl: Number(l.attrs['w:ilvl']), style: val(l, 'w:pStyle') }))\n .sort((a, b) => a.ilvl - b.ilvl)\n levels.forEach(({ style }, i) => {\n if (!style || out[style]) return\n const next = levels[i + 1]?.style\n const previous = levels[i - 1]?.style\n out[style] = { ...(next ? { next } : {}), ...(previous ? { previous } : {}) }\n })\n }\n return out\n}\n"]}