@ncukondo/reference-manager 0.24.1 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +44 -1
  2. package/dist/chunks/{SearchableMultiSelect-CKRfbnka.js → SearchableMultiSelect-B7qEWPDT.js} +2 -2
  3. package/dist/chunks/{SearchableMultiSelect-CKRfbnka.js.map → SearchableMultiSelect-B7qEWPDT.js.map} +1 -1
  4. package/dist/chunks/{action-menu-BCgv1m3v.js → action-menu-DD0RtNVD.js} +3 -3
  5. package/dist/chunks/{action-menu-BCgv1m3v.js.map → action-menu-DD0RtNVD.js.map} +1 -1
  6. package/dist/chunks/checker-7pzK2XSC.js +92 -0
  7. package/dist/chunks/checker-7pzK2XSC.js.map +1 -0
  8. package/dist/chunks/crossref-client-DGNz4PNW.js +52 -0
  9. package/dist/chunks/crossref-client-DGNz4PNW.js.map +1 -0
  10. package/dist/chunks/fix-interaction-BpfMLRNY.js +203 -0
  11. package/dist/chunks/fix-interaction-BpfMLRNY.js.map +1 -0
  12. package/dist/chunks/{index-C36Us_zC.js → index-CYEise6v.js} +4 -4
  13. package/dist/chunks/{index-C36Us_zC.js.map → index-CYEise6v.js.map} +1 -1
  14. package/dist/chunks/{index-DWAtvFtp.js → index-D2HsxXnK.js} +203 -21
  15. package/dist/chunks/index-D2HsxXnK.js.map +1 -0
  16. package/dist/chunks/{index-zafRwZEZ.js → index-PQkbePWV.js} +3 -3
  17. package/dist/chunks/index-PQkbePWV.js.map +1 -0
  18. package/dist/chunks/{index-JA964gjc.js → index-QTYx5RaF.js} +285 -27
  19. package/dist/chunks/index-QTYx5RaF.js.map +1 -0
  20. package/dist/chunks/{loader-CV71qNY2.js → loader-B-fte1uv.js} +19 -8
  21. package/dist/chunks/loader-B-fte1uv.js.map +1 -0
  22. package/dist/chunks/pubmed-client-J18fg3fG.js +51 -0
  23. package/dist/chunks/pubmed-client-J18fg3fG.js.map +1 -0
  24. package/dist/chunks/{reference-select-Bbl-roAS.js → reference-select-Qpgt9cbN.js} +3 -3
  25. package/dist/chunks/{reference-select-Bbl-roAS.js.map → reference-select-Qpgt9cbN.js.map} +1 -1
  26. package/dist/chunks/{style-select-BeAktUts.js → style-select-mEMoWbM2.js} +3 -3
  27. package/dist/chunks/{style-select-BeAktUts.js.map → style-select-mEMoWbM2.js.map} +1 -1
  28. package/dist/cli/commands/check.d.ts +42 -0
  29. package/dist/cli/commands/check.d.ts.map +1 -0
  30. package/dist/cli/commands/index.d.ts +2 -0
  31. package/dist/cli/commands/index.d.ts.map +1 -1
  32. package/dist/cli/index.d.ts.map +1 -1
  33. package/dist/cli/server-client.d.ts +2 -1
  34. package/dist/cli/server-client.d.ts.map +1 -1
  35. package/dist/cli.js +1 -1
  36. package/dist/config/defaults.d.ts.map +1 -1
  37. package/dist/config/env-override.d.ts.map +1 -1
  38. package/dist/config/key-parser.d.ts.map +1 -1
  39. package/dist/config/loader.d.ts.map +1 -1
  40. package/dist/config/schema.d.ts +3 -0
  41. package/dist/config/schema.d.ts.map +1 -1
  42. package/dist/features/check/checker.d.ts +18 -0
  43. package/dist/features/check/checker.d.ts.map +1 -0
  44. package/dist/features/check/crossref-client.d.ts +24 -0
  45. package/dist/features/check/crossref-client.d.ts.map +1 -0
  46. package/dist/features/check/fix-actions.d.ts +16 -0
  47. package/dist/features/check/fix-actions.d.ts.map +1 -0
  48. package/dist/features/check/fix-interaction.d.ts +11 -0
  49. package/dist/features/check/fix-interaction.d.ts.map +1 -0
  50. package/dist/features/check/pubmed-client.d.ts +20 -0
  51. package/dist/features/check/pubmed-client.d.ts.map +1 -0
  52. package/dist/features/check/types.d.ts +23 -0
  53. package/dist/features/check/types.d.ts.map +1 -0
  54. package/dist/features/operations/check.d.ts +28 -0
  55. package/dist/features/operations/check.d.ts.map +1 -0
  56. package/dist/features/operations/index.d.ts +1 -0
  57. package/dist/features/operations/index.d.ts.map +1 -1
  58. package/dist/features/operations/library-operations.d.ts +8 -0
  59. package/dist/features/operations/library-operations.d.ts.map +1 -1
  60. package/dist/features/operations/operations-library.d.ts +2 -0
  61. package/dist/features/operations/operations-library.d.ts.map +1 -1
  62. package/dist/index.js +1 -1
  63. package/dist/mcp/tools/check.d.ts +10 -0
  64. package/dist/mcp/tools/check.d.ts.map +1 -0
  65. package/dist/mcp/tools/index.d.ts.map +1 -1
  66. package/dist/server/index.d.ts.map +1 -1
  67. package/dist/server/routes/check.d.ts +4 -0
  68. package/dist/server/routes/check.d.ts.map +1 -0
  69. package/dist/server.js +3 -3
  70. package/package.json +1 -1
  71. package/dist/chunks/index-DWAtvFtp.js.map +0 -1
  72. package/dist/chunks/index-JA964gjc.js.map +0 -1
  73. package/dist/chunks/index-zafRwZEZ.js.map +0 -1
  74. package/dist/chunks/loader-CV71qNY2.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-D2HsxXnK.js","sources":["../../src/features/attachments/filename.ts","../../src/features/attachments/types.ts","../../src/utils/path.ts","../../src/features/attachments/directory.ts","../../src/features/attachments/directory-manager.ts","../../src/features/operations/attachments/add.ts","../../src/features/operations/fulltext-adapter/fulltext-adapter.ts","../../src/features/operations/fulltext/attach.ts","../../src/features/operations/fulltext/get.ts","../../node_modules/@ncukondo/academic-fulltext/dist/discovery/arxiv.js","../../node_modules/@ncukondo/academic-fulltext/dist/discovery/core.js","../../node_modules/@ncukondo/academic-fulltext/dist/discovery/ncbi-id-converter.js","../../node_modules/@ncukondo/academic-fulltext/dist/discovery/pmc.js","../../node_modules/@ncukondo/academic-fulltext/dist/discovery/unpaywall.js","../../node_modules/@ncukondo/academic-fulltext/dist/discovery/index.js","../../node_modules/@ncukondo/academic-fulltext/dist/download/downloader.js","../../node_modules/@ncukondo/academic-fulltext/dist/download/pmc-xml.js","../../node_modules/@ncukondo/academic-fulltext/dist/download/arxiv-html.js","../../node_modules/he/he.js","../../node_modules/node-html-parser/dist/nodes/node.js","../../node_modules/node-html-parser/dist/nodes/type.js","../../node_modules/node-html-parser/dist/nodes/comment.js","../../node_modules/domelementtype/lib/index.js","../../node_modules/domhandler/lib/node.js","../../node_modules/domhandler/lib/index.js","../../node_modules/entities/lib/generated/decode-data-html.js","../../node_modules/entities/lib/generated/decode-data-xml.js","../../node_modules/entities/lib/decode_codepoint.js","../../node_modules/entities/lib/decode.js","../../node_modules/entities/lib/generated/encode-html.js","../../node_modules/entities/lib/escape.js","../../node_modules/entities/lib/encode.js","../../node_modules/entities/lib/index.js","../../node_modules/dom-serializer/lib/foreignNames.js","../../node_modules/dom-serializer/lib/index.js","../../node_modules/domutils/lib/stringify.js","../../node_modules/domutils/lib/traversal.js","../../node_modules/domutils/lib/manipulation.js","../../node_modules/domutils/lib/querying.js","../../node_modules/domutils/lib/legacy.js","../../node_modules/domutils/lib/helpers.js","../../node_modules/domutils/lib/feeds.js","../../node_modules/domutils/lib/index.js","../../node_modules/boolbase/index.js","../../node_modules/css-what/lib/es/types.js","../../node_modules/css-what/lib/es/parse.js","../../node_modules/css-what/lib/es/stringify.js","../../node_modules/css-select/lib/sort.js","../../node_modules/css-select/lib/attributes.js","../../node_modules/nth-check/lib/parse.js","../../node_modules/nth-check/lib/compile.js","../../node_modules/nth-check/lib/index.js","../../node_modules/css-select/lib/pseudo-selectors/filters.js","../../node_modules/css-select/lib/pseudo-selectors/pseudos.js","../../node_modules/css-select/lib/pseudo-selectors/aliases.js","../../node_modules/css-select/lib/pseudo-selectors/subselects.js","../../node_modules/css-select/lib/pseudo-selectors/index.js","../../node_modules/css-select/lib/general.js","../../node_modules/css-select/lib/compile.js","../../node_modules/css-select/lib/index.js","../../node_modules/node-html-parser/dist/back.js","../../node_modules/node-html-parser/dist/matcher.js","../../node_modules/node-html-parser/dist/void-tag.js","../../node_modules/node-html-parser/dist/nodes/text.js","../../node_modules/node-html-parser/dist/nodes/html.js","../../node_modules/node-html-parser/dist/parse.js","../../node_modules/node-html-parser/dist/valid.js","../../node_modules/node-html-parser/dist/index.js","../../node_modules/@ncukondo/academic-fulltext/dist/convert/arxiv-html-parser.js","../../node_modules/fast-xml-parser/src/util.js","../../node_modules/fast-xml-parser/src/validator.js","../../node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js","../../node_modules/fast-xml-parser/src/xmlparser/xmlNode.js","../../node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js","../../node_modules/strnum/strnum.js","../../node_modules/fast-xml-parser/src/ignoreAttributes.js","../../node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js","../../node_modules/fast-xml-parser/src/xmlparser/node2json.js","../../node_modules/fast-xml-parser/src/xmlparser/XMLParser.js","../../node_modules/@ncukondo/academic-fulltext/dist/convert/jats-parser.js","../../node_modules/@ncukondo/academic-fulltext/dist/convert/markdown-writer.js","../../node_modules/@ncukondo/academic-fulltext/dist/convert/index.js","../../src/features/operations/fulltext/discover.ts","../../src/features/operations/fulltext/fetch.ts","../../src/features/operations/fulltext/convert.ts","../../src/features/format/citation-fallback.ts","../../src/features/format/citation-csl.ts","../../src/features/pagination/sorter.ts","../../src/features/pagination/paginate.ts","../../src/config/csl-styles.ts","../../src/features/operations/remove.ts","../../src/features/import/cache.ts","../../src/features/import/normalizer.ts","../../src/features/import/detector.ts","../../src/features/import/rate-limiter.ts","../../src/features/import/fetcher.ts","../../src/features/import/parser.ts","../../src/features/import/importer.ts","../../src/features/operations/add.ts","../../src/server/routes/add.ts","../../src/features/operations/check.ts","../../src/server/routes/check.ts","../../src/features/operations/cite.ts","../../src/server/routes/cite.ts","../../src/server/routes/health.ts","../../src/features/operations/list.ts","../../src/server/routes/list.ts","../../src/features/operations/update.ts","../../src/server/routes/references.ts","../../src/features/operations/search.ts","../../src/server/routes/search.ts","../../src/server/index.ts"],"sourcesContent":["import path from \"node:path\";\n\n/**\n * Filename utilities for attachments\n *\n * File format: {role}[-{label-slug}].{ext}\n * Examples:\n * - fulltext.pdf\n * - supplement-table-s1.xlsx\n * - notes-reading-analysis.md\n */\n\ninterface ParsedFilename {\n role: string;\n ext: string;\n label?: string;\n}\n\n/**\n * Convert a human-readable label to a filesystem-safe slug\n */\nexport function slugifyLabel(label: string): string {\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\") // Replace non-alphanumeric with hyphen\n .replace(/-+/g, \"-\") // Collapse multiple hyphens\n .replace(/^-|-$/g, \"\"); // Trim leading/trailing hyphens\n}\n\n/**\n * Generate filename from role, extension, and optional label\n */\nexport function generateFilename(role: string, ext: string, label?: string): string {\n if (label) {\n const slug = slugifyLabel(label);\n return `${role}-${slug}.${ext}`;\n }\n return `${role}.${ext}`;\n}\n\n/**\n * Parse filename to extract role, extension, and label\n *\n * Returns null for empty filenames\n */\nexport function parseFilename(filename: string): ParsedFilename | null {\n if (!filename) {\n return null;\n }\n\n const ext = path.extname(filename);\n const extWithoutDot = ext.startsWith(\".\") ? ext.slice(1) : ext;\n const basename = ext ? filename.slice(0, -ext.length) : filename;\n\n // Split basename by first hyphen to get role and potential label\n const firstHyphenIndex = basename.indexOf(\"-\");\n\n if (firstHyphenIndex === -1) {\n // No hyphen: just role, no label\n return {\n role: basename,\n ext: extWithoutDot,\n };\n }\n\n const role = basename.slice(0, firstHyphenIndex);\n const label = basename.slice(firstHyphenIndex + 1);\n\n if (label) {\n return {\n role,\n ext: extWithoutDot,\n label,\n };\n }\n\n return {\n role,\n ext: extWithoutDot,\n };\n}\n","import path from \"node:path\";\n\n/**\n * Attachment file metadata stored in reference's custom field\n */\nexport interface AttachmentFile {\n /** Filename without path (e.g., \"fulltext.pdf\") */\n filename: string;\n /** Role identifier (e.g., \"fulltext\", \"supplement\", \"notes\") */\n role: string;\n /** Human-readable label (optional) */\n label?: string;\n}\n\n/**\n * Attachments container stored in reference's custom.attachments field\n */\nexport interface Attachments {\n /** Directory name relative to attachments base (e.g., \"Smith-2024-PMID12345678-123e4567\") */\n directory: string;\n /** List of attached files */\n files: AttachmentFile[];\n}\n\n/**\n * Reserved role identifiers with special constraints\n */\nexport const RESERVED_ROLES = [\"fulltext\", \"supplement\", \"notes\", \"draft\"] as const;\n\nexport type ReservedRole = (typeof RESERVED_ROLES)[number];\n\n/**\n * Check if a role is a reserved role\n */\nexport function isReservedRole(role: string): role is ReservedRole {\n return RESERVED_ROLES.includes(role as ReservedRole);\n}\n\n/**\n * Get file extension from filename (without leading dot)\n */\nexport function getExtension(filename: string): string {\n const ext = path.extname(filename);\n return ext.startsWith(\".\") ? ext.slice(1).toLowerCase() : ext.toLowerCase();\n}\n\n/**\n * Check if fulltext files satisfy the constraint: max 2 files (1 PDF + 1 Markdown)\n */\nexport function isValidFulltextFiles(files: AttachmentFile[]): boolean {\n const fulltextFiles = files.filter((f) => f.role === \"fulltext\");\n\n if (fulltextFiles.length > 2) {\n return false;\n }\n\n if (fulltextFiles.length <= 1) {\n return true;\n }\n\n // Exactly 2 files: must be 1 PDF and 1 Markdown\n const extensions = fulltextFiles.map((f) => getExtension(f.filename));\n const pdfCount = extensions.filter((ext) => ext === \"pdf\").length;\n const mdCount = extensions.filter((ext) => ext === \"md\").length;\n\n return pdfCount === 1 && mdCount === 1;\n}\n","/**\n * Cross-platform path utilities\n *\n * IMPORTANT: Path handling conventions in this codebase:\n *\n * 1. File system operations (fs.readFile, fs.writeFile, etc.)\n * → Use NATIVE paths (path.join result as-is)\n *\n * 2. User-facing output (CLI output, API responses, result.path)\n * → Use NORMALIZED paths (forward slashes via normalizePathForOutput)\n *\n * 3. Test expectations for output paths\n * → Use NORMALIZED paths to match actual output\n */\n\n/**\n * Normalize path separators to forward slashes for consistent cross-platform output.\n *\n * Use this function ONLY for user-facing output, NOT for file system operations.\n *\n * @example\n * // In operation result\n * return { success: true, path: normalizePathForOutput(filePath) };\n *\n * // NOT for fs operations - use native path directly\n * await fs.readFile(filePath); // filePath from path.join, NOT normalized\n */\nexport function normalizePathForOutput(p: string): string {\n return p.replace(/\\\\/g, \"/\");\n}\n","/**\n * Directory name utilities for attachments\n *\n * Directory format: {id}[-PMID{pmid}]-{uuid-prefix}\n * Examples:\n * - With PMID: Smith-2024-PMID12345678-123e4567\n * - Without PMID: Smith-2024-123e4567\n */\n\ninterface ReferenceForDirectory {\n id: string;\n PMID?: string;\n custom?: { uuid?: string };\n}\n\ninterface ParsedDirectoryName {\n id: string;\n pmid?: string;\n uuidPrefix: string;\n}\n\n/**\n * Extract first 8 characters of UUID as prefix\n */\nexport function extractUuidPrefix(uuid: string): string {\n // Remove dashes and take first 8 chars\n const normalized = uuid.replace(/-/g, \"\");\n return normalized.slice(0, 8);\n}\n\n/**\n * Generate directory name for a reference\n */\nexport function generateDirectoryName(ref: ReferenceForDirectory): string {\n const uuid = ref.custom?.uuid;\n if (!uuid) {\n throw new Error(\"Reference must have custom.uuid\");\n }\n\n const uuidPrefix = extractUuidPrefix(uuid);\n const pmid = ref.PMID?.trim();\n\n if (pmid) {\n return `${ref.id}-PMID${pmid}-${uuidPrefix}`;\n }\n return `${ref.id}-${uuidPrefix}`;\n}\n\n/**\n * Parse directory name to extract components\n *\n * Returns null if the directory name doesn't match expected format\n */\nexport function parseDirectoryName(name: string): ParsedDirectoryName | null {\n if (!name) {\n return null;\n }\n\n // Pattern: {id}-PMID{pmid}-{uuidPrefix} or {id}-{uuidPrefix}\n // uuidPrefix is always 8 hex characters at the end\n const uuidPrefixPattern = /^[0-9a-f]{8}$/i;\n\n // Split by '-' and check last part is uuid prefix\n const parts = name.split(\"-\");\n if (parts.length < 2) {\n return null;\n }\n\n const lastPart = parts[parts.length - 1];\n if (!lastPart || !uuidPrefixPattern.test(lastPart)) {\n return null;\n }\n\n const uuidPrefix = lastPart;\n\n // Check for PMID pattern in second-to-last position\n const remainingParts = parts.slice(0, -1);\n const lastRemaining = remainingParts[remainingParts.length - 1];\n const pmidMatch = lastRemaining?.match(/^PMID(\\d+)$/);\n\n if (pmidMatch?.[1]) {\n // Has PMID\n const id = remainingParts.slice(0, -1).join(\"-\");\n if (!id) {\n return null;\n }\n return {\n id,\n pmid: pmidMatch[1],\n uuidPrefix,\n };\n }\n\n // No PMID\n const id = remainingParts.join(\"-\");\n if (!id) {\n return null;\n }\n return {\n id,\n uuidPrefix,\n };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { normalizePathForOutput } from \"../../utils/path.js\";\nimport { generateDirectoryName } from \"./directory.js\";\nimport type { Attachments } from \"./types.js\";\n\n/**\n * Reference with attachment-related fields\n */\ninterface ReferenceForAttachments {\n id: string;\n PMID?: string;\n custom?: {\n uuid?: string;\n attachments?: Attachments;\n };\n}\n\n/**\n * Get the full directory path for a reference's attachments\n *\n * Uses existing directory name from metadata if available,\n * otherwise generates a new one.\n */\nexport function getDirectoryPath(ref: ReferenceForAttachments, baseDir: string): string {\n const existingDir = ref.custom?.attachments?.directory;\n if (existingDir) {\n // Normalize to forward slashes for consistent cross-platform output\n return normalizePathForOutput(path.join(baseDir, existingDir));\n }\n\n // Generate new directory name\n const dirName = generateDirectoryName(ref as Parameters<typeof generateDirectoryName>[0]);\n // Normalize to forward slashes for consistent cross-platform output\n return normalizePathForOutput(path.join(baseDir, dirName));\n}\n\n/**\n * Ensure the attachments directory exists for a reference\n *\n * Creates the directory if it doesn't exist.\n * Returns the full directory path.\n */\nexport async function ensureDirectory(\n ref: ReferenceForAttachments,\n baseDir: string\n): Promise<string> {\n const dirPath = getDirectoryPath(ref, baseDir);\n\n try {\n await fs.mkdir(dirPath, { recursive: true });\n } catch (error) {\n // Ignore if directory already exists\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw error;\n }\n }\n\n return dirPath;\n}\n\n/**\n * Delete a directory if it's empty\n *\n * Does nothing if the directory is not empty or doesn't exist.\n */\nexport async function deleteDirectoryIfEmpty(dirPath: string): Promise<void> {\n try {\n const files = await fs.readdir(dirPath);\n if (files.length === 0) {\n await fs.rmdir(dirPath);\n }\n } catch (error) {\n // Ignore if directory doesn't exist\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n}\n\n/**\n * Rename a directory\n *\n * Does nothing if the paths are the same or old directory doesn't exist.\n */\nexport async function renameDirectory(oldPath: string, newPath: string): Promise<void> {\n if (oldPath === newPath) {\n return;\n }\n\n try {\n await fs.rename(oldPath, newPath);\n } catch (error) {\n // Ignore if old directory doesn't exist\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n}\n","/**\n * Attachment add operation\n */\n\nimport { copyFile, rename, stat, unlink } from \"node:fs/promises\";\nimport { extname, join } from \"node:path\";\nimport type { CslItem } from \"../../../core/csl-json/types.js\";\nimport type { ILibrary, IdentifierType } from \"../../../core/library-interface.js\";\nimport { ensureDirectory } from \"../../attachments/directory-manager.js\";\nimport { generateDirectoryName } from \"../../attachments/directory.js\";\nimport { generateFilename } from \"../../attachments/filename.js\";\nimport {\n type AttachmentFile,\n type Attachments,\n getExtension,\n isValidFulltextFiles,\n} from \"../../attachments/types.js\";\n\n/**\n * Options for addAttachment operation\n */\nexport interface AddAttachmentOptions {\n /** Reference identifier (id or uuid) */\n identifier: string;\n /** Path to the file to attach */\n filePath: string;\n /** Role for the attachment */\n role: string;\n /** Human-readable label (optional) */\n label?: string;\n /** Move file instead of copy */\n move?: boolean;\n /** Force overwrite existing file */\n force?: boolean;\n /** Identifier type */\n idType?: IdentifierType;\n /** Base directory for attachments */\n attachmentsDirectory: string;\n}\n\n/**\n * Result of addAttachment operation\n */\nexport interface AddAttachmentResult {\n success: boolean;\n filename?: string;\n directory?: string;\n overwritten?: boolean;\n existingFile?: string;\n requiresConfirmation?: boolean;\n error?: string;\n}\n\n/**\n * Reference with attachment-related fields\n */\ninterface ReferenceForAttachments {\n id: string;\n PMID?: string;\n custom?: {\n uuid?: string;\n attachments?: Attachments;\n };\n}\n\n/**\n * Check if source file exists\n */\nasync function checkSourceFile(filePath: string): Promise<string | null> {\n try {\n await stat(filePath);\n return null;\n } catch {\n return `Source file not found: ${filePath}`;\n }\n}\n\n/**\n * Validate fulltext constraints\n */\nfunction validateFulltextConstraint(\n existingFiles: AttachmentFile[],\n newFile: AttachmentFile\n): string | null {\n if (newFile.role !== \"fulltext\") {\n return null;\n }\n\n const newExt = getExtension(newFile.filename);\n const existingFulltexts = existingFiles.filter((f) => f.role === \"fulltext\");\n\n // Check if same format already exists\n for (const existing of existingFulltexts) {\n const existingExt = getExtension(existing.filename);\n if (existingExt === newExt) {\n return `A fulltext ${newExt.toUpperCase()} already exists. Use --force to overwrite.`;\n }\n }\n\n // Check total count constraint\n const testFiles = [...existingFiles, newFile];\n if (!isValidFulltextFiles(testFiles)) {\n return \"fulltext role allows max 2 files (1 PDF + 1 Markdown)\";\n }\n\n return null;\n}\n\n/**\n * Check if file with same name already exists\n */\nfunction findExistingFile(files: AttachmentFile[], filename: string): AttachmentFile | undefined {\n return files.find((f) => f.filename === filename);\n}\n\n/**\n * Copy or move file to destination\n */\nasync function copyOrMoveFile(\n sourcePath: string,\n destPath: string,\n move: boolean\n): Promise<string | null> {\n try {\n if (move) {\n try {\n await rename(sourcePath, destPath);\n } catch (renameError: unknown) {\n if (renameError instanceof Error && \"code\" in renameError && renameError.code === \"EXDEV\") {\n await copyFile(sourcePath, destPath);\n await unlink(sourcePath);\n } else {\n throw renameError;\n }\n }\n } else {\n await copyFile(sourcePath, destPath);\n }\n return null;\n } catch (error) {\n return `Failed to ${move ? \"move\" : \"copy\"} file: ${error instanceof Error ? error.message : String(error)}`;\n }\n}\n\n/**\n * Update library with new attachment metadata\n */\nasync function updateAttachmentMetadata(\n library: ILibrary,\n item: CslItem,\n updatedAttachments: Attachments\n): Promise<void> {\n await library.update(item.id, {\n custom: {\n ...item.custom,\n attachments: updatedAttachments,\n },\n } as Partial<CslItem>);\n}\n\n/**\n * Build updated files list\n */\nfunction buildUpdatedFiles(\n existingFiles: AttachmentFile[],\n newFile: AttachmentFile,\n existingFile: AttachmentFile | undefined\n): AttachmentFile[] {\n if (existingFile) {\n return existingFiles.map((f) => (f.filename === newFile.filename ? newFile : f));\n }\n return [...existingFiles, newFile];\n}\n\n/**\n * Add an attachment to a reference\n */\nexport async function addAttachment(\n library: ILibrary,\n options: AddAttachmentOptions\n): Promise<AddAttachmentResult> {\n const {\n identifier,\n filePath,\n role,\n label,\n move = false,\n force = false,\n idType = \"id\",\n attachmentsDirectory,\n } = options;\n\n // Find reference\n const item = await library.find(identifier, { idType });\n if (!item) {\n return { success: false, error: `Reference '${identifier}' not found` };\n }\n\n // Check UUID\n const uuid = (item as CslItem).custom?.uuid;\n if (!uuid) {\n return { success: false, error: \"Reference has no UUID. Cannot create attachment directory.\" };\n }\n\n // Check source file exists\n const sourceError = await checkSourceFile(filePath);\n if (sourceError) {\n return { success: false, error: sourceError };\n }\n\n // Generate filename\n const ext = extname(filePath).slice(1).toLowerCase();\n const filename = generateFilename(role, ext, label);\n\n // Get existing attachments\n const existingAttachments = (item as CslItem).custom?.attachments as Attachments | undefined;\n const existingFiles = existingAttachments?.files ?? [];\n\n // Create new attachment file entry\n const newFile: AttachmentFile = {\n filename,\n role,\n ...(label && { label }),\n };\n\n // Check if file with same name exists\n const existingFile = findExistingFile(existingFiles, filename);\n\n // Validate fulltext constraints first (provides better error messages)\n if (!existingFile || !force) {\n const constraintError = validateFulltextConstraint(existingFiles, newFile);\n if (constraintError) {\n return { success: false, error: constraintError };\n }\n }\n\n // Check if file with same name exists (non-fulltext case)\n if (existingFile && !force) {\n return {\n success: false,\n existingFile: filename,\n requiresConfirmation: true,\n };\n }\n\n // Ensure directory exists\n const ref = item as ReferenceForAttachments;\n const dirPath = await ensureDirectory(ref, attachmentsDirectory);\n const dirName =\n existingAttachments?.directory ??\n generateDirectoryName(ref as Parameters<typeof generateDirectoryName>[0]);\n\n // Copy or move file\n const destPath = join(dirPath, filename);\n const copyError = await copyOrMoveFile(filePath, destPath, move);\n if (copyError) {\n return { success: false, error: copyError };\n }\n\n // Update metadata\n const updatedFiles = buildUpdatedFiles(existingFiles, newFile, existingFile);\n const updatedAttachments: Attachments = {\n directory: dirName,\n files: updatedFiles,\n };\n\n await updateAttachmentMetadata(library, item as CslItem, updatedAttachments);\n await library.save();\n\n return {\n success: true,\n filename,\n directory: dirName,\n overwritten: !!existingFile,\n };\n}\n","/**\n * Fulltext-to-attachments adapter utilities\n *\n * Maps fulltext command options and data to the new attachments system.\n * This adapter enables the fulltext command to use attachments backend\n * while maintaining backward-compatible interface.\n */\n\nimport type { AttachmentFile, Attachments } from \"../../attachments/types.js\";\nimport { getExtension } from \"../../attachments/types.js\";\n\n/**\n * The role used for fulltext files in the attachments system\n */\nexport const FULLTEXT_ROLE = \"fulltext\" as const;\n\n/**\n * Fulltext format type (matching existing FulltextType)\n */\nexport type FulltextFormat = \"pdf\" | \"markdown\";\n\n/**\n * Convert fulltext format to file extension\n */\nexport function formatToExtension(format: FulltextFormat): string {\n return format === \"markdown\" ? \"md\" : format;\n}\n\n/**\n * Convert file extension to fulltext format\n * Returns undefined if extension is not a valid fulltext format\n */\nexport function extensionToFormat(ext: string): FulltextFormat | undefined {\n const normalized = ext.toLowerCase();\n if (normalized === \"pdf\") return \"pdf\";\n if (normalized === \"md\" || normalized === \"markdown\") return \"markdown\";\n return undefined;\n}\n\n/**\n * Get the standard filename for a fulltext file\n * Following the naming convention: fulltext.{ext}\n */\nexport function getFulltextFilename(format: FulltextFormat): string {\n const ext = formatToExtension(format);\n return `fulltext.${ext}`;\n}\n\n/**\n * Find a fulltext file of specific format in attachments\n */\nexport function findFulltextFile(\n attachments: Attachments | undefined,\n format: FulltextFormat\n): AttachmentFile | undefined {\n if (!attachments?.files) {\n return undefined;\n }\n\n const targetExt = formatToExtension(format);\n\n return attachments.files.find((file) => {\n if (file.role !== FULLTEXT_ROLE) {\n return false;\n }\n const fileExt = getExtension(file.filename);\n return fileExt === targetExt;\n });\n}\n\n/**\n * Find all fulltext files in attachments\n */\nexport function findFulltextFiles(attachments: Attachments | undefined): AttachmentFile[] {\n if (!attachments?.files) {\n return [];\n }\n\n return attachments.files.filter((file) => file.role === FULLTEXT_ROLE);\n}\n","/**\n * Fulltext attach operation\n *\n * Uses attachments system internally with role='fulltext'.\n */\n\nimport { mkdtempSync, writeFileSync } from \"node:fs\";\nimport { rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { extname, join } from \"node:path\";\nimport type { ILibrary, IdentifierType } from \"../../../core/library-interface.js\";\nimport { type AddAttachmentResult, addAttachment } from \"../attachments/add.js\";\nimport {\n FULLTEXT_ROLE,\n type FulltextFormat,\n formatToExtension,\n} from \"../fulltext-adapter/index.js\";\n\n/**\n * Fulltext type (matches existing FulltextType for backward compatibility)\n */\nexport type FulltextType = FulltextFormat;\n\n/**\n * Options for fulltextAttach operation\n */\nexport interface FulltextAttachOptions {\n /** Reference identifier (id or uuid) */\n identifier: string;\n /** Path to the file to attach */\n filePath?: string | undefined;\n /** Explicit file type (pdf or markdown) */\n type?: FulltextType | undefined;\n /** Move file instead of copy */\n move?: boolean | undefined;\n /** Force overwrite existing file */\n force?: boolean | undefined;\n /** Identifier type: 'id' (default), 'uuid', 'doi', 'pmid', or 'isbn' */\n idType?: IdentifierType | undefined;\n /** Directory for attachments (replaces fulltextDirectory) */\n fulltextDirectory: string;\n /** Content from stdin */\n stdinContent?: Buffer | undefined;\n}\n\n/**\n * Result of fulltextAttach operation\n */\nexport interface FulltextAttachResult {\n success: boolean;\n filename?: string | undefined;\n type?: FulltextType | undefined;\n overwritten?: boolean | undefined;\n existingFile?: string | undefined;\n requiresConfirmation?: boolean | undefined;\n error?: string | undefined;\n}\n\n/**\n * Detect fulltext type from file extension\n */\nfunction detectType(filePath: string): FulltextType | undefined {\n const ext = extname(filePath).toLowerCase();\n if (ext === \".pdf\") return \"pdf\";\n if (ext === \".md\" || ext === \".markdown\") return \"markdown\";\n return undefined;\n}\n\n/**\n * Resolve file type from options\n */\nfunction resolveFileType(\n explicitType: FulltextType | undefined,\n filePath: string | undefined,\n stdinContent: Buffer | undefined\n): FulltextType | { error: string } {\n let fileType = explicitType;\n if (!fileType && filePath) {\n fileType = detectType(filePath);\n }\n\n if (stdinContent && !fileType) {\n return {\n error: \"File type must be specified with --pdf or --markdown when reading from stdin.\",\n };\n }\n\n if (!fileType) {\n return { error: \"Cannot detect file type. Use --pdf or --markdown to specify the type.\" };\n }\n\n return fileType;\n}\n\n/**\n * Prepare source path from stdin content\n */\nfunction prepareStdinSource(\n stdinContent: Buffer,\n fileType: FulltextType\n): { sourcePath: string; tempDir: string } | { error: string } {\n try {\n const tempDir = mkdtempSync(join(tmpdir(), \"refmgr-\"));\n const ext = formatToExtension(fileType);\n const sourcePath = join(tempDir, `stdin.${ext}`);\n writeFileSync(sourcePath, stdinContent);\n return { sourcePath, tempDir };\n } catch (error) {\n return {\n error: `Failed to write stdin content: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n}\n\n/**\n * Clean up temp directory\n */\nasync function cleanupTempDir(tempDir: string | undefined): Promise<void> {\n if (tempDir) {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {});\n }\n}\n\n/**\n * Prepare source path from options\n */\nfunction prepareSourcePath(\n filePath: string | undefined,\n stdinContent: Buffer | undefined,\n fileType: FulltextType\n): { sourcePath: string; tempDir?: string } | { error: string } {\n if (stdinContent) {\n return prepareStdinSource(stdinContent, fileType);\n }\n\n if (!filePath) {\n return { error: \"No file path or stdin content provided.\" };\n }\n\n return { sourcePath: filePath };\n}\n\n/**\n * Convert AddAttachmentResult to FulltextAttachResult\n */\nfunction convertResult(result: AddAttachmentResult, fileType: FulltextType): FulltextAttachResult {\n if (result.success) {\n return {\n success: true,\n filename: result.filename,\n type: fileType,\n overwritten: result.overwritten,\n };\n }\n\n if (result.requiresConfirmation) {\n return {\n success: false,\n existingFile: result.existingFile,\n requiresConfirmation: true,\n };\n }\n\n return {\n success: false,\n error: result.error,\n };\n}\n\n/**\n * Attach a fulltext file to a reference.\n *\n * @param library - The library containing the reference\n * @param options - Attach options\n * @returns Result of the attach operation\n */\nexport async function fulltextAttach(\n library: ILibrary,\n options: FulltextAttachOptions\n): Promise<FulltextAttachResult> {\n const {\n identifier,\n filePath,\n type: explicitType,\n move,\n force,\n idType = \"id\",\n fulltextDirectory,\n stdinContent,\n } = options;\n\n // Resolve file type first\n const fileTypeResult = resolveFileType(explicitType, filePath, stdinContent);\n if (typeof fileTypeResult === \"object\" && \"error\" in fileTypeResult) {\n // Check if reference exists (for consistent error messages)\n const item = await library.find(identifier, { idType });\n if (!item) {\n return { success: false, error: `Reference '${identifier}' not found` };\n }\n return { success: false, error: fileTypeResult.error };\n }\n const fileType = fileTypeResult;\n\n // Prepare source path\n const sourceResult = prepareSourcePath(filePath, stdinContent, fileType);\n if (\"error\" in sourceResult) {\n // Check if reference exists (for consistent error messages)\n const item = await library.find(identifier, { idType });\n if (!item) {\n return { success: false, error: `Reference '${identifier}' not found` };\n }\n return { success: false, error: sourceResult.error };\n }\n const { sourcePath, tempDir } = sourceResult;\n\n try {\n // Use attachments system with fulltext role\n const result = await addAttachment(library, {\n identifier,\n filePath: sourcePath,\n role: FULLTEXT_ROLE,\n move: move ?? false,\n force: force ?? false,\n idType,\n attachmentsDirectory: fulltextDirectory,\n });\n\n await cleanupTempDir(tempDir);\n\n return convertResult(result, fileType);\n } catch (error) {\n await cleanupTempDir(tempDir);\n throw error;\n }\n}\n","/**\n * Fulltext get operation\n *\n * Uses attachments system internally with role='fulltext'.\n */\n\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { CslItem } from \"../../../core/csl-json/types.js\";\nimport type { ILibrary, IdentifierType } from \"../../../core/library-interface.js\";\nimport { normalizePathForOutput } from \"../../../utils/path.js\";\nimport type { AttachmentFile, Attachments } from \"../../attachments/types.js\";\nimport {\n type FulltextFormat,\n extensionToFormat,\n findFulltextFile,\n findFulltextFiles,\n} from \"../fulltext-adapter/index.js\";\n\n/**\n * Fulltext type (matches existing FulltextType for backward compatibility)\n */\nexport type FulltextType = FulltextFormat;\n\n/**\n * Options for fulltextGet operation\n */\nexport interface FulltextGetOptions {\n /** Reference identifier (id or uuid) */\n identifier: string;\n /** Specific type to get (pdf or markdown) */\n type?: FulltextType | undefined;\n /** Preferred type ordering when type is not specified (pdf or markdown) */\n preferredType?: FulltextType | undefined;\n /** If true, return file content instead of path */\n stdout?: boolean | undefined;\n /** Identifier type: 'id' (default), 'uuid', 'doi', 'pmid', or 'isbn' */\n idType?: IdentifierType | undefined;\n /** Directory for attachments (replaces fulltextDirectory) */\n fulltextDirectory: string;\n}\n\n/**\n * Result of fulltextGet operation\n */\nexport interface FulltextGetResult {\n success: boolean;\n paths?: {\n pdf?: string;\n markdown?: string;\n };\n content?: Buffer;\n error?: string;\n}\n\n/**\n * Build file path from attachments metadata\n */\nfunction buildFilePath(attachmentsDirectory: string, directory: string, filename: string): string {\n return normalizePathForOutput(join(attachmentsDirectory, directory, filename));\n}\n\n/**\n * Get file content for stdout mode\n */\nasync function getFileContent(filePath: string): Promise<FulltextGetResult> {\n const content = await readFile(filePath);\n return { success: true, content };\n}\n\n/**\n * Handle stdout mode - get file content\n */\nasync function handleStdoutMode(\n attachments: Attachments | undefined,\n type: FulltextType,\n identifier: string,\n fulltextDirectory: string\n): Promise<FulltextGetResult> {\n const file = findFulltextFile(attachments, type);\n if (!file || !attachments?.directory) {\n return { success: false, error: `No ${type} fulltext attached to '${identifier}'` };\n }\n const filePath = buildFilePath(fulltextDirectory, attachments.directory, file.filename);\n try {\n return await getFileContent(filePath);\n } catch {\n return { success: false, error: `No ${type} fulltext attached to '${identifier}'` };\n }\n}\n\n/**\n * Get single type path\n */\nfunction getSingleTypePath(\n attachments: Attachments | undefined,\n type: FulltextType,\n identifier: string,\n fulltextDirectory: string\n): FulltextGetResult {\n const file = findFulltextFile(attachments, type);\n if (!file || !attachments?.directory) {\n return { success: false, error: `No ${type} fulltext attached to '${identifier}'` };\n }\n const filePath = buildFilePath(fulltextDirectory, attachments.directory, file.filename);\n const paths: { pdf?: string; markdown?: string } = {};\n paths[type] = filePath;\n return { success: true, paths };\n}\n\n/**\n * Get all fulltext paths\n */\nfunction getAllFulltextPaths(\n attachments: Attachments,\n fulltextFiles: AttachmentFile[],\n fulltextDirectory: string,\n identifier: string,\n preferredType?: FulltextType\n): FulltextGetResult {\n const paths: { pdf?: string; markdown?: string } = {};\n for (const file of fulltextFiles) {\n const ext = file.filename.split(\".\").pop() || \"\";\n const format = extensionToFormat(ext);\n if (format) {\n const filePath = buildFilePath(fulltextDirectory, attachments.directory, file.filename);\n paths[format] = filePath;\n }\n }\n\n if (Object.keys(paths).length === 0) {\n return { success: false, error: `No fulltext attached to '${identifier}'` };\n }\n\n // Reorder paths based on preferredType\n if (preferredType && paths[preferredType]) {\n const ordered: { pdf?: string; markdown?: string } = {};\n ordered[preferredType] = paths[preferredType];\n for (const key of Object.keys(paths) as FulltextType[]) {\n if (key !== preferredType && paths[key]) {\n ordered[key] = paths[key];\n }\n }\n return { success: true, paths: ordered };\n }\n\n return { success: true, paths };\n}\n\n/**\n * Get fulltext file paths or content for a reference.\n *\n * @param library - The library containing the reference\n * @param options - Get options\n * @returns Result with file paths or content\n */\nexport async function fulltextGet(\n library: ILibrary,\n options: FulltextGetOptions\n): Promise<FulltextGetResult> {\n const { identifier, type, preferredType, stdout, idType = \"id\", fulltextDirectory } = options;\n\n // Find reference\n const item = await library.find(identifier, { idType });\n if (!item) {\n return { success: false, error: `Reference '${identifier}' not found` };\n }\n\n // Get attachments metadata\n const attachments = (item as CslItem).custom?.attachments as Attachments | undefined;\n\n // Stdout mode with specific type\n if (stdout && type) {\n return handleStdoutMode(attachments, type, identifier, fulltextDirectory);\n }\n\n // Path mode - find all fulltext files\n const fulltextFiles = findFulltextFiles(attachments);\n if (fulltextFiles.length === 0) {\n return { success: false, error: `No fulltext attached to '${identifier}'` };\n }\n\n // If specific type requested, filter to that type\n if (type) {\n return getSingleTypePath(attachments, type, identifier, fulltextDirectory);\n }\n\n // Return all fulltext paths\n if (!attachments) {\n return { success: false, error: `No fulltext attached to '${identifier}'` };\n }\n\n return getAllFulltextPaths(\n attachments,\n fulltextFiles,\n fulltextDirectory,\n identifier,\n preferredType\n );\n}\n","/**\n * arXiv OA discovery client.\n * Generates PDF download URLs for arXiv articles.\n *\n * URL pattern: https://arxiv.org/pdf/{id}.pdf\n * No API call needed — arXiv is always open access.\n */\n/** Strip common prefixes from arXiv IDs */\nfunction normalizeArxivId(id) {\n return id.replace(/^arXiv:/i, \"\");\n}\n/**\n * Check arXiv availability for an article.\n * Since all arXiv articles are freely available, this simply\n * generates the PDF URL from the arXiv ID.\n *\n * @param arxivId - arXiv identifier (e.g., \"2401.12345\", \"hep-ph/9901234\")\n * @returns Array with a single PDF OALocation, or null if no ID\n */\nexport function checkArxiv(arxivId) {\n if (!arxivId)\n return null;\n const id = normalizeArxivId(arxivId);\n return [\n {\n source: \"arxiv\",\n url: `https://arxiv.org/pdf/${id}.pdf`,\n urlType: \"pdf\",\n version: \"submitted\",\n },\n {\n source: \"arxiv\",\n url: `https://arxiv.org/html/${id}`,\n urlType: \"html\",\n version: \"submitted\",\n },\n ];\n}\n//# sourceMappingURL=arxiv.js.map","/**\n * CORE API OA discovery client.\n * Checks Open Access availability via the CORE API.\n *\n * API: https://api.core.ac.uk/v3/search/works?q=doi:\"{doi}\"\n * Auth: Bearer token (API key, free registration)\n * Rate limit: 10 req/sec\n */\nconst CORE_API_BASE = \"https://api.core.ac.uk/v3\";\n/**\n * Check CORE API for Open Access availability of an article.\n *\n * @param doi - The article's DOI\n * @param apiKey - CORE API key (required; returns null if empty)\n * @returns Array of OALocations if found, null if not found or no key\n * @throws On rate limit (429) or network errors\n */\nexport async function checkCore(doi, apiKey) {\n if (!doi)\n return null;\n if (!apiKey)\n return null;\n const url = `${CORE_API_BASE}/search/works?q=doi:\"${doi}\"&limit=1`;\n const response = await fetch(url, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n });\n if (!response.ok) {\n if (response.status === 429) {\n throw new Error(\"CORE API rate limit exceeded\");\n }\n throw new Error(`CORE API error: HTTP ${response.status} ${response.statusText}`);\n }\n const data = (await response.json());\n if (!data.totalHits || !data.results || data.results.length === 0) {\n return null;\n }\n const firstResult = data.results[0];\n if (!firstResult)\n return null;\n // Prefer downloadUrl (direct PDF from CORE)\n if (firstResult.downloadUrl) {\n return [\n {\n source: \"core\",\n url: firstResult.downloadUrl,\n urlType: \"pdf\",\n version: \"accepted\",\n },\n ];\n }\n // Fall back to sourceFulltextUrls (repository links)\n if (firstResult.sourceFulltextUrls && firstResult.sourceFulltextUrls.length > 0) {\n const repoUrl = firstResult.sourceFulltextUrls[0];\n if (repoUrl) {\n return [\n {\n source: \"core\",\n url: repoUrl,\n urlType: \"repository\",\n version: \"accepted\",\n },\n ];\n }\n }\n return null;\n}\n//# sourceMappingURL=core.js.map","/**\n * NCBI ID Converter API client.\n * Resolves DOI → PMCID/PMID using the NCBI ID Converter API.\n *\n * API: https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/?ids={doi}&format=json\n */\nconst IDCONV_BASE_URL = \"https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0/\";\nfunction buildUrl(ids, options) {\n const params = new URLSearchParams({\n ids: ids.join(\",\"),\n format: \"json\",\n });\n if (options?.tool)\n params.set(\"tool\", options.tool);\n if (options?.email)\n params.set(\"email\", options.email);\n return `${IDCONV_BASE_URL}?${params.toString()}`;\n}\nfunction parseRecord(record) {\n if (record.errmsg)\n return null;\n const result = {};\n if (record.pmcid)\n result.pmcid = record.pmcid;\n if (record.pmid)\n result.pmid = record.pmid;\n if (record.doi)\n result.doi = record.doi;\n return Object.keys(result).length > 0 ? result : null;\n}\n/**\n * Resolve a single DOI to PMCID/PMID via the NCBI ID Converter API.\n *\n * @param doi - The article's DOI\n * @param options - Optional tool name and email for API identification\n * @returns Conversion result with pmcid/pmid, or null if not found\n */\nexport async function resolveDoiToPmcid(doi, options) {\n if (!doi)\n return null;\n const url = buildUrl([doi], options);\n const response = await fetch(url);\n if (!response.ok) {\n if (response.status === 404)\n return null;\n throw new Error(`NCBI ID Converter API error: HTTP ${response.status} ${response.statusText}`);\n }\n const data = (await response.json());\n if (!data.records || data.records.length === 0)\n return null;\n const record = data.records[0];\n if (!record)\n return null;\n return parseRecord(record);\n}\n/**\n * Batch resolve multiple IDs (DOIs, PMIDs, PMCIDs) to their cross-references.\n *\n * @param ids - Array of identifiers to resolve\n * @param options - Optional tool name and email for API identification\n * @returns Map of input ID → conversion result\n */\nexport async function batchResolveIds(ids, options) {\n const results = new Map();\n if (ids.length === 0)\n return results;\n const url = buildUrl(ids, options);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`NCBI ID Converter API error: HTTP ${response.status} ${response.statusText}`);\n }\n const data = (await response.json());\n if (!data.records)\n return results;\n for (const record of data.records) {\n const parsed = parseRecord(record);\n if (!parsed)\n continue;\n // Map back to the input ID: try doi, pmid, pmcid\n const key = record.doi ?? record.pmid ?? record.pmcid;\n if (key)\n results.set(key, parsed);\n }\n return results;\n}\n//# sourceMappingURL=ncbi-id-converter.js.map","/**\n * PMC OA discovery client.\n * Checks PubMed Central availability and generates download URLs.\n *\n * PDF: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC{id}/pdf/\n * XML: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pmc&id={pmcid}&rettype=xml\n * PMID→PMCID: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?dbfrom=pubmed&db=pmc&id={pmid}&retmode=json\n */\nconst EUTILS_BASE = \"https://eutils.ncbi.nlm.nih.gov/entrez/eutils\";\n/** Strip \"PMC\" prefix from PMCID, returning just the numeric part */\nfunction stripPmcPrefix(pmcid) {\n return pmcid.replace(/^PMC/i, \"\");\n}\n/** Ensure PMCID has the \"PMC\" prefix */\nfunction ensurePmcPrefix(pmcid) {\n return pmcid.startsWith(\"PMC\") ? pmcid : `PMC${pmcid}`;\n}\n/**\n * Generate PMC download URLs from a known PMCID.\n */\nexport function getPmcUrls(pmcid) {\n const numericId = stripPmcPrefix(pmcid);\n const fullPmcid = ensurePmcPrefix(pmcid);\n return [\n {\n source: \"pmc\",\n url: `https://www.ncbi.nlm.nih.gov/pmc/articles/${fullPmcid}/pdf/`,\n urlType: \"pdf\",\n version: \"published\",\n },\n {\n source: \"pmc\",\n url: `${EUTILS_BASE}/efetch.fcgi?db=pmc&id=${numericId}&rettype=xml`,\n urlType: \"xml\",\n version: \"published\",\n },\n ];\n}\n/**\n * Look up PMCID from PMID via E-utilities elink API.\n * @returns PMCID string or null if not in PMC\n */\nasync function lookupPmcid(pmid, options) {\n let url = `${EUTILS_BASE}/elink.fcgi?dbfrom=pubmed&db=pmc&id=${pmid}&retmode=json`;\n if (options?.apiKey) {\n url += `&api_key=${options.apiKey}`;\n }\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`PMC elink API error: HTTP ${response.status}`);\n }\n const data = (await response.json());\n const linksets = data.linksets;\n if (!linksets || linksets.length === 0)\n return null;\n const firstLinkset = linksets[0];\n if (!firstLinkset?.linksetdbs)\n return null;\n const pmcLink = firstLinkset.linksetdbs.find((db) => db.dbto === \"pmc\");\n if (!pmcLink?.links || pmcLink.links.length === 0)\n return null;\n const pmcNumericId = pmcLink.links[0];\n return pmcNumericId ? `PMC${pmcNumericId}` : null;\n}\n/**\n * Check PMC availability for an article.\n * If PMCID is known, generates URLs directly.\n * If only PMID is known, looks up PMCID via E-utilities elink.\n */\nexport async function checkPmc(ids, options) {\n // If PMCID is already known, generate URLs directly\n if (ids.pmcid) {\n return getPmcUrls(ids.pmcid);\n }\n // If only PMID is known, look up PMCID\n if (ids.pmid) {\n const pmcid = await lookupPmcid(ids.pmid, options);\n if (!pmcid)\n return null;\n return getPmcUrls(pmcid);\n }\n // No identifiers provided\n return null;\n}\n//# sourceMappingURL=pmc.js.map","/**\n * Unpaywall OA discovery client.\n * Checks Open Access availability via the Unpaywall API.\n *\n * API: https://api.unpaywall.org/v2/{doi}?email={email}\n * Rate limit: 100,000 requests/day (no per-second limit documented)\n */\nconst UNPAYWALL_BASE_URL = \"https://api.unpaywall.org/v2\";\n/** Regex to extract PMCID from PMC URLs */\nconst PMC_URL_PATTERN = /\\/pmc\\/articles\\/(PMC\\d+)/i;\n/** Map Unpaywall version strings to our OALocation version format */\nfunction mapVersion(version) {\n switch (version) {\n case \"publishedVersion\":\n return \"published\";\n case \"acceptedVersion\":\n return \"accepted\";\n case \"submittedVersion\":\n return \"submitted\";\n default:\n return \"published\";\n }\n}\n/** Convert an Unpaywall location to our OALocation format */\nfunction toOALocation(loc) {\n const hasPdf = loc.url_for_pdf != null;\n const url = hasPdf ? loc.url_for_pdf : loc.url_for_landing_page;\n if (!url)\n return null;\n const result = {\n source: \"unpaywall\",\n url,\n urlType: hasPdf ? \"pdf\" : \"html\",\n version: mapVersion(loc.version),\n };\n if (loc.license) {\n result.license = loc.license;\n }\n return result;\n}\n/**\n * Extract PMCID from a URL containing a PMC article link.\n * E.g., \"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1234567/pdf/\" → \"PMC1234567\"\n */\nexport function extractPmcidFromUrl(url) {\n const match = PMC_URL_PATTERN.exec(url);\n return match ? (match[1] ?? null) : null;\n}\n/**\n * Scan Unpaywall locations for a PMCID embedded in any URL.\n */\nfunction extractPmcidFromLocations(locations) {\n for (const loc of locations) {\n if (loc.url_for_pdf) {\n const pmcid = extractPmcidFromUrl(loc.url_for_pdf);\n if (pmcid)\n return pmcid;\n }\n if (loc.url_for_landing_page) {\n const pmcid = extractPmcidFromUrl(loc.url_for_landing_page);\n if (pmcid)\n return pmcid;\n }\n }\n return null;\n}\n/**\n * Fetch Unpaywall API and return raw response data.\n */\nasync function fetchUnpaywallData(doi, email) {\n if (!doi)\n return null;\n if (!email) {\n throw new Error(\"Unpaywall email is required for API access\");\n }\n const url = `${UNPAYWALL_BASE_URL}/${doi}?email=${encodeURIComponent(email)}`;\n const response = await fetch(url);\n if (!response.ok) {\n if (response.status === 404)\n return null;\n if (response.status === 429) {\n throw new Error(\"Unpaywall rate limit exceeded\");\n }\n throw new Error(`Unpaywall API error: HTTP ${response.status} ${response.statusText}`);\n }\n return (await response.json());\n}\n/**\n * Check Unpaywall for Open Access availability of an article.\n *\n * @param doi - The article's DOI\n * @param email - Email address required by Unpaywall API (free, no registration)\n * @returns Array of OALocations if OA, null if closed/not found\n * @throws On rate limit (429) or network errors\n */\nexport async function checkUnpaywall(doi, email) {\n const data = await fetchUnpaywallData(doi, email);\n if (!data || !data.is_oa || !data.oa_locations || data.oa_locations.length === 0) {\n return null;\n }\n const locations = [];\n for (const loc of data.oa_locations) {\n const oaLoc = toOALocation(loc);\n if (oaLoc)\n locations.push(oaLoc);\n }\n return locations.length > 0 ? locations : null;\n}\n/**\n * Check Unpaywall with detailed results including extracted PMCID.\n * Returns both OA locations and any PMCID found in the location URLs.\n *\n * @param doi - The article's DOI\n * @param email - Email address required by Unpaywall API (free, no registration)\n * @returns Detailed result with locations and optional pmcid, or null if closed/not found\n * @throws On rate limit (429) or network errors\n */\nexport async function checkUnpaywallDetailed(doi, email) {\n const data = await fetchUnpaywallData(doi, email);\n if (!data || !data.is_oa || !data.oa_locations || data.oa_locations.length === 0) {\n return null;\n }\n const locations = [];\n for (const loc of data.oa_locations) {\n const oaLoc = toOALocation(loc);\n if (oaLoc)\n locations.push(oaLoc);\n }\n if (locations.length === 0)\n return null;\n const pmcid = extractPmcidFromLocations(data.oa_locations);\n const result = { locations };\n if (pmcid)\n result.pmcid = pmcid;\n return result;\n}\n//# sourceMappingURL=unpaywall.js.map","/**\n * OA Discovery Aggregator.\n * Combines results from multiple OA discovery sources.\n */\nimport { checkArxiv } from \"./arxiv.js\";\nimport { checkCore } from \"./core.js\";\nimport { resolveDoiToPmcid } from \"./ncbi-id-converter.js\";\nimport { checkPmc } from \"./pmc.js\";\nimport { checkUnpaywallDetailed } from \"./unpaywall.js\";\n/** Default source order when preferSources is empty or not specified */\nconst DEFAULT_SOURCE_ORDER = [\"pmc\", \"arxiv\", \"unpaywall\", \"core\"];\nasync function checkPmcSource(article) {\n if (!article.pmid && !article.pmcid)\n return undefined;\n const ids = {};\n if (article.pmid)\n ids.pmid = article.pmid;\n if (article.pmcid)\n ids.pmcid = article.pmcid;\n return await checkPmc(ids);\n}\nfunction checkArxivSource(article) {\n if (!article.arxivId)\n return undefined;\n return checkArxiv(article.arxivId);\n}\nasync function checkCoreSource(article, config) {\n if (!config.coreApiKey || !article.doi)\n return undefined;\n return await checkCore(article.doi, config.coreApiKey);\n}\n/** Map of source name to its checker function (excluding unpaywall, handled specially). */\nconst sourceCheckers = {\n pmc: checkPmcSource,\n arxiv: checkArxivSource,\n core: checkCoreSource,\n};\n/** Determine OA status from collected locations and errors. */\nfunction determineOAStatus(locations, errors, sourcesChecked) {\n if (locations.length > 0)\n return \"open\";\n if (errors.length > 0 && errors.length >= sourcesChecked)\n return \"unknown\";\n return \"closed\";\n}\n/**\n * Pre-enrich article with PMCID from NCBI ID Converter when only DOI is available.\n */\nasync function enrichArticleIds(article, config) {\n const discoveredIds = {};\n // Only enrich if we have a DOI but no pmcid/pmid\n if (!article.doi || article.pmcid || article.pmid) {\n return { enriched: article, discoveredIds };\n }\n try {\n const email = config.ncbiEmail || config.unpaywallEmail;\n const options = {};\n if (config.ncbiTool)\n options.tool = config.ncbiTool;\n if (email)\n options.email = email;\n const result = await resolveDoiToPmcid(article.doi, options);\n if (result) {\n const enriched = { ...article };\n if (result.pmcid) {\n enriched.pmcid = result.pmcid;\n discoveredIds.pmcid = result.pmcid;\n }\n if (result.pmid) {\n enriched.pmid = result.pmid;\n discoveredIds.pmid = result.pmid;\n }\n return { enriched, discoveredIds };\n }\n }\n catch {\n // NCBI ID Converter failure is non-fatal; continue without enrichment\n }\n return { enriched: article, discoveredIds };\n}\n/** Check Unpaywall with PMCID extraction. */\nasync function checkUnpaywallSource(enriched, config, state) {\n if (!config.unpaywallEmail || !enriched.doi)\n return;\n state.sourcesChecked++;\n try {\n const detailed = await checkUnpaywallDetailed(enriched.doi, config.unpaywallEmail);\n if (!detailed)\n return;\n state.locations.push(...detailed.locations);\n if (detailed.pmcid) {\n state.unpaywallPmcid = detailed.pmcid;\n }\n }\n catch (err) {\n state.errors.push({ source: \"unpaywall\", error: String(err) });\n }\n}\n/** Check a single non-unpaywall source, updating state. */\nasync function checkGenericSource(source, enriched, config, state) {\n const checker = sourceCheckers[source];\n if (!checker)\n return;\n const result = await runSourceChecker(checker, enriched, config);\n if (result.skipped)\n return;\n state.sourcesChecked++;\n if (result.error) {\n state.errors.push({ source, error: result.error });\n }\n else if (result.locations) {\n state.locations.push(...result.locations);\n }\n}\n/** Perform lazy PMC check if Unpaywall revealed a PMCID not already known. */\nasync function lazyPmcCheck(enriched, state, discoveredIds) {\n if (!state.unpaywallPmcid || enriched.pmcid)\n return;\n discoveredIds.pmcid = discoveredIds.pmcid ?? state.unpaywallPmcid;\n try {\n const pmcLocations = await checkPmc({ pmcid: state.unpaywallPmcid });\n if (pmcLocations) {\n state.locations.push(...pmcLocations);\n }\n }\n catch (err) {\n state.errors.push({ source: \"pmc-lazy\", error: String(err) });\n }\n}\n/**\n * Discover OA availability for an article across all configured sources.\n * Checks sources in the order specified by config.preferSources, falling back\n * to the default order. Individual source errors are caught and reported\n * without failing the whole discovery.\n *\n * When only a DOI is provided, pre-enriches with NCBI ID Converter to resolve\n * PMCID/PMID, enabling PMC discovery. Also extracts PMCID from Unpaywall URLs\n * as a fallback, performing a lazy PMC check if a PMCID is discovered.\n */\nexport async function discoverOA(article, config) {\n const { enriched, discoveredIds } = await enrichArticleIds(article, config);\n const state = { locations: [], errors: [], sourcesChecked: 0 };\n const sourceOrder = config.preferSources.length > 0 ? config.preferSources : DEFAULT_SOURCE_ORDER;\n for (const source of sourceOrder) {\n if (source === \"unpaywall\") {\n await checkUnpaywallSource(enriched, config, state);\n }\n else {\n await checkGenericSource(source, enriched, config, state);\n }\n }\n await lazyPmcCheck(enriched, state, discoveredIds);\n const oaStatus = determineOAStatus(state.locations, state.errors, state.sourcesChecked);\n return { oaStatus, locations: state.locations, errors: state.errors, discoveredIds };\n}\n/** Run a single source checker with error handling. */\nasync function runSourceChecker(checker, article, config) {\n try {\n const result = await checker(article, config);\n if (result === undefined)\n return { skipped: true };\n return { skipped: false, locations: result ?? [] };\n }\n catch (err) {\n return { skipped: false, error: String(err) };\n }\n}\n//# sourceMappingURL=index.js.map","/**\n * PDF downloader with retry and error handling.\n */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n/** HTTP status codes that should not be retried */\nconst NON_RETRYABLE_STATUSES = new Set([400, 401, 403, 404, 405, 410]);\n/** Content types accepted as valid PDF responses */\nconst VALID_CONTENT_TYPES = [\"application/pdf\", \"application/octet-stream\"];\nconst USER_AGENT = \"search-hub/0.8.0 (https://github.com/ncukondo/search-hub)\";\nfunction isValidPdfContentType(contentType) {\n if (!contentType)\n return false;\n const base = (contentType.split(\";\")[0] ?? \"\").trim().toLowerCase();\n return VALID_CONTENT_TYPES.includes(base);\n}\nfunction sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\nasync function attemptDownload(url, destPath) {\n const response = await fetch(url, {\n headers: { \"User-Agent\": USER_AGENT },\n });\n if (!response.ok) {\n const error = `HTTP ${response.status} ${response.statusText}`;\n if (NON_RETRYABLE_STATUSES.has(response.status)) {\n return { kind: \"fail\", result: { success: false, error } };\n }\n return { kind: \"retry\", error };\n }\n const contentType = response.headers.get(\"content-type\");\n if (!isValidPdfContentType(contentType)) {\n return {\n kind: \"fail\",\n result: {\n success: false,\n error: `Unexpected Content-Type: ${contentType ?? \"none\"}`,\n },\n };\n }\n const buffer = await response.arrayBuffer();\n await mkdir(dirname(destPath), { recursive: true });\n await writeFile(destPath, Buffer.from(buffer));\n return { kind: \"success\", result: { success: true, size: buffer.byteLength } };\n}\n/**\n * Download a PDF from a URL to a local file path.\n * Retries on network errors and 429 responses with exponential backoff.\n * Does not retry on 403/404 or other client errors.\n */\nexport async function downloadPdf(url, destPath, options) {\n const retries = options?.retries ?? 3;\n const retryDelay = options?.retryDelay ?? 1000;\n let lastError;\n for (let attempt = 1; attempt <= retries; attempt++) {\n try {\n const outcome = await attemptDownload(url, destPath);\n if (outcome.kind === \"success\" || outcome.kind === \"fail\") {\n return outcome.result;\n }\n lastError = outcome.error;\n }\n catch (err) {\n lastError = err instanceof Error ? err.message : String(err);\n }\n if (attempt < retries) {\n await sleep(retryDelay * attempt);\n }\n }\n return { success: false, error: lastError ?? \"Download failed\" };\n}\n//# sourceMappingURL=downloader.js.map","/**\n * PMC XML downloader via E-utilities.\n */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nconst PMC_EFETCH_URL = \"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi\";\n/** Content types accepted as valid XML responses */\nconst VALID_XML_TYPES = [\"text/xml\", \"application/xml\"];\nconst USER_AGENT = \"search-hub/0.8.0 (https://github.com/ncukondo/search-hub)\";\nfunction isValidXmlContentType(contentType) {\n if (!contentType)\n return false;\n const base = (contentType.split(\";\")[0] ?? \"\").trim().toLowerCase();\n return VALID_XML_TYPES.includes(base);\n}\n/** Strip \"PMC\" prefix if present, returning numeric ID */\nfunction normalizePmcid(pmcid) {\n return pmcid.replace(/^PMC/i, \"\");\n}\n/**\n * Download PMC XML for a given PMCID via E-utilities efetch.\n */\nexport async function downloadPmcXml(pmcid, destPath) {\n const numericId = normalizePmcid(pmcid);\n const url = `${PMC_EFETCH_URL}?db=pmc&id=${numericId}&rettype=xml`;\n try {\n const response = await fetch(url, {\n headers: { \"User-Agent\": USER_AGENT },\n });\n if (!response.ok) {\n return {\n success: false,\n error: `HTTP ${response.status} ${response.statusText}`,\n };\n }\n const contentType = response.headers.get(\"content-type\");\n if (!isValidXmlContentType(contentType)) {\n return {\n success: false,\n error: `Unexpected Content-Type: ${contentType ?? \"none\"} (expected XML)`,\n };\n }\n const text = await response.text();\n await mkdir(dirname(destPath), { recursive: true });\n await writeFile(destPath, text, \"utf-8\");\n return { success: true, size: Buffer.byteLength(text) };\n }\n catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n//# sourceMappingURL=pmc-xml.js.map","/**\n * arXiv HTML downloader.\n *\n * Downloads LaTeXML-generated HTML from arXiv for conversion to Markdown.\n * Not all arXiv papers have HTML versions; 404 is handled gracefully.\n */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nconst ARXIV_HTML_BASE = \"https://arxiv.org/html/\";\nconst USER_AGENT = \"search-hub/0.8.0 (https://github.com/ncukondo/search-hub)\";\n/** Strip common prefixes from arXiv IDs */\nfunction normalizeArxivId(id) {\n return id.replace(/^arXiv:/i, \"\");\n}\nfunction isHtmlContentType(contentType) {\n if (!contentType)\n return false;\n const base = (contentType.split(\";\")[0] ?? \"\").trim().toLowerCase();\n return base === \"text/html\";\n}\n/**\n * Download arXiv HTML for a given arXiv ID.\n *\n * @param arxivId - arXiv identifier (e.g., \"2301.13867\", \"arXiv:2301.13867\")\n * @param destPath - Destination file path for the HTML\n * @returns Result with success status and file size\n */\nexport async function downloadArxivHtml(arxivId, destPath) {\n const id = normalizeArxivId(arxivId);\n const url = `${ARXIV_HTML_BASE}${id}`;\n try {\n const response = await fetch(url, {\n headers: { \"User-Agent\": USER_AGENT },\n });\n if (!response.ok) {\n return {\n success: false,\n error: `HTTP ${response.status} ${response.statusText}`,\n };\n }\n const contentType = response.headers.get(\"content-type\");\n if (!isHtmlContentType(contentType)) {\n return {\n success: false,\n error: `Unexpected Content-Type: ${contentType ?? \"none\"} (expected text/html)`,\n };\n }\n const text = await response.text();\n await mkdir(dirname(destPath), { recursive: true });\n await writeFile(destPath, text, \"utf-8\");\n return { success: true, size: Buffer.byteLength(text) };\n }\n catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n//# sourceMappingURL=arxiv-html.js.map","/*! https://mths.be/he v1.2.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t// All astral symbols.\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\t// All ASCII symbols (not just printable ASCII) except those listed in the\n\t// first column of the overrides table.\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides\n\tvar regexAsciiWhitelist = /[\\x01-\\x7F]/g;\n\t// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or\n\t// code points listed in the first column of the overrides table on\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.\n\tvar regexBmpWhitelist = /[\\x01-\\t\\x0B\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g;\n\n\tvar regexEncodeNonAscii = /<\\u20D2|=\\u20E5|>\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '&quot;',\n\t\t'&': '&amp;',\n\t\t'\\'': '&#x27;',\n\t\t'<': '&lt;',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '&gt;',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '&#x60;'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;')\n\t\t\t\t\t.replace(/&#x66;&#x6A;/g, '&fjlig;');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&amp`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `&#119558;`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `&#x1D306;`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst he_1 = require(\"he\");\n/**\n * Node Class as base class for TextNode and HTMLElement.\n */\nclass Node {\n constructor(parentNode = null, range) {\n this.parentNode = parentNode;\n this.childNodes = [];\n Object.defineProperty(this, 'range', {\n enumerable: false,\n writable: true,\n configurable: true,\n value: range !== null && range !== void 0 ? range : [-1, -1]\n });\n }\n /**\n * Remove current node\n */\n remove() {\n if (this.parentNode) {\n const children = this.parentNode.childNodes;\n this.parentNode.childNodes = children.filter((child) => {\n return this !== child;\n });\n this.parentNode = null;\n }\n return this;\n }\n get innerText() {\n return this.rawText;\n }\n get textContent() {\n return (0, he_1.decode)(this.rawText);\n }\n set textContent(val) {\n this.rawText = (0, he_1.encode)(val);\n }\n}\nexports.default = Node;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar NodeType;\n(function (NodeType) {\n NodeType[NodeType[\"ELEMENT_NODE\"] = 1] = \"ELEMENT_NODE\";\n NodeType[NodeType[\"TEXT_NODE\"] = 3] = \"TEXT_NODE\";\n NodeType[NodeType[\"COMMENT_NODE\"] = 8] = \"COMMENT_NODE\";\n})(NodeType || (NodeType = {}));\nexports.default = NodeType;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst node_1 = __importDefault(require(\"./node\"));\nconst type_1 = __importDefault(require(\"./type\"));\nclass CommentNode extends node_1.default {\n clone() {\n return new CommentNode(this.rawText, null, undefined, this.rawTagName);\n }\n constructor(rawText, parentNode = null, range, rawTagName = '!--') {\n super(parentNode, range);\n this.rawText = rawText;\n this.rawTagName = rawTagName;\n /**\n * Node Type declaration.\n * @type {Number}\n */\n this.nodeType = type_1.default.COMMENT_NODE;\n }\n /**\n * Get unescaped text value of current node and its children.\n * @return {string} text content\n */\n get text() {\n return this.rawText;\n }\n toString() {\n return `<!--${this.rawText}-->`;\n }\n}\nexports.default = CommentNode;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0;\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType = exports.ElementType || (exports.ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\nexports.isTag = isTag;\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexports.Root = ElementType.Root;\n/** Type for Text */\nexports.Text = ElementType.Text;\n/** Type for <? ... ?> */\nexports.Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexports.Comment = ElementType.Comment;\n/** Type for <script> tags */\nexports.Script = ElementType.Script;\n/** Type for <style> tags */\nexports.Style = ElementType.Style;\n/** Type for Any tag */\nexports.Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexports.CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexports.Doctype = ElementType.Doctype;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.CDATA = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nvar Node = /** @class */ (function () {\n function Node() {\n /** Parent of the node */\n this.parent = null;\n /** Previous sibling */\n this.prev = null;\n /** Next sibling */\n this.next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n this.startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n this.endIndex = null;\n }\n Object.defineProperty(Node.prototype, \"parentNode\", {\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.parent;\n },\n set: function (parent) {\n this.parent = parent;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"previousSibling\", {\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.prev;\n },\n set: function (prev) {\n this.prev = prev;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"nextSibling\", {\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.next;\n },\n set: function (next) {\n this.next = next;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Clone this node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n Node.prototype.cloneNode = function (recursive) {\n if (recursive === void 0) { recursive = false; }\n return cloneNode(this, recursive);\n };\n return Node;\n}());\nexports.Node = Node;\n/**\n * A node that contains some data.\n */\nvar DataNode = /** @class */ (function (_super) {\n __extends(DataNode, _super);\n /**\n * @param data The content of the data node\n */\n function DataNode(data) {\n var _this = _super.call(this) || this;\n _this.data = data;\n return _this;\n }\n Object.defineProperty(DataNode.prototype, \"nodeValue\", {\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.data;\n },\n set: function (data) {\n this.data = data;\n },\n enumerable: false,\n configurable: true\n });\n return DataNode;\n}(Node));\nexports.DataNode = DataNode;\n/**\n * Text within the document.\n */\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.Text;\n return _this;\n }\n Object.defineProperty(Text.prototype, \"nodeType\", {\n get: function () {\n return 3;\n },\n enumerable: false,\n configurable: true\n });\n return Text;\n}(DataNode));\nexports.Text = Text;\n/**\n * Comments within the document.\n */\nvar Comment = /** @class */ (function (_super) {\n __extends(Comment, _super);\n function Comment() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.Comment;\n return _this;\n }\n Object.defineProperty(Comment.prototype, \"nodeType\", {\n get: function () {\n return 8;\n },\n enumerable: false,\n configurable: true\n });\n return Comment;\n}(DataNode));\nexports.Comment = Comment;\n/**\n * Processing instructions, including doc types.\n */\nvar ProcessingInstruction = /** @class */ (function (_super) {\n __extends(ProcessingInstruction, _super);\n function ProcessingInstruction(name, data) {\n var _this = _super.call(this, data) || this;\n _this.name = name;\n _this.type = domelementtype_1.ElementType.Directive;\n return _this;\n }\n Object.defineProperty(ProcessingInstruction.prototype, \"nodeType\", {\n get: function () {\n return 1;\n },\n enumerable: false,\n configurable: true\n });\n return ProcessingInstruction;\n}(DataNode));\nexports.ProcessingInstruction = ProcessingInstruction;\n/**\n * A `Node` that can have children.\n */\nvar NodeWithChildren = /** @class */ (function (_super) {\n __extends(NodeWithChildren, _super);\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n function NodeWithChildren(children) {\n var _this = _super.call(this) || this;\n _this.children = children;\n return _this;\n }\n Object.defineProperty(NodeWithChildren.prototype, \"firstChild\", {\n // Aliases\n /** First child of the node. */\n get: function () {\n var _a;\n return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NodeWithChildren.prototype, \"lastChild\", {\n /** Last child of the node. */\n get: function () {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NodeWithChildren.prototype, \"childNodes\", {\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.children;\n },\n set: function (children) {\n this.children = children;\n },\n enumerable: false,\n configurable: true\n });\n return NodeWithChildren;\n}(Node));\nexports.NodeWithChildren = NodeWithChildren;\nvar CDATA = /** @class */ (function (_super) {\n __extends(CDATA, _super);\n function CDATA() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.CDATA;\n return _this;\n }\n Object.defineProperty(CDATA.prototype, \"nodeType\", {\n get: function () {\n return 4;\n },\n enumerable: false,\n configurable: true\n });\n return CDATA;\n}(NodeWithChildren));\nexports.CDATA = CDATA;\n/**\n * The root node of the document.\n */\nvar Document = /** @class */ (function (_super) {\n __extends(Document, _super);\n function Document() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.Root;\n return _this;\n }\n Object.defineProperty(Document.prototype, \"nodeType\", {\n get: function () {\n return 9;\n },\n enumerable: false,\n configurable: true\n });\n return Document;\n}(NodeWithChildren));\nexports.Document = Document;\n/**\n * An element within the DOM.\n */\nvar Element = /** @class */ (function (_super) {\n __extends(Element, _super);\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n */\n function Element(name, attribs, children, type) {\n if (children === void 0) { children = []; }\n if (type === void 0) { type = name === \"script\"\n ? domelementtype_1.ElementType.Script\n : name === \"style\"\n ? domelementtype_1.ElementType.Style\n : domelementtype_1.ElementType.Tag; }\n var _this = _super.call(this, children) || this;\n _this.name = name;\n _this.attribs = attribs;\n _this.type = type;\n return _this;\n }\n Object.defineProperty(Element.prototype, \"nodeType\", {\n get: function () {\n return 1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Element.prototype, \"tagName\", {\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.name;\n },\n set: function (name) {\n this.name = name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Element.prototype, \"attributes\", {\n get: function () {\n var _this = this;\n return Object.keys(this.attribs).map(function (name) {\n var _a, _b;\n return ({\n name: name,\n value: _this.attribs[name],\n namespace: (_a = _this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n prefix: (_b = _this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n });\n });\n },\n enumerable: false,\n configurable: true\n });\n return Element;\n}(NodeWithChildren));\nexports.Element = Element;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n return (0, domelementtype_1.isTag)(node);\n}\nexports.isTag = isTag;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n return node.type === domelementtype_1.ElementType.CDATA;\n}\nexports.isCDATA = isCDATA;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n return node.type === domelementtype_1.ElementType.Text;\n}\nexports.isText = isText;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n return node.type === domelementtype_1.ElementType.Comment;\n}\nexports.isComment = isComment;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n return node.type === domelementtype_1.ElementType.Directive;\n}\nexports.isDirective = isDirective;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n return node.type === domelementtype_1.ElementType.Root;\n}\nexports.isDocument = isDocument;\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nfunction hasChildren(node) {\n return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\nexports.hasChildren = hasChildren;\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive) {\n if (recursive === void 0) { recursive = false; }\n var result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n var children = recursive ? cloneChildren(node.children) : [];\n var clone_1 = new Element(node.name, __assign({}, node.attribs), children);\n children.forEach(function (child) { return (child.parent = clone_1); });\n if (node.namespace != null) {\n clone_1.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone_1[\"x-attribsNamespace\"] = __assign({}, node[\"x-attribsNamespace\"]);\n }\n if (node[\"x-attribsPrefix\"]) {\n clone_1[\"x-attribsPrefix\"] = __assign({}, node[\"x-attribsPrefix\"]);\n }\n result = clone_1;\n }\n else if (isCDATA(node)) {\n var children = recursive ? cloneChildren(node.children) : [];\n var clone_2 = new CDATA(children);\n children.forEach(function (child) { return (child.parent = clone_2); });\n result = clone_2;\n }\n else if (isDocument(node)) {\n var children = recursive ? cloneChildren(node.children) : [];\n var clone_3 = new Document(children);\n children.forEach(function (child) { return (child.parent = clone_3); });\n if (node[\"x-mode\"]) {\n clone_3[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone_3;\n }\n else if (isDirective(node)) {\n var instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(\"Not implemented yet: \".concat(node.type));\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\nexports.cloneNode = cloneNode;\nfunction cloneChildren(childs) {\n var children = childs.map(function (child) { return cloneNode(child, true); });\n for (var i = 1; i < children.length; i++) {\n children[i].prev = children[i - 1];\n children[i - 1].next = children[i];\n }\n return children;\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DomHandler = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\nvar node_js_1 = require(\"./node.js\");\n__exportStar(require(\"./node.js\"), exports);\n// Default options\nvar defaultOpts = {\n withStartIndices: false,\n withEndIndices: false,\n xmlMode: false,\n};\nvar DomHandler = /** @class */ (function () {\n /**\n * @param callback Called once parsing has completed.\n * @param options Settings for the handler.\n * @param elementCB Callback whenever a tag is closed.\n */\n function DomHandler(callback, options, elementCB) {\n /** The elements of the DOM */\n this.dom = [];\n /** The root element for the DOM */\n this.root = new node_js_1.Document(this.dom);\n /** Indicated whether parsing has been completed. */\n this.done = false;\n /** Stack of open tags. */\n this.tagStack = [this.root];\n /** A data node that is still being written to. */\n this.lastNode = null;\n /** Reference to the parser instance. Used for location information. */\n this.parser = null;\n // Make it possible to skip arguments, for backwards-compatibility\n if (typeof options === \"function\") {\n elementCB = options;\n options = defaultOpts;\n }\n if (typeof callback === \"object\") {\n options = callback;\n callback = undefined;\n }\n this.callback = callback !== null && callback !== void 0 ? callback : null;\n this.options = options !== null && options !== void 0 ? options : defaultOpts;\n this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n }\n DomHandler.prototype.onparserinit = function (parser) {\n this.parser = parser;\n };\n // Resets the handler back to starting state\n DomHandler.prototype.onreset = function () {\n this.dom = [];\n this.root = new node_js_1.Document(this.dom);\n this.done = false;\n this.tagStack = [this.root];\n this.lastNode = null;\n this.parser = null;\n };\n // Signals the handler that parsing is done\n DomHandler.prototype.onend = function () {\n if (this.done)\n return;\n this.done = true;\n this.parser = null;\n this.handleCallback(null);\n };\n DomHandler.prototype.onerror = function (error) {\n this.handleCallback(error);\n };\n DomHandler.prototype.onclosetag = function () {\n this.lastNode = null;\n var elem = this.tagStack.pop();\n if (this.options.withEndIndices) {\n elem.endIndex = this.parser.endIndex;\n }\n if (this.elementCB)\n this.elementCB(elem);\n };\n DomHandler.prototype.onopentag = function (name, attribs) {\n var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;\n var element = new node_js_1.Element(name, attribs, undefined, type);\n this.addNode(element);\n this.tagStack.push(element);\n };\n DomHandler.prototype.ontext = function (data) {\n var lastNode = this.lastNode;\n if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {\n lastNode.data += data;\n if (this.options.withEndIndices) {\n lastNode.endIndex = this.parser.endIndex;\n }\n }\n else {\n var node = new node_js_1.Text(data);\n this.addNode(node);\n this.lastNode = node;\n }\n };\n DomHandler.prototype.oncomment = function (data) {\n if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {\n this.lastNode.data += data;\n return;\n }\n var node = new node_js_1.Comment(data);\n this.addNode(node);\n this.lastNode = node;\n };\n DomHandler.prototype.oncommentend = function () {\n this.lastNode = null;\n };\n DomHandler.prototype.oncdatastart = function () {\n var text = new node_js_1.Text(\"\");\n var node = new node_js_1.CDATA([text]);\n this.addNode(node);\n text.parent = node;\n this.lastNode = text;\n };\n DomHandler.prototype.oncdataend = function () {\n this.lastNode = null;\n };\n DomHandler.prototype.onprocessinginstruction = function (name, data) {\n var node = new node_js_1.ProcessingInstruction(name, data);\n this.addNode(node);\n };\n DomHandler.prototype.handleCallback = function (error) {\n if (typeof this.callback === \"function\") {\n this.callback(error, this.dom);\n }\n else if (error) {\n throw error;\n }\n };\n DomHandler.prototype.addNode = function (node) {\n var parent = this.tagStack[this.tagStack.length - 1];\n var previousSibling = parent.children[parent.children.length - 1];\n if (this.options.withStartIndices) {\n node.startIndex = this.parser.startIndex;\n }\n if (this.options.withEndIndices) {\n node.endIndex = this.parser.endIndex;\n }\n parent.children.push(node);\n if (previousSibling) {\n node.prev = previousSibling;\n previousSibling.next = node;\n }\n node.parent = parent;\n this.lastNode = null;\n };\n return DomHandler;\n}());\nexports.DomHandler = DomHandler;\nexports.default = DomHandler;\n","\"use strict\";\n// Generated using scripts/write-decode-map.ts\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map(function (c) { return c.charCodeAt(0); }));\n//# sourceMappingURL=decode-data-html.js.map","\"use strict\";\n// Generated using scripts/write-decode-map.ts\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n .split(\"\")\n .map(function (c) { return c.charCodeAt(0); }));\n//# sourceMappingURL=decode-data-xml.js.map","\"use strict\";\n// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.replaceCodePoint = exports.fromCodePoint = void 0;\nvar decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexports.fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n var output = \"\";\n if (codePoint > 0xffff) {\n codePoint -= 0x10000;\n output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n codePoint = 0xdc00 | (codePoint & 0x3ff);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nfunction replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n return 0xfffd;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\nexports.replaceCodePoint = replaceCodePoint;\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nfunction decodeCodePoint(codePoint) {\n return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));\n}\nexports.default = decodeCodePoint;\n//# sourceMappingURL=decode_codepoint.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;\nvar decode_data_html_js_1 = __importDefault(require(\"./generated/decode-data-html.js\"));\nexports.htmlDecodeTree = decode_data_html_js_1.default;\nvar decode_data_xml_js_1 = __importDefault(require(\"./generated/decode-data-xml.js\"));\nexports.xmlDecodeTree = decode_data_xml_js_1.default;\nvar decode_codepoint_js_1 = __importStar(require(\"./decode_codepoint.js\"));\nexports.decodeCodePoint = decode_codepoint_js_1.default;\nvar decode_codepoint_js_2 = require(\"./decode_codepoint.js\");\nObject.defineProperty(exports, \"replaceCodePoint\", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });\nObject.defineProperty(exports, \"fromCodePoint\", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nvar TO_LOWER_BIT = 32;\nvar BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nvar DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nvar EntityDecoder = /** @class */ (function () {\n function EntityDecoder(\n /** The tree used to decode entities. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n }\n /** Resets the instance to make it reusable. */\n EntityDecoder.prototype.startEntity = function (decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n };\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param string The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n EntityDecoder.prototype.write = function (str, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (str.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(str, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(str, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(str, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(str, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(str, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(str, offset);\n }\n }\n };\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n EntityDecoder.prototype.stateNumericStart = function (str, offset) {\n if (offset >= str.length) {\n return -1;\n }\n if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(str, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(str, offset);\n };\n EntityDecoder.prototype.addToNumericResult = function (str, start, end, base) {\n if (start !== end) {\n var digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n parseInt(str.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n };\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n EntityDecoder.prototype.stateNumericHex = function (str, offset) {\n var startIdx = offset;\n while (offset < str.length) {\n var char = str.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 16);\n return -1;\n };\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n EntityDecoder.prototype.stateNumericDecimal = function (str, offset) {\n var startIdx = offset;\n while (offset < str.length) {\n var char = str.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 10);\n return -1;\n };\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n EntityDecoder.prototype.emitNumericEntity = function (lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n };\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n EntityDecoder.prototype.stateNamedEntity = function (str, offset) {\n var decodeTree = this.decodeTree;\n var current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n for (; offset < str.length; offset++, this.excess++) {\n var char = str.charCodeAt(offset);\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n return -1;\n };\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n EntityDecoder.prototype.emitNotTerminatedNamedEntity = function () {\n var _a;\n var _b = this, result = _b.result, decodeTree = _b.decodeTree;\n var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n };\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n EntityDecoder.prototype.emitNamedEntityData = function (result, valueLength, consumed) {\n var decodeTree = this.decodeTree;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n };\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n EntityDecoder.prototype.end = function () {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n };\n return EntityDecoder;\n}());\nexports.EntityDecoder = EntityDecoder;\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n var ret = \"\";\n var decoder = new EntityDecoder(decodeTree, function (str) { return (ret += (0, decode_codepoint_js_1.fromCodePoint)(str)); });\n return function decodeWithTrie(str, decodeMode) {\n var lastIndex = 0;\n var offset = 0;\n while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n ret += str.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n var len = decoder.write(str, \n // Skip the \"&\"\n offset + 1);\n if (len < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + len;\n // If `len` is 0, skip the current `&` and continue.\n offset = len === 0 ? lastIndex + 1 : lastIndex;\n }\n var result = ret + str.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n ret = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nfunction determineBranch(decodeTree, current, nodeIdx, char) {\n var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n var jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n var value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIdx + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n var lo = nodeIdx;\n var hi = lo + branchCount - 1;\n while (lo <= hi) {\n var mid = (lo + hi) >>> 1;\n var midVal = decodeTree[mid];\n if (midVal < char) {\n lo = mid + 1;\n }\n else if (midVal > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nexports.determineBranch = determineBranch;\nvar htmlDecoder = getDecoder(decode_data_html_js_1.default);\nvar xmlDecoder = getDecoder(decode_data_xml_js_1.default);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nfunction decodeHTML(str, mode) {\n if (mode === void 0) { mode = DecodingMode.Legacy; }\n return htmlDecoder(str, mode);\n}\nexports.decodeHTML = decodeHTML;\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nfunction decodeHTMLAttribute(str) {\n return htmlDecoder(str, DecodingMode.Attribute);\n}\nexports.decodeHTMLAttribute = decodeHTMLAttribute;\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nfunction decodeHTMLStrict(str) {\n return htmlDecoder(str, DecodingMode.Strict);\n}\nexports.decodeHTMLStrict = decodeHTMLStrict;\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nfunction decodeXML(str) {\n return xmlDecoder(str, DecodingMode.Strict);\n}\nexports.decodeXML = decodeXML;\n//# sourceMappingURL=decode.js.map","\"use strict\";\n// Generated using scripts/write-encode-map.ts\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction restoreDiff(arr) {\n for (var i = 1; i < arr.length; i++) {\n arr[i][0] += arr[i - 1][0] + 1;\n }\n return arr;\n}\n// prettier-ignore\nexports.default = new Map(/* #__PURE__ */ restoreDiff([[9, \"&Tab;\"], [0, \"&NewLine;\"], [22, \"&excl;\"], [0, \"&quot;\"], [0, \"&num;\"], [0, \"&dollar;\"], [0, \"&percnt;\"], [0, \"&amp;\"], [0, \"&apos;\"], [0, \"&lpar;\"], [0, \"&rpar;\"], [0, \"&ast;\"], [0, \"&plus;\"], [0, \"&comma;\"], [1, \"&period;\"], [0, \"&sol;\"], [10, \"&colon;\"], [0, \"&semi;\"], [0, { v: \"&lt;\", n: 8402, o: \"&nvlt;\" }], [0, { v: \"&equals;\", n: 8421, o: \"&bne;\" }], [0, { v: \"&gt;\", n: 8402, o: \"&nvgt;\" }], [0, \"&quest;\"], [0, \"&commat;\"], [26, \"&lbrack;\"], [0, \"&bsol;\"], [0, \"&rbrack;\"], [0, \"&Hat;\"], [0, \"&lowbar;\"], [0, \"&DiacriticalGrave;\"], [5, { n: 106, o: \"&fjlig;\" }], [20, \"&lbrace;\"], [0, \"&verbar;\"], [0, \"&rbrace;\"], [34, \"&nbsp;\"], [0, \"&iexcl;\"], [0, \"&cent;\"], [0, \"&pound;\"], [0, \"&curren;\"], [0, \"&yen;\"], [0, \"&brvbar;\"], [0, \"&sect;\"], [0, \"&die;\"], [0, \"&copy;\"], [0, \"&ordf;\"], [0, \"&laquo;\"], [0, \"&not;\"], [0, \"&shy;\"], [0, \"&circledR;\"], [0, \"&macr;\"], [0, \"&deg;\"], [0, \"&PlusMinus;\"], [0, \"&sup2;\"], [0, \"&sup3;\"], [0, \"&acute;\"], [0, \"&micro;\"], [0, \"&para;\"], [0, \"&centerdot;\"], [0, \"&cedil;\"], [0, \"&sup1;\"], [0, \"&ordm;\"], [0, \"&raquo;\"], [0, \"&frac14;\"], [0, \"&frac12;\"], [0, \"&frac34;\"], [0, \"&iquest;\"], [0, \"&Agrave;\"], [0, \"&Aacute;\"], [0, \"&Acirc;\"], [0, \"&Atilde;\"], [0, \"&Auml;\"], [0, \"&angst;\"], [0, \"&AElig;\"], [0, \"&Ccedil;\"], [0, \"&Egrave;\"], [0, \"&Eacute;\"], [0, \"&Ecirc;\"], [0, \"&Euml;\"], [0, \"&Igrave;\"], [0, \"&Iacute;\"], [0, \"&Icirc;\"], [0, \"&Iuml;\"], [0, \"&ETH;\"], [0, \"&Ntilde;\"], [0, \"&Ograve;\"], [0, \"&Oacute;\"], [0, \"&Ocirc;\"], [0, \"&Otilde;\"], [0, \"&Ouml;\"], [0, \"&times;\"], [0, \"&Oslash;\"], [0, \"&Ugrave;\"], [0, \"&Uacute;\"], [0, \"&Ucirc;\"], [0, \"&Uuml;\"], [0, \"&Yacute;\"], [0, \"&THORN;\"], [0, \"&szlig;\"], [0, \"&agrave;\"], [0, \"&aacute;\"], [0, \"&acirc;\"], [0, \"&atilde;\"], [0, \"&auml;\"], [0, \"&aring;\"], [0, \"&aelig;\"], [0, \"&ccedil;\"], [0, \"&egrave;\"], [0, \"&eacute;\"], [0, \"&ecirc;\"], [0, \"&euml;\"], [0, \"&igrave;\"], [0, \"&iacute;\"], [0, \"&icirc;\"], [0, \"&iuml;\"], [0, \"&eth;\"], [0, \"&ntilde;\"], [0, \"&ograve;\"], [0, \"&oacute;\"], [0, \"&ocirc;\"], [0, \"&otilde;\"], [0, \"&ouml;\"], [0, \"&div;\"], [0, \"&oslash;\"], [0, \"&ugrave;\"], [0, \"&uacute;\"], [0, \"&ucirc;\"], [0, \"&uuml;\"], [0, \"&yacute;\"], [0, \"&thorn;\"], [0, \"&yuml;\"], [0, \"&Amacr;\"], [0, \"&amacr;\"], [0, \"&Abreve;\"], [0, \"&abreve;\"], [0, \"&Aogon;\"], [0, \"&aogon;\"], [0, \"&Cacute;\"], [0, \"&cacute;\"], [0, \"&Ccirc;\"], [0, \"&ccirc;\"], [0, \"&Cdot;\"], [0, \"&cdot;\"], [0, \"&Ccaron;\"], [0, \"&ccaron;\"], [0, \"&Dcaron;\"], [0, \"&dcaron;\"], [0, \"&Dstrok;\"], [0, \"&dstrok;\"], [0, \"&Emacr;\"], [0, \"&emacr;\"], [2, \"&Edot;\"], [0, \"&edot;\"], [0, \"&Eogon;\"], [0, \"&eogon;\"], [0, \"&Ecaron;\"], [0, \"&ecaron;\"], [0, \"&Gcirc;\"], [0, \"&gcirc;\"], [0, \"&Gbreve;\"], [0, \"&gbreve;\"], [0, \"&Gdot;\"], [0, \"&gdot;\"], [0, \"&Gcedil;\"], [1, \"&Hcirc;\"], [0, \"&hcirc;\"], [0, \"&Hstrok;\"], [0, \"&hstrok;\"], [0, \"&Itilde;\"], [0, \"&itilde;\"], [0, \"&Imacr;\"], [0, \"&imacr;\"], [2, \"&Iogon;\"], [0, \"&iogon;\"], [0, \"&Idot;\"], [0, \"&imath;\"], [0, \"&IJlig;\"], [0, \"&ijlig;\"], [0, \"&Jcirc;\"], [0, \"&jcirc;\"], [0, \"&Kcedil;\"], [0, \"&kcedil;\"], [0, \"&kgreen;\"], [0, \"&Lacute;\"], [0, \"&lacute;\"], [0, \"&Lcedil;\"], [0, \"&lcedil;\"], [0, \"&Lcaron;\"], [0, \"&lcaron;\"], [0, \"&Lmidot;\"], [0, \"&lmidot;\"], [0, \"&Lstrok;\"], [0, \"&lstrok;\"], [0, \"&Nacute;\"], [0, \"&nacute;\"], [0, \"&Ncedil;\"], [0, \"&ncedil;\"], [0, \"&Ncaron;\"], [0, \"&ncaron;\"], [0, \"&napos;\"], [0, \"&ENG;\"], [0, \"&eng;\"], [0, \"&Omacr;\"], [0, \"&omacr;\"], [2, \"&Odblac;\"], [0, \"&odblac;\"], [0, \"&OElig;\"], [0, \"&oelig;\"], [0, \"&Racute;\"], [0, \"&racute;\"], [0, \"&Rcedil;\"], [0, \"&rcedil;\"], [0, \"&Rcaron;\"], [0, \"&rcaron;\"], [0, \"&Sacute;\"], [0, \"&sacute;\"], [0, \"&Scirc;\"], [0, \"&scirc;\"], [0, \"&Scedil;\"], [0, \"&scedil;\"], [0, \"&Scaron;\"], [0, \"&scaron;\"], [0, \"&Tcedil;\"], [0, \"&tcedil;\"], [0, \"&Tcaron;\"], [0, \"&tcaron;\"], [0, \"&Tstrok;\"], [0, \"&tstrok;\"], [0, \"&Utilde;\"], [0, \"&utilde;\"], [0, \"&Umacr;\"], [0, \"&umacr;\"], [0, \"&Ubreve;\"], [0, \"&ubreve;\"], [0, \"&Uring;\"], [0, \"&uring;\"], [0, \"&Udblac;\"], [0, \"&udblac;\"], [0, \"&Uogon;\"], [0, \"&uogon;\"], [0, \"&Wcirc;\"], [0, \"&wcirc;\"], [0, \"&Ycirc;\"], [0, \"&ycirc;\"], [0, \"&Yuml;\"], [0, \"&Zacute;\"], [0, \"&zacute;\"], [0, \"&Zdot;\"], [0, \"&zdot;\"], [0, \"&Zcaron;\"], [0, \"&zcaron;\"], [19, \"&fnof;\"], [34, \"&imped;\"], [63, \"&gacute;\"], [65, \"&jmath;\"], [142, \"&circ;\"], [0, \"&caron;\"], [16, \"&breve;\"], [0, \"&DiacriticalDot;\"], [0, \"&ring;\"], [0, \"&ogon;\"], [0, \"&DiacriticalTilde;\"], [0, \"&dblac;\"], [51, \"&DownBreve;\"], [127, \"&Alpha;\"], [0, \"&Beta;\"], [0, \"&Gamma;\"], [0, \"&Delta;\"], [0, \"&Epsilon;\"], [0, \"&Zeta;\"], [0, \"&Eta;\"], [0, \"&Theta;\"], [0, \"&Iota;\"], [0, \"&Kappa;\"], [0, \"&Lambda;\"], [0, \"&Mu;\"], [0, \"&Nu;\"], [0, \"&Xi;\"], [0, \"&Omicron;\"], [0, \"&Pi;\"], [0, \"&Rho;\"], [1, \"&Sigma;\"], [0, \"&Tau;\"], [0, \"&Upsilon;\"], [0, \"&Phi;\"], [0, \"&Chi;\"], [0, \"&Psi;\"], [0, \"&ohm;\"], [7, \"&alpha;\"], [0, \"&beta;\"], [0, \"&gamma;\"], [0, \"&delta;\"], [0, \"&epsi;\"], [0, \"&zeta;\"], [0, \"&eta;\"], [0, \"&theta;\"], [0, \"&iota;\"], [0, \"&kappa;\"], [0, \"&lambda;\"], [0, \"&mu;\"], [0, \"&nu;\"], [0, \"&xi;\"], [0, \"&omicron;\"], [0, \"&pi;\"], [0, \"&rho;\"], [0, \"&sigmaf;\"], [0, \"&sigma;\"], [0, \"&tau;\"], [0, \"&upsi;\"], [0, \"&phi;\"], [0, \"&chi;\"], [0, \"&psi;\"], [0, \"&omega;\"], [7, \"&thetasym;\"], [0, \"&Upsi;\"], [2, \"&phiv;\"], [0, \"&piv;\"], [5, \"&Gammad;\"], [0, \"&digamma;\"], [18, \"&kappav;\"], [0, \"&rhov;\"], [3, \"&epsiv;\"], [0, \"&backepsilon;\"], [10, \"&IOcy;\"], [0, \"&DJcy;\"], [0, \"&GJcy;\"], [0, \"&Jukcy;\"], [0, \"&DScy;\"], [0, \"&Iukcy;\"], [0, \"&YIcy;\"], [0, \"&Jsercy;\"], [0, \"&LJcy;\"], [0, \"&NJcy;\"], [0, \"&TSHcy;\"], [0, \"&KJcy;\"], [1, \"&Ubrcy;\"], [0, \"&DZcy;\"], [0, \"&Acy;\"], [0, \"&Bcy;\"], [0, \"&Vcy;\"], [0, \"&Gcy;\"], [0, \"&Dcy;\"], [0, \"&IEcy;\"], [0, \"&ZHcy;\"], [0, \"&Zcy;\"], [0, \"&Icy;\"], [0, \"&Jcy;\"], [0, \"&Kcy;\"], [0, \"&Lcy;\"], [0, \"&Mcy;\"], [0, \"&Ncy;\"], [0, \"&Ocy;\"], [0, \"&Pcy;\"], [0, \"&Rcy;\"], [0, \"&Scy;\"], [0, \"&Tcy;\"], [0, \"&Ucy;\"], [0, \"&Fcy;\"], [0, \"&KHcy;\"], [0, \"&TScy;\"], [0, \"&CHcy;\"], [0, \"&SHcy;\"], [0, \"&SHCHcy;\"], [0, \"&HARDcy;\"], [0, \"&Ycy;\"], [0, \"&SOFTcy;\"], [0, \"&Ecy;\"], [0, \"&YUcy;\"], [0, \"&YAcy;\"], [0, \"&acy;\"], [0, \"&bcy;\"], [0, \"&vcy;\"], [0, \"&gcy;\"], [0, \"&dcy;\"], [0, \"&iecy;\"], [0, \"&zhcy;\"], [0, \"&zcy;\"], [0, \"&icy;\"], [0, \"&jcy;\"], [0, \"&kcy;\"], [0, \"&lcy;\"], [0, \"&mcy;\"], [0, \"&ncy;\"], [0, \"&ocy;\"], [0, \"&pcy;\"], [0, \"&rcy;\"], [0, \"&scy;\"], [0, \"&tcy;\"], [0, \"&ucy;\"], [0, \"&fcy;\"], [0, \"&khcy;\"], [0, \"&tscy;\"], [0, \"&chcy;\"], [0, \"&shcy;\"], [0, \"&shchcy;\"], [0, \"&hardcy;\"], [0, \"&ycy;\"], [0, \"&softcy;\"], [0, \"&ecy;\"], [0, \"&yucy;\"], [0, \"&yacy;\"], [1, \"&iocy;\"], [0, \"&djcy;\"], [0, \"&gjcy;\"], [0, \"&jukcy;\"], [0, \"&dscy;\"], [0, \"&iukcy;\"], [0, \"&yicy;\"], [0, \"&jsercy;\"], [0, \"&ljcy;\"], [0, \"&njcy;\"], [0, \"&tshcy;\"], [0, \"&kjcy;\"], [1, \"&ubrcy;\"], [0, \"&dzcy;\"], [7074, \"&ensp;\"], [0, \"&emsp;\"], [0, \"&emsp13;\"], [0, \"&emsp14;\"], [1, \"&numsp;\"], [0, \"&puncsp;\"], [0, \"&ThinSpace;\"], [0, \"&hairsp;\"], [0, \"&NegativeMediumSpace;\"], [0, \"&zwnj;\"], [0, \"&zwj;\"], [0, \"&lrm;\"], [0, \"&rlm;\"], [0, \"&dash;\"], [2, \"&ndash;\"], [0, \"&mdash;\"], [0, \"&horbar;\"], [0, \"&Verbar;\"], [1, \"&lsquo;\"], [0, \"&CloseCurlyQuote;\"], [0, \"&lsquor;\"], [1, \"&ldquo;\"], [0, \"&CloseCurlyDoubleQuote;\"], [0, \"&bdquo;\"], [1, \"&dagger;\"], [0, \"&Dagger;\"], [0, \"&bull;\"], [2, \"&nldr;\"], [0, \"&hellip;\"], [9, \"&permil;\"], [0, \"&pertenk;\"], [0, \"&prime;\"], [0, \"&Prime;\"], [0, \"&tprime;\"], [0, \"&backprime;\"], [3, \"&lsaquo;\"], [0, \"&rsaquo;\"], [3, \"&oline;\"], [2, \"&caret;\"], [1, \"&hybull;\"], [0, \"&frasl;\"], [10, \"&bsemi;\"], [7, \"&qprime;\"], [7, { v: \"&MediumSpace;\", n: 8202, o: \"&ThickSpace;\" }], [0, \"&NoBreak;\"], [0, \"&af;\"], [0, \"&InvisibleTimes;\"], [0, \"&ic;\"], [72, \"&euro;\"], [46, \"&tdot;\"], [0, \"&DotDot;\"], [37, \"&complexes;\"], [2, \"&incare;\"], [4, \"&gscr;\"], [0, \"&hamilt;\"], [0, \"&Hfr;\"], [0, \"&Hopf;\"], [0, \"&planckh;\"], [0, \"&hbar;\"], [0, \"&imagline;\"], [0, \"&Ifr;\"], [0, \"&lagran;\"], [0, \"&ell;\"], [1, \"&naturals;\"], [0, \"&numero;\"], [0, \"&copysr;\"], [0, \"&weierp;\"], [0, \"&Popf;\"], [0, \"&Qopf;\"], [0, \"&realine;\"], [0, \"&real;\"], [0, \"&reals;\"], [0, \"&rx;\"], [3, \"&trade;\"], [1, \"&integers;\"], [2, \"&mho;\"], [0, \"&zeetrf;\"], [0, \"&iiota;\"], [2, \"&bernou;\"], [0, \"&Cayleys;\"], [1, \"&escr;\"], [0, \"&Escr;\"], [0, \"&Fouriertrf;\"], [1, \"&Mellintrf;\"], [0, \"&order;\"], [0, \"&alefsym;\"], [0, \"&beth;\"], [0, \"&gimel;\"], [0, \"&daleth;\"], [12, \"&CapitalDifferentialD;\"], [0, \"&dd;\"], [0, \"&ee;\"], [0, \"&ii;\"], [10, \"&frac13;\"], [0, \"&frac23;\"], [0, \"&frac15;\"], [0, \"&frac25;\"], [0, \"&frac35;\"], [0, \"&frac45;\"], [0, \"&frac16;\"], [0, \"&frac56;\"], [0, \"&frac18;\"], [0, \"&frac38;\"], [0, \"&frac58;\"], [0, \"&frac78;\"], [49, \"&larr;\"], [0, \"&ShortUpArrow;\"], [0, \"&rarr;\"], [0, \"&darr;\"], [0, \"&harr;\"], [0, \"&updownarrow;\"], [0, \"&nwarr;\"], [0, \"&nearr;\"], [0, \"&LowerRightArrow;\"], [0, \"&LowerLeftArrow;\"], [0, \"&nlarr;\"], [0, \"&nrarr;\"], [1, { v: \"&rarrw;\", n: 824, o: \"&nrarrw;\" }], [0, \"&Larr;\"], [0, \"&Uarr;\"], [0, \"&Rarr;\"], [0, \"&Darr;\"], [0, \"&larrtl;\"], [0, \"&rarrtl;\"], [0, \"&LeftTeeArrow;\"], [0, \"&mapstoup;\"], [0, \"&map;\"], [0, \"&DownTeeArrow;\"], [1, \"&hookleftarrow;\"], [0, \"&hookrightarrow;\"], [0, \"&larrlp;\"], [0, \"&looparrowright;\"], [0, \"&harrw;\"], [0, \"&nharr;\"], [1, \"&lsh;\"], [0, \"&rsh;\"], [0, \"&ldsh;\"], [0, \"&rdsh;\"], [1, \"&crarr;\"], [0, \"&cularr;\"], [0, \"&curarr;\"], [2, \"&circlearrowleft;\"], [0, \"&circlearrowright;\"], [0, \"&leftharpoonup;\"], [0, \"&DownLeftVector;\"], [0, \"&RightUpVector;\"], [0, \"&LeftUpVector;\"], [0, \"&rharu;\"], [0, \"&DownRightVector;\"], [0, \"&dharr;\"], [0, \"&dharl;\"], [0, \"&RightArrowLeftArrow;\"], [0, \"&udarr;\"], [0, \"&LeftArrowRightArrow;\"], [0, \"&leftleftarrows;\"], [0, \"&upuparrows;\"], [0, \"&rightrightarrows;\"], [0, \"&ddarr;\"], [0, \"&leftrightharpoons;\"], [0, \"&Equilibrium;\"], [0, \"&nlArr;\"], [0, \"&nhArr;\"], [0, \"&nrArr;\"], [0, \"&DoubleLeftArrow;\"], [0, \"&DoubleUpArrow;\"], [0, \"&DoubleRightArrow;\"], [0, \"&dArr;\"], [0, \"&DoubleLeftRightArrow;\"], [0, \"&DoubleUpDownArrow;\"], [0, \"&nwArr;\"], [0, \"&neArr;\"], [0, \"&seArr;\"], [0, \"&swArr;\"], [0, \"&lAarr;\"], [0, \"&rAarr;\"], [1, \"&zigrarr;\"], [6, \"&larrb;\"], [0, \"&rarrb;\"], [15, \"&DownArrowUpArrow;\"], [7, \"&loarr;\"], [0, \"&roarr;\"], [0, \"&hoarr;\"], [0, \"&forall;\"], [0, \"&comp;\"], [0, { v: \"&part;\", n: 824, o: \"&npart;\" }], [0, \"&exist;\"], [0, \"&nexist;\"], [0, \"&empty;\"], [1, \"&Del;\"], [0, \"&Element;\"], [0, \"&NotElement;\"], [1, \"&ni;\"], [0, \"&notni;\"], [2, \"&prod;\"], [0, \"&coprod;\"], [0, \"&sum;\"], [0, \"&minus;\"], [0, \"&MinusPlus;\"], [0, \"&dotplus;\"], [1, \"&Backslash;\"], [0, \"&lowast;\"], [0, \"&compfn;\"], [1, \"&radic;\"], [2, \"&prop;\"], [0, \"&infin;\"], [0, \"&angrt;\"], [0, { v: \"&ang;\", n: 8402, o: \"&nang;\" }], [0, \"&angmsd;\"], [0, \"&angsph;\"], [0, \"&mid;\"], [0, \"&nmid;\"], [0, \"&DoubleVerticalBar;\"], [0, \"&NotDoubleVerticalBar;\"], [0, \"&and;\"], [0, \"&or;\"], [0, { v: \"&cap;\", n: 65024, o: \"&caps;\" }], [0, { v: \"&cup;\", n: 65024, o: \"&cups;\" }], [0, \"&int;\"], [0, \"&Int;\"], [0, \"&iiint;\"], [0, \"&conint;\"], [0, \"&Conint;\"], [0, \"&Cconint;\"], [0, \"&cwint;\"], [0, \"&ClockwiseContourIntegral;\"], [0, \"&awconint;\"], [0, \"&there4;\"], [0, \"&becaus;\"], [0, \"&ratio;\"], [0, \"&Colon;\"], [0, \"&dotminus;\"], [1, \"&mDDot;\"], [0, \"&homtht;\"], [0, { v: \"&sim;\", n: 8402, o: \"&nvsim;\" }], [0, { v: \"&backsim;\", n: 817, o: \"&race;\" }], [0, { v: \"&ac;\", n: 819, o: \"&acE;\" }], [0, \"&acd;\"], [0, \"&VerticalTilde;\"], [0, \"&NotTilde;\"], [0, { v: \"&eqsim;\", n: 824, o: \"&nesim;\" }], [0, \"&sime;\"], [0, \"&NotTildeEqual;\"], [0, \"&cong;\"], [0, \"&simne;\"], [0, \"&ncong;\"], [0, \"&ap;\"], [0, \"&nap;\"], [0, \"&ape;\"], [0, { v: \"&apid;\", n: 824, o: \"&napid;\" }], [0, \"&backcong;\"], [0, { v: \"&asympeq;\", n: 8402, o: \"&nvap;\" }], [0, { v: \"&bump;\", n: 824, o: \"&nbump;\" }], [0, { v: \"&bumpe;\", n: 824, o: \"&nbumpe;\" }], [0, { v: \"&doteq;\", n: 824, o: \"&nedot;\" }], [0, \"&doteqdot;\"], [0, \"&efDot;\"], [0, \"&erDot;\"], [0, \"&Assign;\"], [0, \"&ecolon;\"], [0, \"&ecir;\"], [0, \"&circeq;\"], [1, \"&wedgeq;\"], [0, \"&veeeq;\"], [1, \"&triangleq;\"], [2, \"&equest;\"], [0, \"&ne;\"], [0, { v: \"&Congruent;\", n: 8421, o: \"&bnequiv;\" }], [0, \"&nequiv;\"], [1, { v: \"&le;\", n: 8402, o: \"&nvle;\" }], [0, { v: \"&ge;\", n: 8402, o: \"&nvge;\" }], [0, { v: \"&lE;\", n: 824, o: \"&nlE;\" }], [0, { v: \"&gE;\", n: 824, o: \"&ngE;\" }], [0, { v: \"&lnE;\", n: 65024, o: \"&lvertneqq;\" }], [0, { v: \"&gnE;\", n: 65024, o: \"&gvertneqq;\" }], [0, { v: \"&ll;\", n: new Map(/* #__PURE__ */ restoreDiff([[824, \"&nLtv;\"], [7577, \"&nLt;\"]])) }], [0, { v: \"&gg;\", n: new Map(/* #__PURE__ */ restoreDiff([[824, \"&nGtv;\"], [7577, \"&nGt;\"]])) }], [0, \"&between;\"], [0, \"&NotCupCap;\"], [0, \"&nless;\"], [0, \"&ngt;\"], [0, \"&nle;\"], [0, \"&nge;\"], [0, \"&lesssim;\"], [0, \"&GreaterTilde;\"], [0, \"&nlsim;\"], [0, \"&ngsim;\"], [0, \"&LessGreater;\"], [0, \"&gl;\"], [0, \"&NotLessGreater;\"], [0, \"&NotGreaterLess;\"], [0, \"&pr;\"], [0, \"&sc;\"], [0, \"&prcue;\"], [0, \"&sccue;\"], [0, \"&PrecedesTilde;\"], [0, { v: \"&scsim;\", n: 824, o: \"&NotSucceedsTilde;\" }], [0, \"&NotPrecedes;\"], [0, \"&NotSucceeds;\"], [0, { v: \"&sub;\", n: 8402, o: \"&NotSubset;\" }], [0, { v: \"&sup;\", n: 8402, o: \"&NotSuperset;\" }], [0, \"&nsub;\"], [0, \"&nsup;\"], [0, \"&sube;\"], [0, \"&supe;\"], [0, \"&NotSubsetEqual;\"], [0, \"&NotSupersetEqual;\"], [0, { v: \"&subne;\", n: 65024, o: \"&varsubsetneq;\" }], [0, { v: \"&supne;\", n: 65024, o: \"&varsupsetneq;\" }], [1, \"&cupdot;\"], [0, \"&UnionPlus;\"], [0, { v: \"&sqsub;\", n: 824, o: \"&NotSquareSubset;\" }], [0, { v: \"&sqsup;\", n: 824, o: \"&NotSquareSuperset;\" }], [0, \"&sqsube;\"], [0, \"&sqsupe;\"], [0, { v: \"&sqcap;\", n: 65024, o: \"&sqcaps;\" }], [0, { v: \"&sqcup;\", n: 65024, o: \"&sqcups;\" }], [0, \"&CirclePlus;\"], [0, \"&CircleMinus;\"], [0, \"&CircleTimes;\"], [0, \"&osol;\"], [0, \"&CircleDot;\"], [0, \"&circledcirc;\"], [0, \"&circledast;\"], [1, \"&circleddash;\"], [0, \"&boxplus;\"], [0, \"&boxminus;\"], [0, \"&boxtimes;\"], [0, \"&dotsquare;\"], [0, \"&RightTee;\"], [0, \"&dashv;\"], [0, \"&DownTee;\"], [0, \"&bot;\"], [1, \"&models;\"], [0, \"&DoubleRightTee;\"], [0, \"&Vdash;\"], [0, \"&Vvdash;\"], [0, \"&VDash;\"], [0, \"&nvdash;\"], [0, \"&nvDash;\"], [0, \"&nVdash;\"], [0, \"&nVDash;\"], [0, \"&prurel;\"], [1, \"&LeftTriangle;\"], [0, \"&RightTriangle;\"], [0, { v: \"&LeftTriangleEqual;\", n: 8402, o: \"&nvltrie;\" }], [0, { v: \"&RightTriangleEqual;\", n: 8402, o: \"&nvrtrie;\" }], [0, \"&origof;\"], [0, \"&imof;\"], [0, \"&multimap;\"], [0, \"&hercon;\"], [0, \"&intcal;\"], [0, \"&veebar;\"], [1, \"&barvee;\"], [0, \"&angrtvb;\"], [0, \"&lrtri;\"], [0, \"&bigwedge;\"], [0, \"&bigvee;\"], [0, \"&bigcap;\"], [0, \"&bigcup;\"], [0, \"&diam;\"], [0, \"&sdot;\"], [0, \"&sstarf;\"], [0, \"&divideontimes;\"], [0, \"&bowtie;\"], [0, \"&ltimes;\"], [0, \"&rtimes;\"], [0, \"&leftthreetimes;\"], [0, \"&rightthreetimes;\"], [0, \"&backsimeq;\"], [0, \"&curlyvee;\"], [0, \"&curlywedge;\"], [0, \"&Sub;\"], [0, \"&Sup;\"], [0, \"&Cap;\"], [0, \"&Cup;\"], [0, \"&fork;\"], [0, \"&epar;\"], [0, \"&lessdot;\"], [0, \"&gtdot;\"], [0, { v: \"&Ll;\", n: 824, o: \"&nLl;\" }], [0, { v: \"&Gg;\", n: 824, o: \"&nGg;\" }], [0, { v: \"&leg;\", n: 65024, o: \"&lesg;\" }], [0, { v: \"&gel;\", n: 65024, o: \"&gesl;\" }], [2, \"&cuepr;\"], [0, \"&cuesc;\"], [0, \"&NotPrecedesSlantEqual;\"], [0, \"&NotSucceedsSlantEqual;\"], [0, \"&NotSquareSubsetEqual;\"], [0, \"&NotSquareSupersetEqual;\"], [2, \"&lnsim;\"], [0, \"&gnsim;\"], [0, \"&precnsim;\"], [0, \"&scnsim;\"], [0, \"&nltri;\"], [0, \"&NotRightTriangle;\"], [0, \"&nltrie;\"], [0, \"&NotRightTriangleEqual;\"], [0, \"&vellip;\"], [0, \"&ctdot;\"], [0, \"&utdot;\"], [0, \"&dtdot;\"], [0, \"&disin;\"], [0, \"&isinsv;\"], [0, \"&isins;\"], [0, { v: \"&isindot;\", n: 824, o: \"&notindot;\" }], [0, \"&notinvc;\"], [0, \"&notinvb;\"], [1, { v: \"&isinE;\", n: 824, o: \"&notinE;\" }], [0, \"&nisd;\"], [0, \"&xnis;\"], [0, \"&nis;\"], [0, \"&notnivc;\"], [0, \"&notnivb;\"], [6, \"&barwed;\"], [0, \"&Barwed;\"], [1, \"&lceil;\"], [0, \"&rceil;\"], [0, \"&LeftFloor;\"], [0, \"&rfloor;\"], [0, \"&drcrop;\"], [0, \"&dlcrop;\"], [0, \"&urcrop;\"], [0, \"&ulcrop;\"], [0, \"&bnot;\"], [1, \"&profline;\"], [0, \"&profsurf;\"], [1, \"&telrec;\"], [0, \"&target;\"], [5, \"&ulcorn;\"], [0, \"&urcorn;\"], [0, \"&dlcorn;\"], [0, \"&drcorn;\"], [2, \"&frown;\"], [0, \"&smile;\"], [9, \"&cylcty;\"], [0, \"&profalar;\"], [7, \"&topbot;\"], [6, \"&ovbar;\"], [1, \"&solbar;\"], [60, \"&angzarr;\"], [51, \"&lmoustache;\"], [0, \"&rmoustache;\"], [2, \"&OverBracket;\"], [0, \"&bbrk;\"], [0, \"&bbrktbrk;\"], [37, \"&OverParenthesis;\"], [0, \"&UnderParenthesis;\"], [0, \"&OverBrace;\"], [0, \"&UnderBrace;\"], [2, \"&trpezium;\"], [4, \"&elinters;\"], [59, \"&blank;\"], [164, \"&circledS;\"], [55, \"&boxh;\"], [1, \"&boxv;\"], [9, \"&boxdr;\"], [3, \"&boxdl;\"], [3, \"&boxur;\"], [3, \"&boxul;\"], [3, \"&boxvr;\"], [7, \"&boxvl;\"], [7, \"&boxhd;\"], [7, \"&boxhu;\"], [7, \"&boxvh;\"], [19, \"&boxH;\"], [0, \"&boxV;\"], [0, \"&boxdR;\"], [0, \"&boxDr;\"], [0, \"&boxDR;\"], [0, \"&boxdL;\"], [0, \"&boxDl;\"], [0, \"&boxDL;\"], [0, \"&boxuR;\"], [0, \"&boxUr;\"], [0, \"&boxUR;\"], [0, \"&boxuL;\"], [0, \"&boxUl;\"], [0, \"&boxUL;\"], [0, \"&boxvR;\"], [0, \"&boxVr;\"], [0, \"&boxVR;\"], [0, \"&boxvL;\"], [0, \"&boxVl;\"], [0, \"&boxVL;\"], [0, \"&boxHd;\"], [0, \"&boxhD;\"], [0, \"&boxHD;\"], [0, \"&boxHu;\"], [0, \"&boxhU;\"], [0, \"&boxHU;\"], [0, \"&boxvH;\"], [0, \"&boxVh;\"], [0, \"&boxVH;\"], [19, \"&uhblk;\"], [3, \"&lhblk;\"], [3, \"&block;\"], [8, \"&blk14;\"], [0, \"&blk12;\"], [0, \"&blk34;\"], [13, \"&square;\"], [8, \"&blacksquare;\"], [0, \"&EmptyVerySmallSquare;\"], [1, \"&rect;\"], [0, \"&marker;\"], [2, \"&fltns;\"], [1, \"&bigtriangleup;\"], [0, \"&blacktriangle;\"], [0, \"&triangle;\"], [2, \"&blacktriangleright;\"], [0, \"&rtri;\"], [3, \"&bigtriangledown;\"], [0, \"&blacktriangledown;\"], [0, \"&dtri;\"], [2, \"&blacktriangleleft;\"], [0, \"&ltri;\"], [6, \"&loz;\"], [0, \"&cir;\"], [32, \"&tridot;\"], [2, \"&bigcirc;\"], [8, \"&ultri;\"], [0, \"&urtri;\"], [0, \"&lltri;\"], [0, \"&EmptySmallSquare;\"], [0, \"&FilledSmallSquare;\"], [8, \"&bigstar;\"], [0, \"&star;\"], [7, \"&phone;\"], [49, \"&female;\"], [1, \"&male;\"], [29, \"&spades;\"], [2, \"&clubs;\"], [1, \"&hearts;\"], [0, \"&diamondsuit;\"], [3, \"&sung;\"], [2, \"&flat;\"], [0, \"&natural;\"], [0, \"&sharp;\"], [163, \"&check;\"], [3, \"&cross;\"], [8, \"&malt;\"], [21, \"&sext;\"], [33, \"&VerticalSeparator;\"], [25, \"&lbbrk;\"], [0, \"&rbbrk;\"], [84, \"&bsolhsub;\"], [0, \"&suphsol;\"], [28, \"&LeftDoubleBracket;\"], [0, \"&RightDoubleBracket;\"], [0, \"&lang;\"], [0, \"&rang;\"], [0, \"&Lang;\"], [0, \"&Rang;\"], [0, \"&loang;\"], [0, \"&roang;\"], [7, \"&longleftarrow;\"], [0, \"&longrightarrow;\"], [0, \"&longleftrightarrow;\"], [0, \"&DoubleLongLeftArrow;\"], [0, \"&DoubleLongRightArrow;\"], [0, \"&DoubleLongLeftRightArrow;\"], [1, \"&longmapsto;\"], [2, \"&dzigrarr;\"], [258, \"&nvlArr;\"], [0, \"&nvrArr;\"], [0, \"&nvHarr;\"], [0, \"&Map;\"], [6, \"&lbarr;\"], [0, \"&bkarow;\"], [0, \"&lBarr;\"], [0, \"&dbkarow;\"], [0, \"&drbkarow;\"], [0, \"&DDotrahd;\"], [0, \"&UpArrowBar;\"], [0, \"&DownArrowBar;\"], [2, \"&Rarrtl;\"], [2, \"&latail;\"], [0, \"&ratail;\"], [0, \"&lAtail;\"], [0, \"&rAtail;\"], [0, \"&larrfs;\"], [0, \"&rarrfs;\"], [0, \"&larrbfs;\"], [0, \"&rarrbfs;\"], [2, \"&nwarhk;\"], [0, \"&nearhk;\"], [0, \"&hksearow;\"], [0, \"&hkswarow;\"], [0, \"&nwnear;\"], [0, \"&nesear;\"], [0, \"&seswar;\"], [0, \"&swnwar;\"], [8, { v: \"&rarrc;\", n: 824, o: \"&nrarrc;\" }], [1, \"&cudarrr;\"], [0, \"&ldca;\"], [0, \"&rdca;\"], [0, \"&cudarrl;\"], [0, \"&larrpl;\"], [2, \"&curarrm;\"], [0, \"&cularrp;\"], [7, \"&rarrpl;\"], [2, \"&harrcir;\"], [0, \"&Uarrocir;\"], [0, \"&lurdshar;\"], [0, \"&ldrushar;\"], [2, \"&LeftRightVector;\"], [0, \"&RightUpDownVector;\"], [0, \"&DownLeftRightVector;\"], [0, \"&LeftUpDownVector;\"], [0, \"&LeftVectorBar;\"], [0, \"&RightVectorBar;\"], [0, \"&RightUpVectorBar;\"], [0, \"&RightDownVectorBar;\"], [0, \"&DownLeftVectorBar;\"], [0, \"&DownRightVectorBar;\"], [0, \"&LeftUpVectorBar;\"], [0, \"&LeftDownVectorBar;\"], [0, \"&LeftTeeVector;\"], [0, \"&RightTeeVector;\"], [0, \"&RightUpTeeVector;\"], [0, \"&RightDownTeeVector;\"], [0, \"&DownLeftTeeVector;\"], [0, \"&DownRightTeeVector;\"], [0, \"&LeftUpTeeVector;\"], [0, \"&LeftDownTeeVector;\"], [0, \"&lHar;\"], [0, \"&uHar;\"], [0, \"&rHar;\"], [0, \"&dHar;\"], [0, \"&luruhar;\"], [0, \"&ldrdhar;\"], [0, \"&ruluhar;\"], [0, \"&rdldhar;\"], [0, \"&lharul;\"], [0, \"&llhard;\"], [0, \"&rharul;\"], [0, \"&lrhard;\"], [0, \"&udhar;\"], [0, \"&duhar;\"], [0, \"&RoundImplies;\"], [0, \"&erarr;\"], [0, \"&simrarr;\"], [0, \"&larrsim;\"], [0, \"&rarrsim;\"], [0, \"&rarrap;\"], [0, \"&ltlarr;\"], [1, \"&gtrarr;\"], [0, \"&subrarr;\"], [1, \"&suplarr;\"], [0, \"&lfisht;\"], [0, \"&rfisht;\"], [0, \"&ufisht;\"], [0, \"&dfisht;\"], [5, \"&lopar;\"], [0, \"&ropar;\"], [4, \"&lbrke;\"], [0, \"&rbrke;\"], [0, \"&lbrkslu;\"], [0, \"&rbrksld;\"], [0, \"&lbrksld;\"], [0, \"&rbrkslu;\"], [0, \"&langd;\"], [0, \"&rangd;\"], [0, \"&lparlt;\"], [0, \"&rpargt;\"], [0, \"&gtlPar;\"], [0, \"&ltrPar;\"], [3, \"&vzigzag;\"], [1, \"&vangrt;\"], [0, \"&angrtvbd;\"], [6, \"&ange;\"], [0, \"&range;\"], [0, \"&dwangle;\"], [0, \"&uwangle;\"], [0, \"&angmsdaa;\"], [0, \"&angmsdab;\"], [0, \"&angmsdac;\"], [0, \"&angmsdad;\"], [0, \"&angmsdae;\"], [0, \"&angmsdaf;\"], [0, \"&angmsdag;\"], [0, \"&angmsdah;\"], [0, \"&bemptyv;\"], [0, \"&demptyv;\"], [0, \"&cemptyv;\"], [0, \"&raemptyv;\"], [0, \"&laemptyv;\"], [0, \"&ohbar;\"], [0, \"&omid;\"], [0, \"&opar;\"], [1, \"&operp;\"], [1, \"&olcross;\"], [0, \"&odsold;\"], [1, \"&olcir;\"], [0, \"&ofcir;\"], [0, \"&olt;\"], [0, \"&ogt;\"], [0, \"&cirscir;\"], [0, \"&cirE;\"], [0, \"&solb;\"], [0, \"&bsolb;\"], [3, \"&boxbox;\"], [3, \"&trisb;\"], [0, \"&rtriltri;\"], [0, { v: \"&LeftTriangleBar;\", n: 824, o: \"&NotLeftTriangleBar;\" }], [0, { v: \"&RightTriangleBar;\", n: 824, o: \"&NotRightTriangleBar;\" }], [11, \"&iinfin;\"], [0, \"&infintie;\"], [0, \"&nvinfin;\"], [4, \"&eparsl;\"], [0, \"&smeparsl;\"], [0, \"&eqvparsl;\"], [5, \"&blacklozenge;\"], [8, \"&RuleDelayed;\"], [1, \"&dsol;\"], [9, \"&bigodot;\"], [0, \"&bigoplus;\"], [0, \"&bigotimes;\"], [1, \"&biguplus;\"], [1, \"&bigsqcup;\"], [5, \"&iiiint;\"], [0, \"&fpartint;\"], [2, \"&cirfnint;\"], [0, \"&awint;\"], [0, \"&rppolint;\"], [0, \"&scpolint;\"], [0, \"&npolint;\"], [0, \"&pointint;\"], [0, \"&quatint;\"], [0, \"&intlarhk;\"], [10, \"&pluscir;\"], [0, \"&plusacir;\"], [0, \"&simplus;\"], [0, \"&plusdu;\"], [0, \"&plussim;\"], [0, \"&plustwo;\"], [1, \"&mcomma;\"], [0, \"&minusdu;\"], [2, \"&loplus;\"], [0, \"&roplus;\"], [0, \"&Cross;\"], [0, \"&timesd;\"], [0, \"&timesbar;\"], [1, \"&smashp;\"], [0, \"&lotimes;\"], [0, \"&rotimes;\"], [0, \"&otimesas;\"], [0, \"&Otimes;\"], [0, \"&odiv;\"], [0, \"&triplus;\"], [0, \"&triminus;\"], [0, \"&tritime;\"], [0, \"&intprod;\"], [2, \"&amalg;\"], [0, \"&capdot;\"], [1, \"&ncup;\"], [0, \"&ncap;\"], [0, \"&capand;\"], [0, \"&cupor;\"], [0, \"&cupcap;\"], [0, \"&capcup;\"], [0, \"&cupbrcap;\"], [0, \"&capbrcup;\"], [0, \"&cupcup;\"], [0, \"&capcap;\"], [0, \"&ccups;\"], [0, \"&ccaps;\"], [2, \"&ccupssm;\"], [2, \"&And;\"], [0, \"&Or;\"], [0, \"&andand;\"], [0, \"&oror;\"], [0, \"&orslope;\"], [0, \"&andslope;\"], [1, \"&andv;\"], [0, \"&orv;\"], [0, \"&andd;\"], [0, \"&ord;\"], [1, \"&wedbar;\"], [6, \"&sdote;\"], [3, \"&simdot;\"], [2, { v: \"&congdot;\", n: 824, o: \"&ncongdot;\" }], [0, \"&easter;\"], [0, \"&apacir;\"], [0, { v: \"&apE;\", n: 824, o: \"&napE;\" }], [0, \"&eplus;\"], [0, \"&pluse;\"], [0, \"&Esim;\"], [0, \"&Colone;\"], [0, \"&Equal;\"], [1, \"&ddotseq;\"], [0, \"&equivDD;\"], [0, \"&ltcir;\"], [0, \"&gtcir;\"], [0, \"&ltquest;\"], [0, \"&gtquest;\"], [0, { v: \"&leqslant;\", n: 824, o: \"&nleqslant;\" }], [0, { v: \"&geqslant;\", n: 824, o: \"&ngeqslant;\" }], [0, \"&lesdot;\"], [0, \"&gesdot;\"], [0, \"&lesdoto;\"], [0, \"&gesdoto;\"], [0, \"&lesdotor;\"], [0, \"&gesdotol;\"], [0, \"&lap;\"], [0, \"&gap;\"], [0, \"&lne;\"], [0, \"&gne;\"], [0, \"&lnap;\"], [0, \"&gnap;\"], [0, \"&lEg;\"], [0, \"&gEl;\"], [0, \"&lsime;\"], [0, \"&gsime;\"], [0, \"&lsimg;\"], [0, \"&gsiml;\"], [0, \"&lgE;\"], [0, \"&glE;\"], [0, \"&lesges;\"], [0, \"&gesles;\"], [0, \"&els;\"], [0, \"&egs;\"], [0, \"&elsdot;\"], [0, \"&egsdot;\"], [0, \"&el;\"], [0, \"&eg;\"], [2, \"&siml;\"], [0, \"&simg;\"], [0, \"&simlE;\"], [0, \"&simgE;\"], [0, { v: \"&LessLess;\", n: 824, o: \"&NotNestedLessLess;\" }], [0, { v: \"&GreaterGreater;\", n: 824, o: \"&NotNestedGreaterGreater;\" }], [1, \"&glj;\"], [0, \"&gla;\"], [0, \"&ltcc;\"], [0, \"&gtcc;\"], [0, \"&lescc;\"], [0, \"&gescc;\"], [0, \"&smt;\"], [0, \"&lat;\"], [0, { v: \"&smte;\", n: 65024, o: \"&smtes;\" }], [0, { v: \"&late;\", n: 65024, o: \"&lates;\" }], [0, \"&bumpE;\"], [0, { v: \"&PrecedesEqual;\", n: 824, o: \"&NotPrecedesEqual;\" }], [0, { v: \"&sce;\", n: 824, o: \"&NotSucceedsEqual;\" }], [2, \"&prE;\"], [0, \"&scE;\"], [0, \"&precneqq;\"], [0, \"&scnE;\"], [0, \"&prap;\"], [0, \"&scap;\"], [0, \"&precnapprox;\"], [0, \"&scnap;\"], [0, \"&Pr;\"], [0, \"&Sc;\"], [0, \"&subdot;\"], [0, \"&supdot;\"], [0, \"&subplus;\"], [0, \"&supplus;\"], [0, \"&submult;\"], [0, \"&supmult;\"], [0, \"&subedot;\"], [0, \"&supedot;\"], [0, { v: \"&subE;\", n: 824, o: \"&nsubE;\" }], [0, { v: \"&supE;\", n: 824, o: \"&nsupE;\" }], [0, \"&subsim;\"], [0, \"&supsim;\"], [2, { v: \"&subnE;\", n: 65024, o: \"&varsubsetneqq;\" }], [0, { v: \"&supnE;\", n: 65024, o: \"&varsupsetneqq;\" }], [2, \"&csub;\"], [0, \"&csup;\"], [0, \"&csube;\"], [0, \"&csupe;\"], [0, \"&subsup;\"], [0, \"&supsub;\"], [0, \"&subsub;\"], [0, \"&supsup;\"], [0, \"&suphsub;\"], [0, \"&supdsub;\"], [0, \"&forkv;\"], [0, \"&topfork;\"], [0, \"&mlcp;\"], [8, \"&Dashv;\"], [1, \"&Vdashl;\"], [0, \"&Barv;\"], [0, \"&vBar;\"], [0, \"&vBarv;\"], [1, \"&Vbar;\"], [0, \"&Not;\"], [0, \"&bNot;\"], [0, \"&rnmid;\"], [0, \"&cirmid;\"], [0, \"&midcir;\"], [0, \"&topcir;\"], [0, \"&nhpar;\"], [0, \"&parsim;\"], [9, { v: \"&parsl;\", n: 8421, o: \"&nparsl;\" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, \"&Ascr;\"], [1, \"&Cscr;\"], [0, \"&Dscr;\"], [2, \"&Gscr;\"], [2, \"&Jscr;\"], [0, \"&Kscr;\"], [2, \"&Nscr;\"], [0, \"&Oscr;\"], [0, \"&Pscr;\"], [0, \"&Qscr;\"], [1, \"&Sscr;\"], [0, \"&Tscr;\"], [0, \"&Uscr;\"], [0, \"&Vscr;\"], [0, \"&Wscr;\"], [0, \"&Xscr;\"], [0, \"&Yscr;\"], [0, \"&Zscr;\"], [0, \"&ascr;\"], [0, \"&bscr;\"], [0, \"&cscr;\"], [0, \"&dscr;\"], [1, \"&fscr;\"], [1, \"&hscr;\"], [0, \"&iscr;\"], [0, \"&jscr;\"], [0, \"&kscr;\"], [0, \"&lscr;\"], [0, \"&mscr;\"], [0, \"&nscr;\"], [1, \"&pscr;\"], [0, \"&qscr;\"], [0, \"&rscr;\"], [0, \"&sscr;\"], [0, \"&tscr;\"], [0, \"&uscr;\"], [0, \"&vscr;\"], [0, \"&wscr;\"], [0, \"&xscr;\"], [0, \"&yscr;\"], [0, \"&zscr;\"], [52, \"&Afr;\"], [0, \"&Bfr;\"], [1, \"&Dfr;\"], [0, \"&Efr;\"], [0, \"&Ffr;\"], [0, \"&Gfr;\"], [2, \"&Jfr;\"], [0, \"&Kfr;\"], [0, \"&Lfr;\"], [0, \"&Mfr;\"], [0, \"&Nfr;\"], [0, \"&Ofr;\"], [0, \"&Pfr;\"], [0, \"&Qfr;\"], [1, \"&Sfr;\"], [0, \"&Tfr;\"], [0, \"&Ufr;\"], [0, \"&Vfr;\"], [0, \"&Wfr;\"], [0, \"&Xfr;\"], [0, \"&Yfr;\"], [1, \"&afr;\"], [0, \"&bfr;\"], [0, \"&cfr;\"], [0, \"&dfr;\"], [0, \"&efr;\"], [0, \"&ffr;\"], [0, \"&gfr;\"], [0, \"&hfr;\"], [0, \"&ifr;\"], [0, \"&jfr;\"], [0, \"&kfr;\"], [0, \"&lfr;\"], [0, \"&mfr;\"], [0, \"&nfr;\"], [0, \"&ofr;\"], [0, \"&pfr;\"], [0, \"&qfr;\"], [0, \"&rfr;\"], [0, \"&sfr;\"], [0, \"&tfr;\"], [0, \"&ufr;\"], [0, \"&vfr;\"], [0, \"&wfr;\"], [0, \"&xfr;\"], [0, \"&yfr;\"], [0, \"&zfr;\"], [0, \"&Aopf;\"], [0, \"&Bopf;\"], [1, \"&Dopf;\"], [0, \"&Eopf;\"], [0, \"&Fopf;\"], [0, \"&Gopf;\"], [1, \"&Iopf;\"], [0, \"&Jopf;\"], [0, \"&Kopf;\"], [0, \"&Lopf;\"], [0, \"&Mopf;\"], [1, \"&Oopf;\"], [3, \"&Sopf;\"], [0, \"&Topf;\"], [0, \"&Uopf;\"], [0, \"&Vopf;\"], [0, \"&Wopf;\"], [0, \"&Xopf;\"], [0, \"&Yopf;\"], [1, \"&aopf;\"], [0, \"&bopf;\"], [0, \"&copf;\"], [0, \"&dopf;\"], [0, \"&eopf;\"], [0, \"&fopf;\"], [0, \"&gopf;\"], [0, \"&hopf;\"], [0, \"&iopf;\"], [0, \"&jopf;\"], [0, \"&kopf;\"], [0, \"&lopf;\"], [0, \"&mopf;\"], [0, \"&nopf;\"], [0, \"&oopf;\"], [0, \"&popf;\"], [0, \"&qopf;\"], [0, \"&ropf;\"], [0, \"&sopf;\"], [0, \"&topf;\"], [0, \"&uopf;\"], [0, \"&vopf;\"], [0, \"&wopf;\"], [0, \"&xopf;\"], [0, \"&yopf;\"], [0, \"&zopf;\"]])) }], [8906, \"&fflig;\"], [0, \"&filig;\"], [0, \"&fllig;\"], [0, \"&ffilig;\"], [0, \"&ffllig;\"]]));\n//# sourceMappingURL=encode-html.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = void 0;\nexports.xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nvar xmlCodeMap = new Map([\n [34, \"&quot;\"],\n [38, \"&amp;\"],\n [39, \"&apos;\"],\n [60, \"&lt;\"],\n [62, \"&gt;\"],\n]);\n// For compatibility with node < 4, we wrap `codePointAt`\nexports.getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n ? function (str, index) { return str.codePointAt(index); }\n : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n function (c, index) {\n return (c.charCodeAt(index) & 0xfc00) === 0xd800\n ? (c.charCodeAt(index) - 0xd800) * 0x400 +\n c.charCodeAt(index + 1) -\n 0xdc00 +\n 0x10000\n : c.charCodeAt(index);\n };\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nfunction encodeXML(str) {\n var ret = \"\";\n var lastIdx = 0;\n var match;\n while ((match = exports.xmlReplacer.exec(str)) !== null) {\n var i = match.index;\n var char = str.charCodeAt(i);\n var next = xmlCodeMap.get(char);\n if (next !== undefined) {\n ret += str.substring(lastIdx, i) + next;\n lastIdx = i + 1;\n }\n else {\n ret += \"\".concat(str.substring(lastIdx, i), \"&#x\").concat((0, exports.getCodePoint)(str, i).toString(16), \";\");\n // Increase by 1 if we have a surrogate pair\n lastIdx = exports.xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n }\n }\n return ret + str.substr(lastIdx);\n}\nexports.encodeXML = encodeXML;\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexports.escape = encodeXML;\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(regex, map) {\n return function escape(data) {\n var match;\n var lastIdx = 0;\n var result = \"\";\n while ((match = regex.exec(data))) {\n if (lastIdx !== match.index) {\n result += data.substring(lastIdx, match.index);\n }\n // We know that this character will be in the map.\n result += map.get(match[0].charCodeAt(0));\n // Every match will be of length 1\n lastIdx = match.index + 1;\n }\n return result + data.substring(lastIdx);\n };\n}\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexports.escapeUTF8 = getEscaper(/[&<>'\"]/g, xmlCodeMap);\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexports.escapeAttribute = getEscaper(/[\"&\\u00A0]/g, new Map([\n [34, \"&quot;\"],\n [38, \"&amp;\"],\n [160, \"&nbsp;\"],\n]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexports.escapeText = getEscaper(/[&<>\\u00A0]/g, new Map([\n [38, \"&amp;\"],\n [60, \"&lt;\"],\n [62, \"&gt;\"],\n [160, \"&nbsp;\"],\n]));\n//# sourceMappingURL=escape.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encodeNonAsciiHTML = exports.encodeHTML = void 0;\nvar encode_html_js_1 = __importDefault(require(\"./generated/encode-html.js\"));\nvar escape_js_1 = require(\"./escape.js\");\nvar htmlReplacer = /[\\t\\n!-,./:-@[-`\\f{-}$\\x80-\\uFFFF]/g;\n/**\n * Encodes all characters in the input using HTML entities. This includes\n * characters that are valid ASCII characters in HTML documents, such as `#`.\n *\n * To get a more compact output, consider using the `encodeNonAsciiHTML`\n * function, which will only encode characters that are not valid in HTML\n * documents, as well as non-ASCII characters.\n *\n * If a character has no equivalent entity, a numeric hexadecimal reference\n * (eg. `&#xfc;`) will be used.\n */\nfunction encodeHTML(data) {\n return encodeHTMLTrieRe(htmlReplacer, data);\n}\nexports.encodeHTML = encodeHTML;\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in HTML\n * documents using HTML entities. This function will not encode characters that\n * are valid in HTML documents, such as `#`.\n *\n * If a character has no equivalent entity, a numeric hexadecimal reference\n * (eg. `&#xfc;`) will be used.\n */\nfunction encodeNonAsciiHTML(data) {\n return encodeHTMLTrieRe(escape_js_1.xmlReplacer, data);\n}\nexports.encodeNonAsciiHTML = encodeNonAsciiHTML;\nfunction encodeHTMLTrieRe(regExp, str) {\n var ret = \"\";\n var lastIdx = 0;\n var match;\n while ((match = regExp.exec(str)) !== null) {\n var i = match.index;\n ret += str.substring(lastIdx, i);\n var char = str.charCodeAt(i);\n var next = encode_html_js_1.default.get(char);\n if (typeof next === \"object\") {\n // We are in a branch. Try to match the next char.\n if (i + 1 < str.length) {\n var nextChar = str.charCodeAt(i + 1);\n var value = typeof next.n === \"number\"\n ? next.n === nextChar\n ? next.o\n : undefined\n : next.n.get(nextChar);\n if (value !== undefined) {\n ret += value;\n lastIdx = regExp.lastIndex += 1;\n continue;\n }\n }\n next = next.v;\n }\n // We might have a tree node without a value; skip and use a numeric entity.\n if (next !== undefined) {\n ret += next;\n lastIdx = i + 1;\n }\n else {\n var cp = (0, escape_js_1.getCodePoint)(str, i);\n ret += \"&#x\".concat(cp.toString(16), \";\");\n // Increase by 1 if we have a surrogate pair\n lastIdx = regExp.lastIndex += Number(cp !== char);\n }\n }\n return ret + str.substr(lastIdx);\n}\n//# sourceMappingURL=encode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLAttribute = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.DecodingMode = exports.EntityDecoder = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.EntityLevel = void 0;\nvar decode_js_1 = require(\"./decode.js\");\nvar encode_js_1 = require(\"./encode.js\");\nvar escape_js_1 = require(\"./escape.js\");\n/** The level of entities to support. */\nvar EntityLevel;\n(function (EntityLevel) {\n /** Support only XML entities. */\n EntityLevel[EntityLevel[\"XML\"] = 0] = \"XML\";\n /** Support HTML entities, which are a superset of XML entities. */\n EntityLevel[EntityLevel[\"HTML\"] = 1] = \"HTML\";\n})(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {}));\nvar EncodingMode;\n(function (EncodingMode) {\n /**\n * The output is UTF-8 encoded. Only characters that need escaping within\n * XML will be escaped.\n */\n EncodingMode[EncodingMode[\"UTF8\"] = 0] = \"UTF8\";\n /**\n * The output consists only of ASCII characters. Characters that need\n * escaping within HTML, and characters that aren't ASCII characters will\n * be escaped.\n */\n EncodingMode[EncodingMode[\"ASCII\"] = 1] = \"ASCII\";\n /**\n * Encode all characters that have an equivalent entity, as well as all\n * characters that are not ASCII characters.\n */\n EncodingMode[EncodingMode[\"Extensive\"] = 2] = \"Extensive\";\n /**\n * Encode all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n */\n EncodingMode[EncodingMode[\"Attribute\"] = 3] = \"Attribute\";\n /**\n * Encode all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n */\n EncodingMode[EncodingMode[\"Text\"] = 4] = \"Text\";\n})(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {}));\n/**\n * Decodes a string with entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n */\nfunction decode(data, options) {\n if (options === void 0) { options = EntityLevel.XML; }\n var level = typeof options === \"number\" ? options : options.level;\n if (level === EntityLevel.HTML) {\n var mode = typeof options === \"object\" ? options.mode : undefined;\n return (0, decode_js_1.decodeHTML)(data, mode);\n }\n return (0, decode_js_1.decodeXML)(data);\n}\nexports.decode = decode;\n/**\n * Decodes a string with entities. Does not allow missing trailing semicolons for entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n * @deprecated Use `decode` with the `mode` set to `Strict`.\n */\nfunction decodeStrict(data, options) {\n var _a;\n if (options === void 0) { options = EntityLevel.XML; }\n var opts = typeof options === \"number\" ? { level: options } : options;\n (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = decode_js_1.DecodingMode.Strict);\n return decode(data, opts);\n}\nexports.decodeStrict = decodeStrict;\n/**\n * Encodes a string with entities.\n *\n * @param data String to encode.\n * @param options Encoding options.\n */\nfunction encode(data, options) {\n if (options === void 0) { options = EntityLevel.XML; }\n var opts = typeof options === \"number\" ? { level: options } : options;\n // Mode `UTF8` just escapes XML entities\n if (opts.mode === EncodingMode.UTF8)\n return (0, escape_js_1.escapeUTF8)(data);\n if (opts.mode === EncodingMode.Attribute)\n return (0, escape_js_1.escapeAttribute)(data);\n if (opts.mode === EncodingMode.Text)\n return (0, escape_js_1.escapeText)(data);\n if (opts.level === EntityLevel.HTML) {\n if (opts.mode === EncodingMode.ASCII) {\n return (0, encode_js_1.encodeNonAsciiHTML)(data);\n }\n return (0, encode_js_1.encodeHTML)(data);\n }\n // ASCII and Extensive are equivalent\n return (0, escape_js_1.encodeXML)(data);\n}\nexports.encode = encode;\nvar escape_js_2 = require(\"./escape.js\");\nObject.defineProperty(exports, \"encodeXML\", { enumerable: true, get: function () { return escape_js_2.encodeXML; } });\nObject.defineProperty(exports, \"escape\", { enumerable: true, get: function () { return escape_js_2.escape; } });\nObject.defineProperty(exports, \"escapeUTF8\", { enumerable: true, get: function () { return escape_js_2.escapeUTF8; } });\nObject.defineProperty(exports, \"escapeAttribute\", { enumerable: true, get: function () { return escape_js_2.escapeAttribute; } });\nObject.defineProperty(exports, \"escapeText\", { enumerable: true, get: function () { return escape_js_2.escapeText; } });\nvar encode_js_2 = require(\"./encode.js\");\nObject.defineProperty(exports, \"encodeHTML\", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeNonAsciiHTML\", { enumerable: true, get: function () { return encode_js_2.encodeNonAsciiHTML; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"encodeHTML4\", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeHTML5\", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });\nvar decode_js_2 = require(\"./decode.js\");\nObject.defineProperty(exports, \"EntityDecoder\", { enumerable: true, get: function () { return decode_js_2.EntityDecoder; } });\nObject.defineProperty(exports, \"DecodingMode\", { enumerable: true, get: function () { return decode_js_2.DecodingMode; } });\nObject.defineProperty(exports, \"decodeXML\", { enumerable: true, get: function () { return decode_js_2.decodeXML; } });\nObject.defineProperty(exports, \"decodeHTML\", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTMLStrict\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeHTMLAttribute\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLAttribute; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"decodeHTML4\", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML5\", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML4Strict\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeHTML5Strict\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeXMLStrict\", { enumerable: true, get: function () { return decode_js_2.decodeXML; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.attributeNames = exports.elementNames = void 0;\nexports.elementNames = new Map([\n \"altGlyph\",\n \"altGlyphDef\",\n \"altGlyphItem\",\n \"animateColor\",\n \"animateMotion\",\n \"animateTransform\",\n \"clipPath\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"foreignObject\",\n \"glyphRef\",\n \"linearGradient\",\n \"radialGradient\",\n \"textPath\",\n].map(function (val) { return [val.toLowerCase(), val]; }));\nexports.attributeNames = new Map([\n \"definitionURL\",\n \"attributeName\",\n \"attributeType\",\n \"baseFrequency\",\n \"baseProfile\",\n \"calcMode\",\n \"clipPathUnits\",\n \"diffuseConstant\",\n \"edgeMode\",\n \"filterUnits\",\n \"glyphRef\",\n \"gradientTransform\",\n \"gradientUnits\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keyPoints\",\n \"keySplines\",\n \"keyTimes\",\n \"lengthAdjust\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerUnits\",\n \"markerWidth\",\n \"maskContentUnits\",\n \"maskUnits\",\n \"numOctaves\",\n \"pathLength\",\n \"patternContentUnits\",\n \"patternTransform\",\n \"patternUnits\",\n \"pointsAtX\",\n \"pointsAtY\",\n \"pointsAtZ\",\n \"preserveAlpha\",\n \"preserveAspectRatio\",\n \"primitiveUnits\",\n \"refX\",\n \"refY\",\n \"repeatCount\",\n \"repeatDur\",\n \"requiredExtensions\",\n \"requiredFeatures\",\n \"specularConstant\",\n \"specularExponent\",\n \"spreadMethod\",\n \"startOffset\",\n \"stdDeviation\",\n \"stitchTiles\",\n \"surfaceScale\",\n \"systemLanguage\",\n \"tableValues\",\n \"targetX\",\n \"targetY\",\n \"textLength\",\n \"viewBox\",\n \"viewTarget\",\n \"xChannelSelector\",\n \"yChannelSelector\",\n \"zoomAndPan\",\n].map(function (val) { return [val.toLowerCase(), val]; }));\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.render = void 0;\n/*\n * Module dependencies\n */\nvar ElementType = __importStar(require(\"domelementtype\"));\nvar entities_1 = require(\"entities\");\n/**\n * Mixed-case SVG and MathML tags & attributes\n * recognized by the HTML parser.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nvar foreignNames_js_1 = require(\"./foreignNames.js\");\nvar unencodedElements = new Set([\n \"style\",\n \"script\",\n \"xmp\",\n \"iframe\",\n \"noembed\",\n \"noframes\",\n \"plaintext\",\n \"noscript\",\n]);\nfunction replaceQuotes(value) {\n return value.replace(/\"/g, \"&quot;\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n var _a;\n if (!attributes)\n return;\n var encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false\n ? replaceQuotes\n : opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? entities_1.encodeXML\n : entities_1.escapeAttribute;\n return Object.keys(attributes)\n .map(function (key) {\n var _a, _b;\n var value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case attribute names */\n key = (_b = foreignNames_js_1.attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n }\n if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n return key;\n }\n return \"\".concat(key, \"=\\\"\").concat(encode(value), \"\\\"\");\n })\n .join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nvar singleTag = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nfunction render(node, options) {\n if (options === void 0) { options = {}; }\n var nodes = \"length\" in node ? node : [node];\n var output = \"\";\n for (var i = 0; i < nodes.length; i++) {\n output += renderNode(nodes[i], options);\n }\n return output;\n}\nexports.render = render;\nexports.default = render;\nfunction renderNode(node, options) {\n switch (node.type) {\n case ElementType.Root:\n return render(node.children, options);\n // @ts-expect-error We don't use `Doctype` yet\n case ElementType.Doctype:\n case ElementType.Directive:\n return renderDirective(node);\n case ElementType.Comment:\n return renderComment(node);\n case ElementType.CDATA:\n return renderCdata(node);\n case ElementType.Script:\n case ElementType.Style:\n case ElementType.Tag:\n return renderTag(node, options);\n case ElementType.Text:\n return renderText(node, options);\n }\n}\nvar foreignModeIntegrationPoints = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignObject\",\n \"desc\",\n \"title\",\n]);\nvar foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n var _a;\n // Handle SVG / MathML in HTML\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case element names */\n elem.name = (_a = foreignNames_js_1.elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n /* Exit foreign mode at integration points */\n if (elem.parent &&\n foreignModeIntegrationPoints.has(elem.parent.name)) {\n opts = __assign(__assign({}, opts), { xmlMode: false });\n }\n }\n if (!opts.xmlMode && foreignElements.has(elem.name)) {\n opts = __assign(__assign({}, opts), { xmlMode: \"foreign\" });\n }\n var tag = \"<\".concat(elem.name);\n var attribs = formatAttributes(elem.attribs, opts);\n if (attribs) {\n tag += \" \".concat(attribs);\n }\n if (elem.children.length === 0 &&\n (opts.xmlMode\n ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n opts.selfClosingTags !== false\n : // User explicitly asked for self-closing tags, even in HTML mode\n opts.selfClosingTags && singleTag.has(elem.name))) {\n if (!opts.xmlMode)\n tag += \" \";\n tag += \"/>\";\n }\n else {\n tag += \">\";\n if (elem.children.length > 0) {\n tag += render(elem.children, opts);\n }\n if (opts.xmlMode || !singleTag.has(elem.name)) {\n tag += \"</\".concat(elem.name, \">\");\n }\n }\n return tag;\n}\nfunction renderDirective(elem) {\n return \"<\".concat(elem.data, \">\");\n}\nfunction renderText(elem, opts) {\n var _a;\n var data = elem.data || \"\";\n // If entities weren't decoded, no need to encode them back\n if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false &&\n !(!opts.xmlMode &&\n elem.parent &&\n unencodedElements.has(elem.parent.name))) {\n data =\n opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? (0, entities_1.encodeXML)(data)\n : (0, entities_1.escapeText)(data);\n }\n return data;\n}\nfunction renderCdata(elem) {\n return \"<![CDATA[\".concat(elem.children[0].data, \"]]>\");\n}\nfunction renderComment(elem) {\n return \"<!--\".concat(elem.data, \"-->\");\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOuterHTML = getOuterHTML;\nexports.getInnerHTML = getInnerHTML;\nexports.getText = getText;\nexports.textContent = textContent;\nexports.innerText = innerText;\nvar domhandler_1 = require(\"domhandler\");\nvar dom_serializer_1 = __importDefault(require(\"dom-serializer\"));\nvar domelementtype_1 = require(\"domelementtype\");\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the outer HTML of.\n * @param options Options for serialization.\n * @returns `node`'s outer HTML.\n */\nfunction getOuterHTML(node, options) {\n return (0, dom_serializer_1.default)(node, options);\n}\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the inner HTML of.\n * @param options Options for serialization.\n * @returns `node`'s inner HTML.\n */\nfunction getInnerHTML(node, options) {\n return (0, domhandler_1.hasChildren)(node)\n ? node.children.map(function (node) { return getOuterHTML(node, options); }).join(\"\")\n : \"\";\n}\n/**\n * Get a node's inner text. Same as `textContent`, but inserts newlines for `<br>` tags. Ignores comments.\n *\n * @category Stringify\n * @deprecated Use `textContent` instead.\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n */\nfunction getText(node) {\n if (Array.isArray(node))\n return node.map(getText).join(\"\");\n if ((0, domhandler_1.isTag)(node))\n return node.name === \"br\" ? \"\\n\" : getText(node.children);\n if ((0, domhandler_1.isCDATA)(node))\n return getText(node.children);\n if ((0, domhandler_1.isText)(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's text content. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the text content of.\n * @returns `node`'s text content.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent}\n */\nfunction textContent(node) {\n if (Array.isArray(node))\n return node.map(textContent).join(\"\");\n if ((0, domhandler_1.hasChildren)(node) && !(0, domhandler_1.isComment)(node)) {\n return textContent(node.children);\n }\n if ((0, domhandler_1.isText)(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's inner text, ignoring `<script>` and `<style>` tags. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText}\n */\nfunction innerText(node) {\n if (Array.isArray(node))\n return node.map(innerText).join(\"\");\n if ((0, domhandler_1.hasChildren)(node) && (node.type === domelementtype_1.ElementType.Tag || (0, domhandler_1.isCDATA)(node))) {\n return innerText(node.children);\n }\n if ((0, domhandler_1.isText)(node))\n return node.data;\n return \"\";\n}\n//# sourceMappingURL=stringify.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getChildren = getChildren;\nexports.getParent = getParent;\nexports.getSiblings = getSiblings;\nexports.getAttributeValue = getAttributeValue;\nexports.hasAttrib = hasAttrib;\nexports.getName = getName;\nexports.nextElementSibling = nextElementSibling;\nexports.prevElementSibling = prevElementSibling;\nvar domhandler_1 = require(\"domhandler\");\n/**\n * Get a node's children.\n *\n * @category Traversal\n * @param elem Node to get the children of.\n * @returns `elem`'s children, or an empty array.\n */\nfunction getChildren(elem) {\n return (0, domhandler_1.hasChildren)(elem) ? elem.children : [];\n}\n/**\n * Get a node's parent.\n *\n * @category Traversal\n * @param elem Node to get the parent of.\n * @returns `elem`'s parent node, or `null` if `elem` is a root node.\n */\nfunction getParent(elem) {\n return elem.parent || null;\n}\n/**\n * Gets an elements siblings, including the element itself.\n *\n * Attempts to get the children through the element's parent first. If we don't\n * have a parent (the element is a root node), we walk the element's `prev` &\n * `next` to get all remaining nodes.\n *\n * @category Traversal\n * @param elem Element to get the siblings of.\n * @returns `elem`'s siblings, including `elem`.\n */\nfunction getSiblings(elem) {\n var _a, _b;\n var parent = getParent(elem);\n if (parent != null)\n return getChildren(parent);\n var siblings = [elem];\n var prev = elem.prev, next = elem.next;\n while (prev != null) {\n siblings.unshift(prev);\n (_a = prev, prev = _a.prev);\n }\n while (next != null) {\n siblings.push(next);\n (_b = next, next = _b.next);\n }\n return siblings;\n}\n/**\n * Gets an attribute from an element.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to retrieve.\n * @returns The element's attribute value, or `undefined`.\n */\nfunction getAttributeValue(elem, name) {\n var _a;\n return (_a = elem.attribs) === null || _a === void 0 ? void 0 : _a[name];\n}\n/**\n * Checks whether an element has an attribute.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to look for.\n * @returns Returns whether `elem` has the attribute `name`.\n */\nfunction hasAttrib(elem, name) {\n return (elem.attribs != null &&\n Object.prototype.hasOwnProperty.call(elem.attribs, name) &&\n elem.attribs[name] != null);\n}\n/**\n * Get the tag name of an element.\n *\n * @category Traversal\n * @param elem The element to get the name for.\n * @returns The tag name of `elem`.\n */\nfunction getName(elem) {\n return elem.name;\n}\n/**\n * Returns the next element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the next sibling of.\n * @returns `elem`'s next sibling that is a tag, or `null` if there is no next\n * sibling.\n */\nfunction nextElementSibling(elem) {\n var _a;\n var next = elem.next;\n while (next !== null && !(0, domhandler_1.isTag)(next))\n (_a = next, next = _a.next);\n return next;\n}\n/**\n * Returns the previous element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the previous sibling of.\n * @returns `elem`'s previous sibling that is a tag, or `null` if there is no\n * previous sibling.\n */\nfunction prevElementSibling(elem) {\n var _a;\n var prev = elem.prev;\n while (prev !== null && !(0, domhandler_1.isTag)(prev))\n (_a = prev, prev = _a.prev);\n return prev;\n}\n//# sourceMappingURL=traversal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeElement = removeElement;\nexports.replaceElement = replaceElement;\nexports.appendChild = appendChild;\nexports.append = append;\nexports.prependChild = prependChild;\nexports.prepend = prepend;\n/**\n * Remove an element from the dom\n *\n * @category Manipulation\n * @param elem The element to be removed\n */\nfunction removeElement(elem) {\n if (elem.prev)\n elem.prev.next = elem.next;\n if (elem.next)\n elem.next.prev = elem.prev;\n if (elem.parent) {\n var childs = elem.parent.children;\n var childsIndex = childs.lastIndexOf(elem);\n if (childsIndex >= 0) {\n childs.splice(childsIndex, 1);\n }\n }\n elem.next = null;\n elem.prev = null;\n elem.parent = null;\n}\n/**\n * Replace an element in the dom\n *\n * @category Manipulation\n * @param elem The element to be replaced\n * @param replacement The element to be added\n */\nfunction replaceElement(elem, replacement) {\n var prev = (replacement.prev = elem.prev);\n if (prev) {\n prev.next = replacement;\n }\n var next = (replacement.next = elem.next);\n if (next) {\n next.prev = replacement;\n }\n var parent = (replacement.parent = elem.parent);\n if (parent) {\n var childs = parent.children;\n childs[childs.lastIndexOf(elem)] = replacement;\n elem.parent = null;\n }\n}\n/**\n * Append a child to an element.\n *\n * @category Manipulation\n * @param parent The element to append to.\n * @param child The element to be added as a child.\n */\nfunction appendChild(parent, child) {\n removeElement(child);\n child.next = null;\n child.parent = parent;\n if (parent.children.push(child) > 1) {\n var sibling = parent.children[parent.children.length - 2];\n sibling.next = child;\n child.prev = sibling;\n }\n else {\n child.prev = null;\n }\n}\n/**\n * Append an element after another.\n *\n * @category Manipulation\n * @param elem The element to append after.\n * @param next The element be added.\n */\nfunction append(elem, next) {\n removeElement(next);\n var parent = elem.parent;\n var currNext = elem.next;\n next.next = currNext;\n next.prev = elem;\n elem.next = next;\n next.parent = parent;\n if (currNext) {\n currNext.prev = next;\n if (parent) {\n var childs = parent.children;\n childs.splice(childs.lastIndexOf(currNext), 0, next);\n }\n }\n else if (parent) {\n parent.children.push(next);\n }\n}\n/**\n * Prepend a child to an element.\n *\n * @category Manipulation\n * @param parent The element to prepend before.\n * @param child The element to be added as a child.\n */\nfunction prependChild(parent, child) {\n removeElement(child);\n child.parent = parent;\n child.prev = null;\n if (parent.children.unshift(child) !== 1) {\n var sibling = parent.children[1];\n sibling.prev = child;\n child.next = sibling;\n }\n else {\n child.next = null;\n }\n}\n/**\n * Prepend an element before another.\n *\n * @category Manipulation\n * @param elem The element to prepend before.\n * @param prev The element be added.\n */\nfunction prepend(elem, prev) {\n removeElement(prev);\n var parent = elem.parent;\n if (parent) {\n var childs = parent.children;\n childs.splice(childs.indexOf(elem), 0, prev);\n }\n if (elem.prev) {\n elem.prev.next = prev;\n }\n prev.parent = parent;\n prev.prev = elem.prev;\n prev.next = elem;\n elem.prev = prev;\n}\n//# sourceMappingURL=manipulation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.filter = filter;\nexports.find = find;\nexports.findOneChild = findOneChild;\nexports.findOne = findOne;\nexports.existsOne = existsOne;\nexports.findAll = findAll;\nvar domhandler_1 = require(\"domhandler\");\n/**\n * Search a node and its children for nodes passing a test function. If `node` is not an array, it will be wrapped in one.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param node Node to search. Will be included in the result set if it matches.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nfunction filter(test, node, recurse, limit) {\n if (recurse === void 0) { recurse = true; }\n if (limit === void 0) { limit = Infinity; }\n return find(test, Array.isArray(node) ? node : [node], recurse, limit);\n}\n/**\n * Search an array of nodes and their children for nodes passing a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nfunction find(test, nodes, recurse, limit) {\n var result = [];\n /** Stack of the arrays we are looking at. */\n var nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n /** Stack of the indices within the arrays. */\n var indexStack = [0];\n for (;;) {\n // First, check if the current array has any more elements to look at.\n if (indexStack[0] >= nodeStack[0].length) {\n // If we have no more arrays to look at, we are done.\n if (indexStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n var elem = nodeStack[0][indexStack[0]++];\n if (test(elem)) {\n result.push(elem);\n if (--limit <= 0)\n return result;\n }\n if (recurse && (0, domhandler_1.hasChildren)(elem) && elem.children.length > 0) {\n /*\n * Add the children to the stack. We are depth-first, so this is\n * the next array we look at.\n */\n indexStack.unshift(0);\n nodeStack.unshift(elem.children);\n }\n }\n}\n/**\n * Finds the first element inside of an array that matches a test function. This is an alias for `Array.prototype.find`.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns The first node in the array that passes `test`.\n * @deprecated Use `Array.prototype.find` directly.\n */\nfunction findOneChild(test, nodes) {\n return nodes.find(test);\n}\n/**\n * Finds one element in a tree that passes a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Node or array of nodes to search.\n * @param recurse Also consider child nodes.\n * @returns The first node that passes `test`.\n */\nfunction findOne(test, nodes, recurse) {\n if (recurse === void 0) { recurse = true; }\n var searchedNodes = Array.isArray(nodes) ? nodes : [nodes];\n for (var i = 0; i < searchedNodes.length; i++) {\n var node = searchedNodes[i];\n if ((0, domhandler_1.isTag)(node) && test(node)) {\n return node;\n }\n if (recurse && (0, domhandler_1.hasChildren)(node) && node.children.length > 0) {\n var found = findOne(test, node.children, true);\n if (found)\n return found;\n }\n }\n return null;\n}\n/**\n * Checks if a tree of nodes contains at least one node passing a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns Whether a tree of nodes contains at least one node passing the test.\n */\nfunction existsOne(test, nodes) {\n return (Array.isArray(nodes) ? nodes : [nodes]).some(function (node) {\n return ((0, domhandler_1.isTag)(node) && test(node)) ||\n ((0, domhandler_1.hasChildren)(node) && existsOne(test, node.children));\n });\n}\n/**\n * Search an array of nodes and their children for elements passing a test function.\n *\n * Same as `find`, but limited to elements and with less options, leading to reduced complexity.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns All nodes passing `test`.\n */\nfunction findAll(test, nodes) {\n var result = [];\n var nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n var indexStack = [0];\n for (;;) {\n if (indexStack[0] >= nodeStack[0].length) {\n if (nodeStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n var elem = nodeStack[0][indexStack[0]++];\n if ((0, domhandler_1.isTag)(elem) && test(elem))\n result.push(elem);\n if ((0, domhandler_1.hasChildren)(elem) && elem.children.length > 0) {\n indexStack.unshift(0);\n nodeStack.unshift(elem.children);\n }\n }\n}\n//# sourceMappingURL=querying.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.testElement = testElement;\nexports.getElements = getElements;\nexports.getElementById = getElementById;\nexports.getElementsByTagName = getElementsByTagName;\nexports.getElementsByClassName = getElementsByClassName;\nexports.getElementsByTagType = getElementsByTagType;\nvar domhandler_1 = require(\"domhandler\");\nvar querying_js_1 = require(\"./querying.js\");\n/**\n * A map of functions to check nodes against.\n */\nvar Checks = {\n tag_name: function (name) {\n if (typeof name === \"function\") {\n return function (elem) { return (0, domhandler_1.isTag)(elem) && name(elem.name); };\n }\n else if (name === \"*\") {\n return domhandler_1.isTag;\n }\n return function (elem) { return (0, domhandler_1.isTag)(elem) && elem.name === name; };\n },\n tag_type: function (type) {\n if (typeof type === \"function\") {\n return function (elem) { return type(elem.type); };\n }\n return function (elem) { return elem.type === type; };\n },\n tag_contains: function (data) {\n if (typeof data === \"function\") {\n return function (elem) { return (0, domhandler_1.isText)(elem) && data(elem.data); };\n }\n return function (elem) { return (0, domhandler_1.isText)(elem) && elem.data === data; };\n },\n};\n/**\n * Returns a function to check whether a node has an attribute with a particular\n * value.\n *\n * @param attrib Attribute to check.\n * @param value Attribute value to look for.\n * @returns A function to check whether the a node has an attribute with a\n * particular value.\n */\nfunction getAttribCheck(attrib, value) {\n if (typeof value === \"function\") {\n return function (elem) { return (0, domhandler_1.isTag)(elem) && value(elem.attribs[attrib]); };\n }\n return function (elem) { return (0, domhandler_1.isTag)(elem) && elem.attribs[attrib] === value; };\n}\n/**\n * Returns a function that returns `true` if either of the input functions\n * returns `true` for a node.\n *\n * @param a First function to combine.\n * @param b Second function to combine.\n * @returns A function taking a node and returning `true` if either of the input\n * functions returns `true` for the node.\n */\nfunction combineFuncs(a, b) {\n return function (elem) { return a(elem) || b(elem); };\n}\n/**\n * Returns a function that executes all checks in `options` and returns `true`\n * if any of them match a node.\n *\n * @param options An object describing nodes to look for.\n * @returns A function that executes all checks in `options` and returns `true`\n * if any of them match a node.\n */\nfunction compileTest(options) {\n var funcs = Object.keys(options).map(function (key) {\n var value = options[key];\n return Object.prototype.hasOwnProperty.call(Checks, key)\n ? Checks[key](value)\n : getAttribCheck(key, value);\n });\n return funcs.length === 0 ? null : funcs.reduce(combineFuncs);\n}\n/**\n * Checks whether a node matches the description in `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param node The element to test.\n * @returns Whether the element matches the description in `options`.\n */\nfunction testElement(options, node) {\n var test = compileTest(options);\n return test ? test(node) : true;\n}\n/**\n * Returns all nodes that match `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes that match `options`.\n */\nfunction getElements(options, nodes, recurse, limit) {\n if (limit === void 0) { limit = Infinity; }\n var test = compileTest(options);\n return test ? (0, querying_js_1.filter)(test, nodes, recurse, limit) : [];\n}\n/**\n * Returns the node with the supplied ID.\n *\n * @category Legacy Query Functions\n * @param id The unique ID attribute value to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @returns The node with the supplied ID.\n */\nfunction getElementById(id, nodes, recurse) {\n if (recurse === void 0) { recurse = true; }\n if (!Array.isArray(nodes))\n nodes = [nodes];\n return (0, querying_js_1.findOne)(getAttribCheck(\"id\", id), nodes, recurse);\n}\n/**\n * Returns all nodes with the supplied `tagName`.\n *\n * @category Legacy Query Functions\n * @param tagName Tag name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `tagName`.\n */\nfunction getElementsByTagName(tagName, nodes, recurse, limit) {\n if (recurse === void 0) { recurse = true; }\n if (limit === void 0) { limit = Infinity; }\n return (0, querying_js_1.filter)(Checks[\"tag_name\"](tagName), nodes, recurse, limit);\n}\n/**\n * Returns all nodes with the supplied `className`.\n *\n * @category Legacy Query Functions\n * @param className Class name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `className`.\n */\nfunction getElementsByClassName(className, nodes, recurse, limit) {\n if (recurse === void 0) { recurse = true; }\n if (limit === void 0) { limit = Infinity; }\n return (0, querying_js_1.filter)(getAttribCheck(\"class\", className), nodes, recurse, limit);\n}\n/**\n * Returns all nodes with the supplied `type`.\n *\n * @category Legacy Query Functions\n * @param type Element type to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `type`.\n */\nfunction getElementsByTagType(type, nodes, recurse, limit) {\n if (recurse === void 0) { recurse = true; }\n if (limit === void 0) { limit = Infinity; }\n return (0, querying_js_1.filter)(Checks[\"tag_type\"](type), nodes, recurse, limit);\n}\n//# sourceMappingURL=legacy.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DocumentPosition = void 0;\nexports.removeSubsets = removeSubsets;\nexports.compareDocumentPosition = compareDocumentPosition;\nexports.uniqueSort = uniqueSort;\nvar domhandler_1 = require(\"domhandler\");\n/**\n * Given an array of nodes, remove any member that is contained by another\n * member.\n *\n * @category Helpers\n * @param nodes Nodes to filter.\n * @returns Remaining nodes that aren't contained by other nodes.\n */\nfunction removeSubsets(nodes) {\n var idx = nodes.length;\n /*\n * Check if each node (or one of its ancestors) is already contained in the\n * array.\n */\n while (--idx >= 0) {\n var node = nodes[idx];\n /*\n * Remove the node if it is not unique.\n * We are going through the array from the end, so we only\n * have to check nodes that preceed the node under consideration in the array.\n */\n if (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) {\n nodes.splice(idx, 1);\n continue;\n }\n for (var ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n if (nodes.includes(ancestor)) {\n nodes.splice(idx, 1);\n break;\n }\n }\n }\n return nodes;\n}\n/**\n * @category Helpers\n * @see {@link http://dom.spec.whatwg.org/#dom-node-comparedocumentposition}\n */\nvar DocumentPosition;\n(function (DocumentPosition) {\n DocumentPosition[DocumentPosition[\"DISCONNECTED\"] = 1] = \"DISCONNECTED\";\n DocumentPosition[DocumentPosition[\"PRECEDING\"] = 2] = \"PRECEDING\";\n DocumentPosition[DocumentPosition[\"FOLLOWING\"] = 4] = \"FOLLOWING\";\n DocumentPosition[DocumentPosition[\"CONTAINS\"] = 8] = \"CONTAINS\";\n DocumentPosition[DocumentPosition[\"CONTAINED_BY\"] = 16] = \"CONTAINED_BY\";\n})(DocumentPosition || (exports.DocumentPosition = DocumentPosition = {}));\n/**\n * Compare the position of one node against another node in any other document,\n * returning a bitmask with the values from {@link DocumentPosition}.\n *\n * Document order:\n * > There is an ordering, document order, defined on all the nodes in the\n * > document corresponding to the order in which the first character of the\n * > XML representation of each node occurs in the XML representation of the\n * > document after expansion of general entities. Thus, the document element\n * > node will be the first node. Element nodes occur before their children.\n * > Thus, document order orders element nodes in order of the occurrence of\n * > their start-tag in the XML (after expansion of entities). The attribute\n * > nodes of an element occur after the element and before its children. The\n * > relative order of attribute nodes is implementation-dependent.\n *\n * Source:\n * http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order\n *\n * @category Helpers\n * @param nodeA The first node to use in the comparison\n * @param nodeB The second node to use in the comparison\n * @returns A bitmask describing the input nodes' relative position.\n *\n * See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for\n * a description of these values.\n */\nfunction compareDocumentPosition(nodeA, nodeB) {\n var aParents = [];\n var bParents = [];\n if (nodeA === nodeB) {\n return 0;\n }\n var current = (0, domhandler_1.hasChildren)(nodeA) ? nodeA : nodeA.parent;\n while (current) {\n aParents.unshift(current);\n current = current.parent;\n }\n current = (0, domhandler_1.hasChildren)(nodeB) ? nodeB : nodeB.parent;\n while (current) {\n bParents.unshift(current);\n current = current.parent;\n }\n var maxIdx = Math.min(aParents.length, bParents.length);\n var idx = 0;\n while (idx < maxIdx && aParents[idx] === bParents[idx]) {\n idx++;\n }\n if (idx === 0) {\n return DocumentPosition.DISCONNECTED;\n }\n var sharedParent = aParents[idx - 1];\n var siblings = sharedParent.children;\n var aSibling = aParents[idx];\n var bSibling = bParents[idx];\n if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {\n if (sharedParent === nodeB) {\n return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;\n }\n return DocumentPosition.FOLLOWING;\n }\n if (sharedParent === nodeA) {\n return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;\n }\n return DocumentPosition.PRECEDING;\n}\n/**\n * Sort an array of nodes based on their relative position in the document,\n * removing any duplicate nodes. If the array contains nodes that do not belong\n * to the same document, sort order is unspecified.\n *\n * @category Helpers\n * @param nodes Array of DOM nodes.\n * @returns Collection of unique nodes, sorted in document order.\n */\nfunction uniqueSort(nodes) {\n nodes = nodes.filter(function (node, i, arr) { return !arr.includes(node, i + 1); });\n nodes.sort(function (a, b) {\n var relative = compareDocumentPosition(a, b);\n if (relative & DocumentPosition.PRECEDING) {\n return -1;\n }\n else if (relative & DocumentPosition.FOLLOWING) {\n return 1;\n }\n return 0;\n });\n return nodes;\n}\n//# sourceMappingURL=helpers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFeed = getFeed;\nvar stringify_js_1 = require(\"./stringify.js\");\nvar legacy_js_1 = require(\"./legacy.js\");\n/**\n * Get the feed object from the root of a DOM tree.\n *\n * @category Feeds\n * @param doc - The DOM to to extract the feed from.\n * @returns The feed.\n */\nfunction getFeed(doc) {\n var feedRoot = getOneElement(isValidFeed, doc);\n return !feedRoot\n ? null\n : feedRoot.name === \"feed\"\n ? getAtomFeed(feedRoot)\n : getRssFeed(feedRoot);\n}\n/**\n * Parse an Atom feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getAtomFeed(feedRoot) {\n var _a;\n var childs = feedRoot.children;\n var feed = {\n type: \"atom\",\n items: (0, legacy_js_1.getElementsByTagName)(\"entry\", childs).map(function (item) {\n var _a;\n var children = item.children;\n var entry = { media: getMediaElements(children) };\n addConditionally(entry, \"id\", \"id\", children);\n addConditionally(entry, \"title\", \"title\", children);\n var href = (_a = getOneElement(\"link\", children)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n if (href) {\n entry.link = href;\n }\n var description = fetch(\"summary\", children) || fetch(\"content\", children);\n if (description) {\n entry.description = description;\n }\n var pubDate = fetch(\"updated\", children);\n if (pubDate) {\n entry.pubDate = new Date(pubDate);\n }\n return entry;\n }),\n };\n addConditionally(feed, \"id\", \"id\", childs);\n addConditionally(feed, \"title\", \"title\", childs);\n var href = (_a = getOneElement(\"link\", childs)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n if (href) {\n feed.link = href;\n }\n addConditionally(feed, \"description\", \"subtitle\", childs);\n var updated = fetch(\"updated\", childs);\n if (updated) {\n feed.updated = new Date(updated);\n }\n addConditionally(feed, \"author\", \"email\", childs, true);\n return feed;\n}\n/**\n * Parse a RSS feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getRssFeed(feedRoot) {\n var _a, _b;\n var childs = (_b = (_a = getOneElement(\"channel\", feedRoot.children)) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : [];\n var feed = {\n type: feedRoot.name.substr(0, 3),\n id: \"\",\n items: (0, legacy_js_1.getElementsByTagName)(\"item\", feedRoot.children).map(function (item) {\n var children = item.children;\n var entry = { media: getMediaElements(children) };\n addConditionally(entry, \"id\", \"guid\", children);\n addConditionally(entry, \"title\", \"title\", children);\n addConditionally(entry, \"link\", \"link\", children);\n addConditionally(entry, \"description\", \"description\", children);\n var pubDate = fetch(\"pubDate\", children) || fetch(\"dc:date\", children);\n if (pubDate)\n entry.pubDate = new Date(pubDate);\n return entry;\n }),\n };\n addConditionally(feed, \"title\", \"title\", childs);\n addConditionally(feed, \"link\", \"link\", childs);\n addConditionally(feed, \"description\", \"description\", childs);\n var updated = fetch(\"lastBuildDate\", childs);\n if (updated) {\n feed.updated = new Date(updated);\n }\n addConditionally(feed, \"author\", \"managingEditor\", childs, true);\n return feed;\n}\nvar MEDIA_KEYS_STRING = [\"url\", \"type\", \"lang\"];\nvar MEDIA_KEYS_INT = [\n \"fileSize\",\n \"bitrate\",\n \"framerate\",\n \"samplingrate\",\n \"channels\",\n \"duration\",\n \"height\",\n \"width\",\n];\n/**\n * Get all media elements of a feed item.\n *\n * @param where Nodes to search in.\n * @returns Media elements.\n */\nfunction getMediaElements(where) {\n return (0, legacy_js_1.getElementsByTagName)(\"media:content\", where).map(function (elem) {\n var attribs = elem.attribs;\n var media = {\n medium: attribs[\"medium\"],\n isDefault: !!attribs[\"isDefault\"],\n };\n for (var _i = 0, MEDIA_KEYS_STRING_1 = MEDIA_KEYS_STRING; _i < MEDIA_KEYS_STRING_1.length; _i++) {\n var attrib = MEDIA_KEYS_STRING_1[_i];\n if (attribs[attrib]) {\n media[attrib] = attribs[attrib];\n }\n }\n for (var _a = 0, MEDIA_KEYS_INT_1 = MEDIA_KEYS_INT; _a < MEDIA_KEYS_INT_1.length; _a++) {\n var attrib = MEDIA_KEYS_INT_1[_a];\n if (attribs[attrib]) {\n media[attrib] = parseInt(attribs[attrib], 10);\n }\n }\n if (attribs[\"expression\"]) {\n media.expression = attribs[\"expression\"];\n }\n return media;\n });\n}\n/**\n * Get one element by tag name.\n *\n * @param tagName Tag name to look for\n * @param node Node to search in\n * @returns The element or null\n */\nfunction getOneElement(tagName, node) {\n return (0, legacy_js_1.getElementsByTagName)(tagName, node, true, 1)[0];\n}\n/**\n * Get the text content of an element with a certain tag name.\n *\n * @param tagName Tag name to look for.\n * @param where Node to search in.\n * @param recurse Whether to recurse into child nodes.\n * @returns The text content of the element.\n */\nfunction fetch(tagName, where, recurse) {\n if (recurse === void 0) { recurse = false; }\n return (0, stringify_js_1.textContent)((0, legacy_js_1.getElementsByTagName)(tagName, where, recurse, 1)).trim();\n}\n/**\n * Adds a property to an object if it has a value.\n *\n * @param obj Object to be extended\n * @param prop Property name\n * @param tagName Tag name that contains the conditionally added property\n * @param where Element to search for the property\n * @param recurse Whether to recurse into child nodes.\n */\nfunction addConditionally(obj, prop, tagName, where, recurse) {\n if (recurse === void 0) { recurse = false; }\n var val = fetch(tagName, where, recurse);\n if (val)\n obj[prop] = val;\n}\n/**\n * Checks if an element is a feed root node.\n *\n * @param value The name of the element to check.\n * @returns Whether an element is a feed root node.\n */\nfunction isValidFeed(value) {\n return value === \"rss\" || value === \"feed\" || value === \"rdf:RDF\";\n}\n//# sourceMappingURL=feeds.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasChildren = exports.isDocument = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = void 0;\n__exportStar(require(\"./stringify.js\"), exports);\n__exportStar(require(\"./traversal.js\"), exports);\n__exportStar(require(\"./manipulation.js\"), exports);\n__exportStar(require(\"./querying.js\"), exports);\n__exportStar(require(\"./legacy.js\"), exports);\n__exportStar(require(\"./helpers.js\"), exports);\n__exportStar(require(\"./feeds.js\"), exports);\n/** @deprecated Use these methods from `domhandler` directly. */\nvar domhandler_1 = require(\"domhandler\");\nObject.defineProperty(exports, \"isTag\", { enumerable: true, get: function () { return domhandler_1.isTag; } });\nObject.defineProperty(exports, \"isCDATA\", { enumerable: true, get: function () { return domhandler_1.isCDATA; } });\nObject.defineProperty(exports, \"isText\", { enumerable: true, get: function () { return domhandler_1.isText; } });\nObject.defineProperty(exports, \"isComment\", { enumerable: true, get: function () { return domhandler_1.isComment; } });\nObject.defineProperty(exports, \"isDocument\", { enumerable: true, get: function () { return domhandler_1.isDocument; } });\nObject.defineProperty(exports, \"hasChildren\", { enumerable: true, get: function () { return domhandler_1.hasChildren; } });\n//# sourceMappingURL=index.js.map","module.exports = {\n\ttrueFunc: function trueFunc(){\n\t\treturn true;\n\t},\n\tfalseFunc: function falseFunc(){\n\t\treturn false;\n\t}\n};","export var SelectorType;\n(function (SelectorType) {\n SelectorType[\"Attribute\"] = \"attribute\";\n SelectorType[\"Pseudo\"] = \"pseudo\";\n SelectorType[\"PseudoElement\"] = \"pseudo-element\";\n SelectorType[\"Tag\"] = \"tag\";\n SelectorType[\"Universal\"] = \"universal\";\n // Traversals\n SelectorType[\"Adjacent\"] = \"adjacent\";\n SelectorType[\"Child\"] = \"child\";\n SelectorType[\"Descendant\"] = \"descendant\";\n SelectorType[\"Parent\"] = \"parent\";\n SelectorType[\"Sibling\"] = \"sibling\";\n SelectorType[\"ColumnCombinator\"] = \"column-combinator\";\n})(SelectorType || (SelectorType = {}));\n/**\n * Modes for ignore case.\n *\n * This could be updated to an enum, and the object is\n * the current stand-in that will allow code to be updated\n * without big changes.\n */\nexport const IgnoreCaseMode = {\n Unknown: null,\n QuirksMode: \"quirks\",\n IgnoreCase: true,\n CaseSensitive: false,\n};\nexport var AttributeAction;\n(function (AttributeAction) {\n AttributeAction[\"Any\"] = \"any\";\n AttributeAction[\"Element\"] = \"element\";\n AttributeAction[\"End\"] = \"end\";\n AttributeAction[\"Equals\"] = \"equals\";\n AttributeAction[\"Exists\"] = \"exists\";\n AttributeAction[\"Hyphen\"] = \"hyphen\";\n AttributeAction[\"Not\"] = \"not\";\n AttributeAction[\"Start\"] = \"start\";\n})(AttributeAction || (AttributeAction = {}));\n","import { SelectorType, AttributeAction, } from \"./types\";\nconst reName = /^[^\\\\#]?(?:\\\\(?:[\\da-f]{1,6}\\s?|.)|[\\w\\-\\u00b0-\\uFFFF])+/;\nconst reEscape = /\\\\([\\da-f]{1,6}\\s?|(\\s)|.)/gi;\nconst actionTypes = new Map([\n [126 /* Tilde */, AttributeAction.Element],\n [94 /* Circumflex */, AttributeAction.Start],\n [36 /* Dollar */, AttributeAction.End],\n [42 /* Asterisk */, AttributeAction.Any],\n [33 /* ExclamationMark */, AttributeAction.Not],\n [124 /* Pipe */, AttributeAction.Hyphen],\n]);\n// Pseudos, whose data property is parsed as well.\nconst unpackPseudos = new Set([\n \"has\",\n \"not\",\n \"matches\",\n \"is\",\n \"where\",\n \"host\",\n \"host-context\",\n]);\n/**\n * Checks whether a specific selector is a traversal.\n * This is useful eg. in swapping the order of elements that\n * are not traversals.\n *\n * @param selector Selector to check.\n */\nexport function isTraversal(selector) {\n switch (selector.type) {\n case SelectorType.Adjacent:\n case SelectorType.Child:\n case SelectorType.Descendant:\n case SelectorType.Parent:\n case SelectorType.Sibling:\n case SelectorType.ColumnCombinator:\n return true;\n default:\n return false;\n }\n}\nconst stripQuotesFromPseudos = new Set([\"contains\", \"icontains\"]);\n// Unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L152\nfunction funescape(_, escaped, escapedWhitespace) {\n const high = parseInt(escaped, 16) - 0x10000;\n // NaN means non-codepoint\n return high !== high || escapedWhitespace\n ? escaped\n : high < 0\n ? // BMP codepoint\n String.fromCharCode(high + 0x10000)\n : // Supplemental Plane codepoint (surrogate pair)\n String.fromCharCode((high >> 10) | 0xd800, (high & 0x3ff) | 0xdc00);\n}\nfunction unescapeCSS(str) {\n return str.replace(reEscape, funescape);\n}\nfunction isQuote(c) {\n return c === 39 /* SingleQuote */ || c === 34 /* DoubleQuote */;\n}\nfunction isWhitespace(c) {\n return (c === 32 /* Space */ ||\n c === 9 /* Tab */ ||\n c === 10 /* NewLine */ ||\n c === 12 /* FormFeed */ ||\n c === 13 /* CarriageReturn */);\n}\n/**\n * Parses `selector`, optionally with the passed `options`.\n *\n * @param selector Selector to parse.\n * @param options Options for parsing.\n * @returns Returns a two-dimensional array.\n * The first dimension represents selectors separated by commas (eg. `sub1, sub2`),\n * the second contains the relevant tokens for that selector.\n */\nexport function parse(selector) {\n const subselects = [];\n const endIndex = parseSelector(subselects, `${selector}`, 0);\n if (endIndex < selector.length) {\n throw new Error(`Unmatched selector: ${selector.slice(endIndex)}`);\n }\n return subselects;\n}\nfunction parseSelector(subselects, selector, selectorIndex) {\n let tokens = [];\n function getName(offset) {\n const match = selector.slice(selectorIndex + offset).match(reName);\n if (!match) {\n throw new Error(`Expected name, found ${selector.slice(selectorIndex)}`);\n }\n const [name] = match;\n selectorIndex += offset + name.length;\n return unescapeCSS(name);\n }\n function stripWhitespace(offset) {\n selectorIndex += offset;\n while (selectorIndex < selector.length &&\n isWhitespace(selector.charCodeAt(selectorIndex))) {\n selectorIndex++;\n }\n }\n function readValueWithParenthesis() {\n selectorIndex += 1;\n const start = selectorIndex;\n let counter = 1;\n for (; counter > 0 && selectorIndex < selector.length; selectorIndex++) {\n if (selector.charCodeAt(selectorIndex) ===\n 40 /* LeftParenthesis */ &&\n !isEscaped(selectorIndex)) {\n counter++;\n }\n else if (selector.charCodeAt(selectorIndex) ===\n 41 /* RightParenthesis */ &&\n !isEscaped(selectorIndex)) {\n counter--;\n }\n }\n if (counter) {\n throw new Error(\"Parenthesis not matched\");\n }\n return unescapeCSS(selector.slice(start, selectorIndex - 1));\n }\n function isEscaped(pos) {\n let slashCount = 0;\n while (selector.charCodeAt(--pos) === 92 /* BackSlash */)\n slashCount++;\n return (slashCount & 1) === 1;\n }\n function ensureNotTraversal() {\n if (tokens.length > 0 && isTraversal(tokens[tokens.length - 1])) {\n throw new Error(\"Did not expect successive traversals.\");\n }\n }\n function addTraversal(type) {\n if (tokens.length > 0 &&\n tokens[tokens.length - 1].type === SelectorType.Descendant) {\n tokens[tokens.length - 1].type = type;\n return;\n }\n ensureNotTraversal();\n tokens.push({ type });\n }\n function addSpecialAttribute(name, action) {\n tokens.push({\n type: SelectorType.Attribute,\n name,\n action,\n value: getName(1),\n namespace: null,\n ignoreCase: \"quirks\",\n });\n }\n /**\n * We have finished parsing the current part of the selector.\n *\n * Remove descendant tokens at the end if they exist,\n * and return the last index, so that parsing can be\n * picked up from here.\n */\n function finalizeSubselector() {\n if (tokens.length &&\n tokens[tokens.length - 1].type === SelectorType.Descendant) {\n tokens.pop();\n }\n if (tokens.length === 0) {\n throw new Error(\"Empty sub-selector\");\n }\n subselects.push(tokens);\n }\n stripWhitespace(0);\n if (selector.length === selectorIndex) {\n return selectorIndex;\n }\n loop: while (selectorIndex < selector.length) {\n const firstChar = selector.charCodeAt(selectorIndex);\n switch (firstChar) {\n // Whitespace\n case 32 /* Space */:\n case 9 /* Tab */:\n case 10 /* NewLine */:\n case 12 /* FormFeed */:\n case 13 /* CarriageReturn */: {\n if (tokens.length === 0 ||\n tokens[0].type !== SelectorType.Descendant) {\n ensureNotTraversal();\n tokens.push({ type: SelectorType.Descendant });\n }\n stripWhitespace(1);\n break;\n }\n // Traversals\n case 62 /* GreaterThan */: {\n addTraversal(SelectorType.Child);\n stripWhitespace(1);\n break;\n }\n case 60 /* LessThan */: {\n addTraversal(SelectorType.Parent);\n stripWhitespace(1);\n break;\n }\n case 126 /* Tilde */: {\n addTraversal(SelectorType.Sibling);\n stripWhitespace(1);\n break;\n }\n case 43 /* Plus */: {\n addTraversal(SelectorType.Adjacent);\n stripWhitespace(1);\n break;\n }\n // Special attribute selectors: .class, #id\n case 46 /* Period */: {\n addSpecialAttribute(\"class\", AttributeAction.Element);\n break;\n }\n case 35 /* Hash */: {\n addSpecialAttribute(\"id\", AttributeAction.Equals);\n break;\n }\n case 91 /* LeftSquareBracket */: {\n stripWhitespace(1);\n // Determine attribute name and namespace\n let name;\n let namespace = null;\n if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */) {\n // Equivalent to no namespace\n name = getName(1);\n }\n else if (selector.startsWith(\"*|\", selectorIndex)) {\n namespace = \"*\";\n name = getName(2);\n }\n else {\n name = getName(0);\n if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ &&\n selector.charCodeAt(selectorIndex + 1) !==\n 61 /* Equal */) {\n namespace = name;\n name = getName(1);\n }\n }\n stripWhitespace(0);\n // Determine comparison operation\n let action = AttributeAction.Exists;\n const possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex));\n if (possibleAction) {\n action = possibleAction;\n if (selector.charCodeAt(selectorIndex + 1) !==\n 61 /* Equal */) {\n throw new Error(\"Expected `=`\");\n }\n stripWhitespace(2);\n }\n else if (selector.charCodeAt(selectorIndex) === 61 /* Equal */) {\n action = AttributeAction.Equals;\n stripWhitespace(1);\n }\n // Determine value\n let value = \"\";\n let ignoreCase = null;\n if (action !== \"exists\") {\n if (isQuote(selector.charCodeAt(selectorIndex))) {\n const quote = selector.charCodeAt(selectorIndex);\n let sectionEnd = selectorIndex + 1;\n while (sectionEnd < selector.length &&\n (selector.charCodeAt(sectionEnd) !== quote ||\n isEscaped(sectionEnd))) {\n sectionEnd += 1;\n }\n if (selector.charCodeAt(sectionEnd) !== quote) {\n throw new Error(\"Attribute value didn't end\");\n }\n value = unescapeCSS(selector.slice(selectorIndex + 1, sectionEnd));\n selectorIndex = sectionEnd + 1;\n }\n else {\n const valueStart = selectorIndex;\n while (selectorIndex < selector.length &&\n ((!isWhitespace(selector.charCodeAt(selectorIndex)) &&\n selector.charCodeAt(selectorIndex) !==\n 93 /* RightSquareBracket */) ||\n isEscaped(selectorIndex))) {\n selectorIndex += 1;\n }\n value = unescapeCSS(selector.slice(valueStart, selectorIndex));\n }\n stripWhitespace(0);\n // See if we have a force ignore flag\n const forceIgnore = selector.charCodeAt(selectorIndex) | 0x20;\n // If the forceIgnore flag is set (either `i` or `s`), use that value\n if (forceIgnore === 115 /* LowerS */) {\n ignoreCase = false;\n stripWhitespace(1);\n }\n else if (forceIgnore === 105 /* LowerI */) {\n ignoreCase = true;\n stripWhitespace(1);\n }\n }\n if (selector.charCodeAt(selectorIndex) !==\n 93 /* RightSquareBracket */) {\n throw new Error(\"Attribute selector didn't terminate\");\n }\n selectorIndex += 1;\n const attributeSelector = {\n type: SelectorType.Attribute,\n name,\n action,\n value,\n namespace,\n ignoreCase,\n };\n tokens.push(attributeSelector);\n break;\n }\n case 58 /* Colon */: {\n if (selector.charCodeAt(selectorIndex + 1) === 58 /* Colon */) {\n tokens.push({\n type: SelectorType.PseudoElement,\n name: getName(2).toLowerCase(),\n data: selector.charCodeAt(selectorIndex) ===\n 40 /* LeftParenthesis */\n ? readValueWithParenthesis()\n : null,\n });\n continue;\n }\n const name = getName(1).toLowerCase();\n let data = null;\n if (selector.charCodeAt(selectorIndex) ===\n 40 /* LeftParenthesis */) {\n if (unpackPseudos.has(name)) {\n if (isQuote(selector.charCodeAt(selectorIndex + 1))) {\n throw new Error(`Pseudo-selector ${name} cannot be quoted`);\n }\n data = [];\n selectorIndex = parseSelector(data, selector, selectorIndex + 1);\n if (selector.charCodeAt(selectorIndex) !==\n 41 /* RightParenthesis */) {\n throw new Error(`Missing closing parenthesis in :${name} (${selector})`);\n }\n selectorIndex += 1;\n }\n else {\n data = readValueWithParenthesis();\n if (stripQuotesFromPseudos.has(name)) {\n const quot = data.charCodeAt(0);\n if (quot === data.charCodeAt(data.length - 1) &&\n isQuote(quot)) {\n data = data.slice(1, -1);\n }\n }\n data = unescapeCSS(data);\n }\n }\n tokens.push({ type: SelectorType.Pseudo, name, data });\n break;\n }\n case 44 /* Comma */: {\n finalizeSubselector();\n tokens = [];\n stripWhitespace(1);\n break;\n }\n default: {\n if (selector.startsWith(\"/*\", selectorIndex)) {\n const endIndex = selector.indexOf(\"*/\", selectorIndex + 2);\n if (endIndex < 0) {\n throw new Error(\"Comment was not terminated\");\n }\n selectorIndex = endIndex + 2;\n // Remove leading whitespace\n if (tokens.length === 0) {\n stripWhitespace(0);\n }\n break;\n }\n let namespace = null;\n let name;\n if (firstChar === 42 /* Asterisk */) {\n selectorIndex += 1;\n name = \"*\";\n }\n else if (firstChar === 124 /* Pipe */) {\n name = \"\";\n if (selector.charCodeAt(selectorIndex + 1) === 124 /* Pipe */) {\n addTraversal(SelectorType.ColumnCombinator);\n stripWhitespace(2);\n break;\n }\n }\n else if (reName.test(selector.slice(selectorIndex))) {\n name = getName(0);\n }\n else {\n break loop;\n }\n if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ &&\n selector.charCodeAt(selectorIndex + 1) !== 124 /* Pipe */) {\n namespace = name;\n if (selector.charCodeAt(selectorIndex + 1) ===\n 42 /* Asterisk */) {\n name = \"*\";\n selectorIndex += 2;\n }\n else {\n name = getName(1);\n }\n }\n tokens.push(name === \"*\"\n ? { type: SelectorType.Universal, namespace }\n : { type: SelectorType.Tag, name, namespace });\n }\n }\n }\n finalizeSubselector();\n return selectorIndex;\n}\n","import { SelectorType, AttributeAction } from \"./types\";\nconst attribValChars = [\"\\\\\", '\"'];\nconst pseudoValChars = [...attribValChars, \"(\", \")\"];\nconst charsToEscapeInAttributeValue = new Set(attribValChars.map((c) => c.charCodeAt(0)));\nconst charsToEscapeInPseudoValue = new Set(pseudoValChars.map((c) => c.charCodeAt(0)));\nconst charsToEscapeInName = new Set([\n ...pseudoValChars,\n \"~\",\n \"^\",\n \"$\",\n \"*\",\n \"+\",\n \"!\",\n \"|\",\n \":\",\n \"[\",\n \"]\",\n \" \",\n \".\",\n].map((c) => c.charCodeAt(0)));\n/**\n * Turns `selector` back into a string.\n *\n * @param selector Selector to stringify.\n */\nexport function stringify(selector) {\n return selector\n .map((token) => token.map(stringifyToken).join(\"\"))\n .join(\", \");\n}\nfunction stringifyToken(token, index, arr) {\n switch (token.type) {\n // Simple types\n case SelectorType.Child:\n return index === 0 ? \"> \" : \" > \";\n case SelectorType.Parent:\n return index === 0 ? \"< \" : \" < \";\n case SelectorType.Sibling:\n return index === 0 ? \"~ \" : \" ~ \";\n case SelectorType.Adjacent:\n return index === 0 ? \"+ \" : \" + \";\n case SelectorType.Descendant:\n return \" \";\n case SelectorType.ColumnCombinator:\n return index === 0 ? \"|| \" : \" || \";\n case SelectorType.Universal:\n // Return an empty string if the selector isn't needed.\n return token.namespace === \"*\" &&\n index + 1 < arr.length &&\n \"name\" in arr[index + 1]\n ? \"\"\n : `${getNamespace(token.namespace)}*`;\n case SelectorType.Tag:\n return getNamespacedName(token);\n case SelectorType.PseudoElement:\n return `::${escapeName(token.name, charsToEscapeInName)}${token.data === null\n ? \"\"\n : `(${escapeName(token.data, charsToEscapeInPseudoValue)})`}`;\n case SelectorType.Pseudo:\n return `:${escapeName(token.name, charsToEscapeInName)}${token.data === null\n ? \"\"\n : `(${typeof token.data === \"string\"\n ? escapeName(token.data, charsToEscapeInPseudoValue)\n : stringify(token.data)})`}`;\n case SelectorType.Attribute: {\n if (token.name === \"id\" &&\n token.action === AttributeAction.Equals &&\n token.ignoreCase === \"quirks\" &&\n !token.namespace) {\n return `#${escapeName(token.value, charsToEscapeInName)}`;\n }\n if (token.name === \"class\" &&\n token.action === AttributeAction.Element &&\n token.ignoreCase === \"quirks\" &&\n !token.namespace) {\n return `.${escapeName(token.value, charsToEscapeInName)}`;\n }\n const name = getNamespacedName(token);\n if (token.action === AttributeAction.Exists) {\n return `[${name}]`;\n }\n return `[${name}${getActionValue(token.action)}=\"${escapeName(token.value, charsToEscapeInAttributeValue)}\"${token.ignoreCase === null ? \"\" : token.ignoreCase ? \" i\" : \" s\"}]`;\n }\n }\n}\nfunction getActionValue(action) {\n switch (action) {\n case AttributeAction.Equals:\n return \"\";\n case AttributeAction.Element:\n return \"~\";\n case AttributeAction.Start:\n return \"^\";\n case AttributeAction.End:\n return \"$\";\n case AttributeAction.Any:\n return \"*\";\n case AttributeAction.Not:\n return \"!\";\n case AttributeAction.Hyphen:\n return \"|\";\n case AttributeAction.Exists:\n throw new Error(\"Shouldn't be here\");\n }\n}\nfunction getNamespacedName(token) {\n return `${getNamespace(token.namespace)}${escapeName(token.name, charsToEscapeInName)}`;\n}\nfunction getNamespace(namespace) {\n return namespace !== null\n ? `${namespace === \"*\"\n ? \"*\"\n : escapeName(namespace, charsToEscapeInName)}|`\n : \"\";\n}\nfunction escapeName(str, charsToEscape) {\n let lastIdx = 0;\n let ret = \"\";\n for (let i = 0; i < str.length; i++) {\n if (charsToEscape.has(str.charCodeAt(i))) {\n ret += `${str.slice(lastIdx, i)}\\\\${str.charAt(i)}`;\n lastIdx = i + 1;\n }\n }\n return ret.length > 0 ? ret + str.slice(lastIdx) : str;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isTraversal = void 0;\nvar css_what_1 = require(\"css-what\");\nvar procedure = new Map([\n [css_what_1.SelectorType.Universal, 50],\n [css_what_1.SelectorType.Tag, 30],\n [css_what_1.SelectorType.Attribute, 1],\n [css_what_1.SelectorType.Pseudo, 0],\n]);\nfunction isTraversal(token) {\n return !procedure.has(token.type);\n}\nexports.isTraversal = isTraversal;\nvar attributes = new Map([\n [css_what_1.AttributeAction.Exists, 10],\n [css_what_1.AttributeAction.Equals, 8],\n [css_what_1.AttributeAction.Not, 7],\n [css_what_1.AttributeAction.Start, 6],\n [css_what_1.AttributeAction.End, 6],\n [css_what_1.AttributeAction.Any, 5],\n]);\n/**\n * Sort the parts of the passed selector,\n * as there is potential for optimization\n * (some types of selectors are faster than others)\n *\n * @param arr Selector to sort\n */\nfunction sortByProcedure(arr) {\n var procs = arr.map(getProcedure);\n for (var i = 1; i < arr.length; i++) {\n var procNew = procs[i];\n if (procNew < 0)\n continue;\n for (var j = i - 1; j >= 0 && procNew < procs[j]; j--) {\n var token = arr[j + 1];\n arr[j + 1] = arr[j];\n arr[j] = token;\n procs[j + 1] = procs[j];\n procs[j] = procNew;\n }\n }\n}\nexports.default = sortByProcedure;\nfunction getProcedure(token) {\n var _a, _b;\n var proc = (_a = procedure.get(token.type)) !== null && _a !== void 0 ? _a : -1;\n if (token.type === css_what_1.SelectorType.Attribute) {\n proc = (_b = attributes.get(token.action)) !== null && _b !== void 0 ? _b : 4;\n if (token.action === css_what_1.AttributeAction.Equals && token.name === \"id\") {\n // Prefer ID selectors (eg. #ID)\n proc = 9;\n }\n if (token.ignoreCase) {\n /*\n * IgnoreCase adds some overhead, prefer \"normal\" token\n * this is a binary operation, to ensure it's still an int\n */\n proc >>= 1;\n }\n }\n else if (token.type === css_what_1.SelectorType.Pseudo) {\n if (!token.data) {\n proc = 3;\n }\n else if (token.name === \"has\" || token.name === \"contains\") {\n proc = 0; // Expensive in any case\n }\n else if (Array.isArray(token.data)) {\n // Eg. :matches, :not\n proc = Math.min.apply(Math, token.data.map(function (d) { return Math.min.apply(Math, d.map(getProcedure)); }));\n // If we have traversals, try to avoid executing this selector\n if (proc < 0) {\n proc = 0;\n }\n }\n else {\n proc = 2;\n }\n }\n return proc;\n}\n//# sourceMappingURL=sort.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.attributeRules = void 0;\nvar boolbase_1 = __importDefault(require(\"boolbase\"));\n/**\n * All reserved characters in a regex, used for escaping.\n *\n * Taken from XRegExp, (c) 2007-2020 Steven Levithan under the MIT license\n * https://github.com/slevithan/xregexp/blob/95eeebeb8fac8754d54eafe2b4743661ac1cf028/src/xregexp.js#L794\n */\nvar reChars = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\nfunction escapeRegex(value) {\n return value.replace(reChars, \"\\\\$&\");\n}\n/**\n * Attributes that are case-insensitive in HTML.\n *\n * @private\n * @see https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors\n */\nvar caseInsensitiveAttributes = new Set([\n \"accept\",\n \"accept-charset\",\n \"align\",\n \"alink\",\n \"axis\",\n \"bgcolor\",\n \"charset\",\n \"checked\",\n \"clear\",\n \"codetype\",\n \"color\",\n \"compact\",\n \"declare\",\n \"defer\",\n \"dir\",\n \"direction\",\n \"disabled\",\n \"enctype\",\n \"face\",\n \"frame\",\n \"hreflang\",\n \"http-equiv\",\n \"lang\",\n \"language\",\n \"link\",\n \"media\",\n \"method\",\n \"multiple\",\n \"nohref\",\n \"noresize\",\n \"noshade\",\n \"nowrap\",\n \"readonly\",\n \"rel\",\n \"rev\",\n \"rules\",\n \"scope\",\n \"scrolling\",\n \"selected\",\n \"shape\",\n \"target\",\n \"text\",\n \"type\",\n \"valign\",\n \"valuetype\",\n \"vlink\",\n]);\nfunction shouldIgnoreCase(selector, options) {\n return typeof selector.ignoreCase === \"boolean\"\n ? selector.ignoreCase\n : selector.ignoreCase === \"quirks\"\n ? !!options.quirksMode\n : !options.xmlMode && caseInsensitiveAttributes.has(selector.name);\n}\n/**\n * Attribute selectors\n */\nexports.attributeRules = {\n equals: function (next, data, options) {\n var adapter = options.adapter;\n var name = data.name;\n var value = data.value;\n if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return function (elem) {\n var attr = adapter.getAttributeValue(elem, name);\n return (attr != null &&\n attr.length === value.length &&\n attr.toLowerCase() === value &&\n next(elem));\n };\n }\n return function (elem) {\n return adapter.getAttributeValue(elem, name) === value && next(elem);\n };\n },\n hyphen: function (next, data, options) {\n var adapter = options.adapter;\n var name = data.name;\n var value = data.value;\n var len = value.length;\n if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return function hyphenIC(elem) {\n var attr = adapter.getAttributeValue(elem, name);\n return (attr != null &&\n (attr.length === len || attr.charAt(len) === \"-\") &&\n attr.substr(0, len).toLowerCase() === value &&\n next(elem));\n };\n }\n return function hyphen(elem) {\n var attr = adapter.getAttributeValue(elem, name);\n return (attr != null &&\n (attr.length === len || attr.charAt(len) === \"-\") &&\n attr.substr(0, len) === value &&\n next(elem));\n };\n },\n element: function (next, data, options) {\n var adapter = options.adapter;\n var name = data.name, value = data.value;\n if (/\\s/.test(value)) {\n return boolbase_1.default.falseFunc;\n }\n var regex = new RegExp(\"(?:^|\\\\s)\".concat(escapeRegex(value), \"(?:$|\\\\s)\"), shouldIgnoreCase(data, options) ? \"i\" : \"\");\n return function element(elem) {\n var attr = adapter.getAttributeValue(elem, name);\n return (attr != null &&\n attr.length >= value.length &&\n regex.test(attr) &&\n next(elem));\n };\n },\n exists: function (next, _a, _b) {\n var name = _a.name;\n var adapter = _b.adapter;\n return function (elem) { return adapter.hasAttrib(elem, name) && next(elem); };\n },\n start: function (next, data, options) {\n var adapter = options.adapter;\n var name = data.name;\n var value = data.value;\n var len = value.length;\n if (len === 0) {\n return boolbase_1.default.falseFunc;\n }\n if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return function (elem) {\n var attr = adapter.getAttributeValue(elem, name);\n return (attr != null &&\n attr.length >= len &&\n attr.substr(0, len).toLowerCase() === value &&\n next(elem));\n };\n }\n return function (elem) {\n var _a;\n return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.startsWith(value)) &&\n next(elem);\n };\n },\n end: function (next, data, options) {\n var adapter = options.adapter;\n var name = data.name;\n var value = data.value;\n var len = -value.length;\n if (len === 0) {\n return boolbase_1.default.falseFunc;\n }\n if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return function (elem) {\n var _a;\n return ((_a = adapter\n .getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.substr(len).toLowerCase()) === value && next(elem);\n };\n }\n return function (elem) {\n var _a;\n return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.endsWith(value)) &&\n next(elem);\n };\n },\n any: function (next, data, options) {\n var adapter = options.adapter;\n var name = data.name, value = data.value;\n if (value === \"\") {\n return boolbase_1.default.falseFunc;\n }\n if (shouldIgnoreCase(data, options)) {\n var regex_1 = new RegExp(escapeRegex(value), \"i\");\n return function anyIC(elem) {\n var attr = adapter.getAttributeValue(elem, name);\n return (attr != null &&\n attr.length >= value.length &&\n regex_1.test(attr) &&\n next(elem));\n };\n }\n return function (elem) {\n var _a;\n return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.includes(value)) &&\n next(elem);\n };\n },\n not: function (next, data, options) {\n var adapter = options.adapter;\n var name = data.name;\n var value = data.value;\n if (value === \"\") {\n return function (elem) {\n return !!adapter.getAttributeValue(elem, name) && next(elem);\n };\n }\n else if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return function (elem) {\n var attr = adapter.getAttributeValue(elem, name);\n return ((attr == null ||\n attr.length !== value.length ||\n attr.toLowerCase() !== value) &&\n next(elem));\n };\n }\n return function (elem) {\n return adapter.getAttributeValue(elem, name) !== value && next(elem);\n };\n },\n};\n//# sourceMappingURL=attributes.js.map","\"use strict\";\n// Following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = void 0;\n// Whitespace as per https://www.w3.org/TR/selectors-3/#lex is \" \\t\\r\\n\\f\"\nvar whitespace = new Set([9, 10, 12, 13, 32]);\nvar ZERO = \"0\".charCodeAt(0);\nvar NINE = \"9\".charCodeAt(0);\n/**\n * Parses an expression.\n *\n * @throws An `Error` if parsing fails.\n * @returns An array containing the integer step size and the integer offset of the nth rule.\n * @example nthCheck.parse(\"2n+3\"); // returns [2, 3]\n */\nfunction parse(formula) {\n formula = formula.trim().toLowerCase();\n if (formula === \"even\") {\n return [2, 0];\n }\n else if (formula === \"odd\") {\n return [2, 1];\n }\n // Parse [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]?\n var idx = 0;\n var a = 0;\n var sign = readSign();\n var number = readNumber();\n if (idx < formula.length && formula.charAt(idx) === \"n\") {\n idx++;\n a = sign * (number !== null && number !== void 0 ? number : 1);\n skipWhitespace();\n if (idx < formula.length) {\n sign = readSign();\n skipWhitespace();\n number = readNumber();\n }\n else {\n sign = number = 0;\n }\n }\n // Throw if there is anything else\n if (number === null || idx < formula.length) {\n throw new Error(\"n-th rule couldn't be parsed ('\".concat(formula, \"')\"));\n }\n return [a, sign * number];\n function readSign() {\n if (formula.charAt(idx) === \"-\") {\n idx++;\n return -1;\n }\n if (formula.charAt(idx) === \"+\") {\n idx++;\n }\n return 1;\n }\n function readNumber() {\n var start = idx;\n var value = 0;\n while (idx < formula.length &&\n formula.charCodeAt(idx) >= ZERO &&\n formula.charCodeAt(idx) <= NINE) {\n value = value * 10 + (formula.charCodeAt(idx) - ZERO);\n idx++;\n }\n // Return `null` if we didn't read anything.\n return idx === start ? null : value;\n }\n function skipWhitespace() {\n while (idx < formula.length &&\n whitespace.has(formula.charCodeAt(idx))) {\n idx++;\n }\n }\n}\nexports.parse = parse;\n//# sourceMappingURL=parse.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generate = exports.compile = void 0;\nvar boolbase_1 = __importDefault(require(\"boolbase\"));\n/**\n * Returns a function that checks if an elements index matches the given rule\n * highly optimized to return the fastest solution.\n *\n * @param parsed A tuple [a, b], as returned by `parse`.\n * @returns A highly optimized function that returns whether an index matches the nth-check.\n * @example\n *\n * ```js\n * const check = nthCheck.compile([2, 3]);\n *\n * check(0); // `false`\n * check(1); // `false`\n * check(2); // `true`\n * check(3); // `false`\n * check(4); // `true`\n * check(5); // `false`\n * check(6); // `true`\n * ```\n */\nfunction compile(parsed) {\n var a = parsed[0];\n // Subtract 1 from `b`, to convert from one- to zero-indexed.\n var b = parsed[1] - 1;\n /*\n * When `b <= 0`, `a * n` won't be lead to any matches for `a < 0`.\n * Besides, the specification states that no elements are\n * matched when `a` and `b` are 0.\n *\n * `b < 0` here as we subtracted 1 from `b` above.\n */\n if (b < 0 && a <= 0)\n return boolbase_1.default.falseFunc;\n // When `a` is in the range -1..1, it matches any element (so only `b` is checked).\n if (a === -1)\n return function (index) { return index <= b; };\n if (a === 0)\n return function (index) { return index === b; };\n // When `b <= 0` and `a === 1`, they match any element.\n if (a === 1)\n return b < 0 ? boolbase_1.default.trueFunc : function (index) { return index >= b; };\n /*\n * Otherwise, modulo can be used to check if there is a match.\n *\n * Modulo doesn't care about the sign, so let's use `a`s absolute value.\n */\n var absA = Math.abs(a);\n // Get `b mod a`, + a if this is negative.\n var bMod = ((b % absA) + absA) % absA;\n return a > 1\n ? function (index) { return index >= b && index % absA === bMod; }\n : function (index) { return index <= b && index % absA === bMod; };\n}\nexports.compile = compile;\n/**\n * Returns a function that produces a monotonously increasing sequence of indices.\n *\n * If the sequence has an end, the returned function will return `null` after\n * the last index in the sequence.\n *\n * @param parsed A tuple [a, b], as returned by `parse`.\n * @returns A function that produces a sequence of indices.\n * @example <caption>Always increasing (2n+3)</caption>\n *\n * ```js\n * const gen = nthCheck.generate([2, 3])\n *\n * gen() // `1`\n * gen() // `3`\n * gen() // `5`\n * gen() // `8`\n * gen() // `11`\n * ```\n *\n * @example <caption>With end value (-2n+10)</caption>\n *\n * ```js\n *\n * const gen = nthCheck.generate([-2, 5]);\n *\n * gen() // 0\n * gen() // 2\n * gen() // 4\n * gen() // null\n * ```\n */\nfunction generate(parsed) {\n var a = parsed[0];\n // Subtract 1 from `b`, to convert from one- to zero-indexed.\n var b = parsed[1] - 1;\n var n = 0;\n // Make sure to always return an increasing sequence\n if (a < 0) {\n var aPos_1 = -a;\n // Get `b mod a`\n var minValue_1 = ((b % aPos_1) + aPos_1) % aPos_1;\n return function () {\n var val = minValue_1 + aPos_1 * n++;\n return val > b ? null : val;\n };\n }\n if (a === 0)\n return b < 0\n ? // There are no result — always return `null`\n function () { return null; }\n : // Return `b` exactly once\n function () { return (n++ === 0 ? b : null); };\n if (b < 0) {\n b += a * Math.ceil(-b / a);\n }\n return function () { return a * n++ + b; };\n}\nexports.generate = generate;\n//# sourceMappingURL=compile.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequence = exports.generate = exports.compile = exports.parse = void 0;\nvar parse_js_1 = require(\"./parse.js\");\nObject.defineProperty(exports, \"parse\", { enumerable: true, get: function () { return parse_js_1.parse; } });\nvar compile_js_1 = require(\"./compile.js\");\nObject.defineProperty(exports, \"compile\", { enumerable: true, get: function () { return compile_js_1.compile; } });\nObject.defineProperty(exports, \"generate\", { enumerable: true, get: function () { return compile_js_1.generate; } });\n/**\n * Parses and compiles a formula to a highly optimized function.\n * Combination of {@link parse} and {@link compile}.\n *\n * If the formula doesn't match any elements,\n * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`.\n * Otherwise, a function accepting an _index_ is returned, which returns\n * whether or not the passed _index_ matches the formula.\n *\n * Note: The nth-rule starts counting at `1`, the returned function at `0`.\n *\n * @param formula The formula to compile.\n * @example\n * const check = nthCheck(\"2n+3\");\n *\n * check(0); // `false`\n * check(1); // `false`\n * check(2); // `true`\n * check(3); // `false`\n * check(4); // `true`\n * check(5); // `false`\n * check(6); // `true`\n */\nfunction nthCheck(formula) {\n return (0, compile_js_1.compile)((0, parse_js_1.parse)(formula));\n}\nexports.default = nthCheck;\n/**\n * Parses and compiles a formula to a generator that produces a sequence of indices.\n * Combination of {@link parse} and {@link generate}.\n *\n * @param formula The formula to compile.\n * @returns A function that produces a sequence of indices.\n * @example <caption>Always increasing</caption>\n *\n * ```js\n * const gen = nthCheck.sequence('2n+3')\n *\n * gen() // `1`\n * gen() // `3`\n * gen() // `5`\n * gen() // `8`\n * gen() // `11`\n * ```\n *\n * @example <caption>With end value</caption>\n *\n * ```js\n *\n * const gen = nthCheck.sequence('-2n+5');\n *\n * gen() // 0\n * gen() // 2\n * gen() // 4\n * gen() // null\n * ```\n */\nfunction sequence(formula) {\n return (0, compile_js_1.generate)((0, parse_js_1.parse)(formula));\n}\nexports.sequence = sequence;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.filters = void 0;\nvar nth_check_1 = __importDefault(require(\"nth-check\"));\nvar boolbase_1 = __importDefault(require(\"boolbase\"));\nfunction getChildFunc(next, adapter) {\n return function (elem) {\n var parent = adapter.getParent(elem);\n return parent != null && adapter.isTag(parent) && next(elem);\n };\n}\nexports.filters = {\n contains: function (next, text, _a) {\n var adapter = _a.adapter;\n return function contains(elem) {\n return next(elem) && adapter.getText(elem).includes(text);\n };\n },\n icontains: function (next, text, _a) {\n var adapter = _a.adapter;\n var itext = text.toLowerCase();\n return function icontains(elem) {\n return (next(elem) &&\n adapter.getText(elem).toLowerCase().includes(itext));\n };\n },\n // Location specific methods\n \"nth-child\": function (next, rule, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n var func = (0, nth_check_1.default)(rule);\n if (func === boolbase_1.default.falseFunc)\n return boolbase_1.default.falseFunc;\n if (func === boolbase_1.default.trueFunc)\n return getChildFunc(next, adapter);\n return function nthChild(elem) {\n var siblings = adapter.getSiblings(elem);\n var pos = 0;\n for (var i = 0; i < siblings.length; i++) {\n if (equals(elem, siblings[i]))\n break;\n if (adapter.isTag(siblings[i])) {\n pos++;\n }\n }\n return func(pos) && next(elem);\n };\n },\n \"nth-last-child\": function (next, rule, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n var func = (0, nth_check_1.default)(rule);\n if (func === boolbase_1.default.falseFunc)\n return boolbase_1.default.falseFunc;\n if (func === boolbase_1.default.trueFunc)\n return getChildFunc(next, adapter);\n return function nthLastChild(elem) {\n var siblings = adapter.getSiblings(elem);\n var pos = 0;\n for (var i = siblings.length - 1; i >= 0; i--) {\n if (equals(elem, siblings[i]))\n break;\n if (adapter.isTag(siblings[i])) {\n pos++;\n }\n }\n return func(pos) && next(elem);\n };\n },\n \"nth-of-type\": function (next, rule, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n var func = (0, nth_check_1.default)(rule);\n if (func === boolbase_1.default.falseFunc)\n return boolbase_1.default.falseFunc;\n if (func === boolbase_1.default.trueFunc)\n return getChildFunc(next, adapter);\n return function nthOfType(elem) {\n var siblings = adapter.getSiblings(elem);\n var pos = 0;\n for (var i = 0; i < siblings.length; i++) {\n var currentSibling = siblings[i];\n if (equals(elem, currentSibling))\n break;\n if (adapter.isTag(currentSibling) &&\n adapter.getName(currentSibling) === adapter.getName(elem)) {\n pos++;\n }\n }\n return func(pos) && next(elem);\n };\n },\n \"nth-last-of-type\": function (next, rule, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n var func = (0, nth_check_1.default)(rule);\n if (func === boolbase_1.default.falseFunc)\n return boolbase_1.default.falseFunc;\n if (func === boolbase_1.default.trueFunc)\n return getChildFunc(next, adapter);\n return function nthLastOfType(elem) {\n var siblings = adapter.getSiblings(elem);\n var pos = 0;\n for (var i = siblings.length - 1; i >= 0; i--) {\n var currentSibling = siblings[i];\n if (equals(elem, currentSibling))\n break;\n if (adapter.isTag(currentSibling) &&\n adapter.getName(currentSibling) === adapter.getName(elem)) {\n pos++;\n }\n }\n return func(pos) && next(elem);\n };\n },\n // TODO determine the actual root element\n root: function (next, _rule, _a) {\n var adapter = _a.adapter;\n return function (elem) {\n var parent = adapter.getParent(elem);\n return (parent == null || !adapter.isTag(parent)) && next(elem);\n };\n },\n scope: function (next, rule, options, context) {\n var equals = options.equals;\n if (!context || context.length === 0) {\n // Equivalent to :root\n return exports.filters[\"root\"](next, rule, options);\n }\n if (context.length === 1) {\n // NOTE: can't be unpacked, as :has uses this for side-effects\n return function (elem) { return equals(context[0], elem) && next(elem); };\n }\n return function (elem) { return context.includes(elem) && next(elem); };\n },\n hover: dynamicStatePseudo(\"isHovered\"),\n visited: dynamicStatePseudo(\"isVisited\"),\n active: dynamicStatePseudo(\"isActive\"),\n};\n/**\n * Dynamic state pseudos. These depend on optional Adapter methods.\n *\n * @param name The name of the adapter method to call.\n * @returns Pseudo for the `filters` object.\n */\nfunction dynamicStatePseudo(name) {\n return function dynamicPseudo(next, _rule, _a) {\n var adapter = _a.adapter;\n var func = adapter[name];\n if (typeof func !== \"function\") {\n return boolbase_1.default.falseFunc;\n }\n return function active(elem) {\n return func(elem) && next(elem);\n };\n };\n}\n//# sourceMappingURL=filters.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.verifyPseudoArgs = exports.pseudos = void 0;\n// While filters are precompiled, pseudos get called when they are needed\nexports.pseudos = {\n empty: function (elem, _a) {\n var adapter = _a.adapter;\n return !adapter.getChildren(elem).some(function (elem) {\n // FIXME: `getText` call is potentially expensive.\n return adapter.isTag(elem) || adapter.getText(elem) !== \"\";\n });\n },\n \"first-child\": function (elem, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n if (adapter.prevElementSibling) {\n return adapter.prevElementSibling(elem) == null;\n }\n var firstChild = adapter\n .getSiblings(elem)\n .find(function (elem) { return adapter.isTag(elem); });\n return firstChild != null && equals(elem, firstChild);\n },\n \"last-child\": function (elem, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n var siblings = adapter.getSiblings(elem);\n for (var i = siblings.length - 1; i >= 0; i--) {\n if (equals(elem, siblings[i]))\n return true;\n if (adapter.isTag(siblings[i]))\n break;\n }\n return false;\n },\n \"first-of-type\": function (elem, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n var siblings = adapter.getSiblings(elem);\n var elemName = adapter.getName(elem);\n for (var i = 0; i < siblings.length; i++) {\n var currentSibling = siblings[i];\n if (equals(elem, currentSibling))\n return true;\n if (adapter.isTag(currentSibling) &&\n adapter.getName(currentSibling) === elemName) {\n break;\n }\n }\n return false;\n },\n \"last-of-type\": function (elem, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n var siblings = adapter.getSiblings(elem);\n var elemName = adapter.getName(elem);\n for (var i = siblings.length - 1; i >= 0; i--) {\n var currentSibling = siblings[i];\n if (equals(elem, currentSibling))\n return true;\n if (adapter.isTag(currentSibling) &&\n adapter.getName(currentSibling) === elemName) {\n break;\n }\n }\n return false;\n },\n \"only-of-type\": function (elem, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n var elemName = adapter.getName(elem);\n return adapter\n .getSiblings(elem)\n .every(function (sibling) {\n return equals(elem, sibling) ||\n !adapter.isTag(sibling) ||\n adapter.getName(sibling) !== elemName;\n });\n },\n \"only-child\": function (elem, _a) {\n var adapter = _a.adapter, equals = _a.equals;\n return adapter\n .getSiblings(elem)\n .every(function (sibling) { return equals(elem, sibling) || !adapter.isTag(sibling); });\n },\n};\nfunction verifyPseudoArgs(func, name, subselect, argIndex) {\n if (subselect === null) {\n if (func.length > argIndex) {\n throw new Error(\"Pseudo-class :\".concat(name, \" requires an argument\"));\n }\n }\n else if (func.length === argIndex) {\n throw new Error(\"Pseudo-class :\".concat(name, \" doesn't have any arguments\"));\n }\n}\nexports.verifyPseudoArgs = verifyPseudoArgs;\n//# sourceMappingURL=pseudos.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aliases = void 0;\n/**\n * Aliases are pseudos that are expressed as selectors.\n */\nexports.aliases = {\n // Links\n \"any-link\": \":is(a, area, link)[href]\",\n link: \":any-link:not(:visited)\",\n // Forms\n // https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements\n disabled: \":is(\\n :is(button, input, select, textarea, optgroup, option)[disabled],\\n optgroup[disabled] > option,\\n fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\\n )\",\n enabled: \":not(:disabled)\",\n checked: \":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)\",\n required: \":is(input, select, textarea)[required]\",\n optional: \":is(input, select, textarea):not([required])\",\n // JQuery extensions\n // https://html.spec.whatwg.org/multipage/form-elements.html#concept-option-selectedness\n selected: \"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)\",\n checkbox: \"[type=checkbox]\",\n file: \"[type=file]\",\n password: \"[type=password]\",\n radio: \"[type=radio]\",\n reset: \"[type=reset]\",\n image: \"[type=image]\",\n submit: \"[type=submit]\",\n parent: \":not(:empty)\",\n header: \":is(h1, h2, h3, h4, h5, h6)\",\n button: \":is(button, input[type=button])\",\n input: \":is(input, textarea, select, button)\",\n text: \"input:is(:not([type!='']), [type=text])\",\n};\n//# sourceMappingURL=aliases.js.map","\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subselects = exports.getNextSiblings = exports.ensureIsTag = exports.PLACEHOLDER_ELEMENT = void 0;\nvar boolbase_1 = __importDefault(require(\"boolbase\"));\nvar sort_js_1 = require(\"../sort.js\");\n/** Used as a placeholder for :has. Will be replaced with the actual element. */\nexports.PLACEHOLDER_ELEMENT = {};\nfunction ensureIsTag(next, adapter) {\n if (next === boolbase_1.default.falseFunc)\n return boolbase_1.default.falseFunc;\n return function (elem) { return adapter.isTag(elem) && next(elem); };\n}\nexports.ensureIsTag = ensureIsTag;\nfunction getNextSiblings(elem, adapter) {\n var siblings = adapter.getSiblings(elem);\n if (siblings.length <= 1)\n return [];\n var elemIndex = siblings.indexOf(elem);\n if (elemIndex < 0 || elemIndex === siblings.length - 1)\n return [];\n return siblings.slice(elemIndex + 1).filter(adapter.isTag);\n}\nexports.getNextSiblings = getNextSiblings;\nfunction copyOptions(options) {\n // Not copied: context, rootFunc\n return {\n xmlMode: !!options.xmlMode,\n lowerCaseAttributeNames: !!options.lowerCaseAttributeNames,\n lowerCaseTags: !!options.lowerCaseTags,\n quirksMode: !!options.quirksMode,\n cacheResults: !!options.cacheResults,\n pseudos: options.pseudos,\n adapter: options.adapter,\n equals: options.equals,\n };\n}\nvar is = function (next, token, options, context, compileToken) {\n var func = compileToken(token, copyOptions(options), context);\n return func === boolbase_1.default.trueFunc\n ? next\n : func === boolbase_1.default.falseFunc\n ? boolbase_1.default.falseFunc\n : function (elem) { return func(elem) && next(elem); };\n};\n/*\n * :not, :has, :is, :matches and :where have to compile selectors\n * doing this in src/pseudos.ts would lead to circular dependencies,\n * so we add them here\n */\nexports.subselects = {\n is: is,\n /**\n * `:matches` and `:where` are aliases for `:is`.\n */\n matches: is,\n where: is,\n not: function (next, token, options, context, compileToken) {\n var func = compileToken(token, copyOptions(options), context);\n return func === boolbase_1.default.falseFunc\n ? next\n : func === boolbase_1.default.trueFunc\n ? boolbase_1.default.falseFunc\n : function (elem) { return !func(elem) && next(elem); };\n },\n has: function (next, subselect, options, _context, compileToken) {\n var adapter = options.adapter;\n var opts = copyOptions(options);\n opts.relativeSelector = true;\n var context = subselect.some(function (s) { return s.some(sort_js_1.isTraversal); })\n ? // Used as a placeholder. Will be replaced with the actual element.\n [exports.PLACEHOLDER_ELEMENT]\n : undefined;\n var compiled = compileToken(subselect, opts, context);\n if (compiled === boolbase_1.default.falseFunc)\n return boolbase_1.default.falseFunc;\n var hasElement = ensureIsTag(compiled, adapter);\n // If `compiled` is `trueFunc`, we can skip this.\n if (context && compiled !== boolbase_1.default.trueFunc) {\n /*\n * `shouldTestNextSiblings` will only be true if the query starts with\n * a traversal (sibling or adjacent). That means we will always have a context.\n */\n var _a = compiled.shouldTestNextSiblings, shouldTestNextSiblings_1 = _a === void 0 ? false : _a;\n return function (elem) {\n if (!next(elem))\n return false;\n context[0] = elem;\n var childs = adapter.getChildren(elem);\n var nextElements = shouldTestNextSiblings_1\n ? __spreadArray(__spreadArray([], childs, true), getNextSiblings(elem, adapter), true) : childs;\n return adapter.existsOne(hasElement, nextElements);\n };\n }\n return function (elem) {\n return next(elem) &&\n adapter.existsOne(hasElement, adapter.getChildren(elem));\n };\n },\n};\n//# sourceMappingURL=subselects.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compilePseudoSelector = exports.aliases = exports.pseudos = exports.filters = void 0;\nvar css_what_1 = require(\"css-what\");\nvar filters_js_1 = require(\"./filters.js\");\nObject.defineProperty(exports, \"filters\", { enumerable: true, get: function () { return filters_js_1.filters; } });\nvar pseudos_js_1 = require(\"./pseudos.js\");\nObject.defineProperty(exports, \"pseudos\", { enumerable: true, get: function () { return pseudos_js_1.pseudos; } });\nvar aliases_js_1 = require(\"./aliases.js\");\nObject.defineProperty(exports, \"aliases\", { enumerable: true, get: function () { return aliases_js_1.aliases; } });\nvar subselects_js_1 = require(\"./subselects.js\");\nfunction compilePseudoSelector(next, selector, options, context, compileToken) {\n var _a;\n var name = selector.name, data = selector.data;\n if (Array.isArray(data)) {\n if (!(name in subselects_js_1.subselects)) {\n throw new Error(\"Unknown pseudo-class :\".concat(name, \"(\").concat(data, \")\"));\n }\n return subselects_js_1.subselects[name](next, data, options, context, compileToken);\n }\n var userPseudo = (_a = options.pseudos) === null || _a === void 0 ? void 0 : _a[name];\n var stringPseudo = typeof userPseudo === \"string\" ? userPseudo : aliases_js_1.aliases[name];\n if (typeof stringPseudo === \"string\") {\n if (data != null) {\n throw new Error(\"Pseudo \".concat(name, \" doesn't have any arguments\"));\n }\n // The alias has to be parsed here, to make sure options are respected.\n var alias = (0, css_what_1.parse)(stringPseudo);\n return subselects_js_1.subselects[\"is\"](next, alias, options, context, compileToken);\n }\n if (typeof userPseudo === \"function\") {\n (0, pseudos_js_1.verifyPseudoArgs)(userPseudo, name, data, 1);\n return function (elem) { return userPseudo(elem, data) && next(elem); };\n }\n if (name in filters_js_1.filters) {\n return filters_js_1.filters[name](next, data, options, context);\n }\n if (name in pseudos_js_1.pseudos) {\n var pseudo_1 = pseudos_js_1.pseudos[name];\n (0, pseudos_js_1.verifyPseudoArgs)(pseudo_1, name, data, 2);\n return function (elem) { return pseudo_1(elem, options, data) && next(elem); };\n }\n throw new Error(\"Unknown pseudo-class :\".concat(name));\n}\nexports.compilePseudoSelector = compilePseudoSelector;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compileGeneralSelector = void 0;\nvar attributes_js_1 = require(\"./attributes.js\");\nvar index_js_1 = require(\"./pseudo-selectors/index.js\");\nvar css_what_1 = require(\"css-what\");\nfunction getElementParent(node, adapter) {\n var parent = adapter.getParent(node);\n if (parent && adapter.isTag(parent)) {\n return parent;\n }\n return null;\n}\n/*\n * All available rules\n */\nfunction compileGeneralSelector(next, selector, options, context, compileToken) {\n var adapter = options.adapter, equals = options.equals;\n switch (selector.type) {\n case css_what_1.SelectorType.PseudoElement: {\n throw new Error(\"Pseudo-elements are not supported by css-select\");\n }\n case css_what_1.SelectorType.ColumnCombinator: {\n throw new Error(\"Column combinators are not yet supported by css-select\");\n }\n case css_what_1.SelectorType.Attribute: {\n if (selector.namespace != null) {\n throw new Error(\"Namespaced attributes are not yet supported by css-select\");\n }\n if (!options.xmlMode || options.lowerCaseAttributeNames) {\n selector.name = selector.name.toLowerCase();\n }\n return attributes_js_1.attributeRules[selector.action](next, selector, options);\n }\n case css_what_1.SelectorType.Pseudo: {\n return (0, index_js_1.compilePseudoSelector)(next, selector, options, context, compileToken);\n }\n // Tags\n case css_what_1.SelectorType.Tag: {\n if (selector.namespace != null) {\n throw new Error(\"Namespaced tag names are not yet supported by css-select\");\n }\n var name_1 = selector.name;\n if (!options.xmlMode || options.lowerCaseTags) {\n name_1 = name_1.toLowerCase();\n }\n return function tag(elem) {\n return adapter.getName(elem) === name_1 && next(elem);\n };\n }\n // Traversal\n case css_what_1.SelectorType.Descendant: {\n if (options.cacheResults === false ||\n typeof WeakSet === \"undefined\") {\n return function descendant(elem) {\n var current = elem;\n while ((current = getElementParent(current, adapter))) {\n if (next(current)) {\n return true;\n }\n }\n return false;\n };\n }\n // @ts-expect-error `ElementNode` is not extending object\n var isFalseCache_1 = new WeakSet();\n return function cachedDescendant(elem) {\n var current = elem;\n while ((current = getElementParent(current, adapter))) {\n if (!isFalseCache_1.has(current)) {\n if (adapter.isTag(current) && next(current)) {\n return true;\n }\n isFalseCache_1.add(current);\n }\n }\n return false;\n };\n }\n case \"_flexibleDescendant\": {\n // Include element itself, only used while querying an array\n return function flexibleDescendant(elem) {\n var current = elem;\n do {\n if (next(current))\n return true;\n } while ((current = getElementParent(current, adapter)));\n return false;\n };\n }\n case css_what_1.SelectorType.Parent: {\n return function parent(elem) {\n return adapter\n .getChildren(elem)\n .some(function (elem) { return adapter.isTag(elem) && next(elem); });\n };\n }\n case css_what_1.SelectorType.Child: {\n return function child(elem) {\n var parent = adapter.getParent(elem);\n return parent != null && adapter.isTag(parent) && next(parent);\n };\n }\n case css_what_1.SelectorType.Sibling: {\n return function sibling(elem) {\n var siblings = adapter.getSiblings(elem);\n for (var i = 0; i < siblings.length; i++) {\n var currentSibling = siblings[i];\n if (equals(elem, currentSibling))\n break;\n if (adapter.isTag(currentSibling) && next(currentSibling)) {\n return true;\n }\n }\n return false;\n };\n }\n case css_what_1.SelectorType.Adjacent: {\n if (adapter.prevElementSibling) {\n return function adjacent(elem) {\n var previous = adapter.prevElementSibling(elem);\n return previous != null && next(previous);\n };\n }\n return function adjacent(elem) {\n var siblings = adapter.getSiblings(elem);\n var lastElement;\n for (var i = 0; i < siblings.length; i++) {\n var currentSibling = siblings[i];\n if (equals(elem, currentSibling))\n break;\n if (adapter.isTag(currentSibling)) {\n lastElement = currentSibling;\n }\n }\n return !!lastElement && next(lastElement);\n };\n }\n case css_what_1.SelectorType.Universal: {\n if (selector.namespace != null && selector.namespace !== \"*\") {\n throw new Error(\"Namespaced universal selectors are not yet supported by css-select\");\n }\n return next;\n }\n }\n}\nexports.compileGeneralSelector = compileGeneralSelector;\n//# sourceMappingURL=general.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compileToken = exports.compileUnsafe = exports.compile = void 0;\nvar css_what_1 = require(\"css-what\");\nvar boolbase_1 = __importDefault(require(\"boolbase\"));\nvar sort_js_1 = __importStar(require(\"./sort.js\"));\nvar general_js_1 = require(\"./general.js\");\nvar subselects_js_1 = require(\"./pseudo-selectors/subselects.js\");\n/**\n * Compiles a selector to an executable function.\n *\n * @param selector Selector to compile.\n * @param options Compilation options.\n * @param context Optional context for the selector.\n */\nfunction compile(selector, options, context) {\n var next = compileUnsafe(selector, options, context);\n return (0, subselects_js_1.ensureIsTag)(next, options.adapter);\n}\nexports.compile = compile;\nfunction compileUnsafe(selector, options, context) {\n var token = typeof selector === \"string\" ? (0, css_what_1.parse)(selector) : selector;\n return compileToken(token, options, context);\n}\nexports.compileUnsafe = compileUnsafe;\nfunction includesScopePseudo(t) {\n return (t.type === css_what_1.SelectorType.Pseudo &&\n (t.name === \"scope\" ||\n (Array.isArray(t.data) &&\n t.data.some(function (data) { return data.some(includesScopePseudo); }))));\n}\nvar DESCENDANT_TOKEN = { type: css_what_1.SelectorType.Descendant };\nvar FLEXIBLE_DESCENDANT_TOKEN = {\n type: \"_flexibleDescendant\",\n};\nvar SCOPE_TOKEN = {\n type: css_what_1.SelectorType.Pseudo,\n name: \"scope\",\n data: null,\n};\n/*\n * CSS 4 Spec (Draft): 3.4.1. Absolutizing a Relative Selector\n * http://www.w3.org/TR/selectors4/#absolutizing\n */\nfunction absolutize(token, _a, context) {\n var adapter = _a.adapter;\n // TODO Use better check if the context is a document\n var hasContext = !!(context === null || context === void 0 ? void 0 : context.every(function (e) {\n var parent = adapter.isTag(e) && adapter.getParent(e);\n return e === subselects_js_1.PLACEHOLDER_ELEMENT || (parent && adapter.isTag(parent));\n }));\n for (var _i = 0, token_1 = token; _i < token_1.length; _i++) {\n var t = token_1[_i];\n if (t.length > 0 &&\n (0, sort_js_1.isTraversal)(t[0]) &&\n t[0].type !== css_what_1.SelectorType.Descendant) {\n // Don't continue in else branch\n }\n else if (hasContext && !t.some(includesScopePseudo)) {\n t.unshift(DESCENDANT_TOKEN);\n }\n else {\n continue;\n }\n t.unshift(SCOPE_TOKEN);\n }\n}\nfunction compileToken(token, options, context) {\n var _a;\n token.forEach(sort_js_1.default);\n context = (_a = options.context) !== null && _a !== void 0 ? _a : context;\n var isArrayContext = Array.isArray(context);\n var finalContext = context && (Array.isArray(context) ? context : [context]);\n // Check if the selector is relative\n if (options.relativeSelector !== false) {\n absolutize(token, options, finalContext);\n }\n else if (token.some(function (t) { return t.length > 0 && (0, sort_js_1.isTraversal)(t[0]); })) {\n throw new Error(\"Relative selectors are not allowed when the `relativeSelector` option is disabled\");\n }\n var shouldTestNextSiblings = false;\n var query = token\n .map(function (rules) {\n if (rules.length >= 2) {\n var first = rules[0], second = rules[1];\n if (first.type !== css_what_1.SelectorType.Pseudo ||\n first.name !== \"scope\") {\n // Ignore\n }\n else if (isArrayContext &&\n second.type === css_what_1.SelectorType.Descendant) {\n rules[1] = FLEXIBLE_DESCENDANT_TOKEN;\n }\n else if (second.type === css_what_1.SelectorType.Adjacent ||\n second.type === css_what_1.SelectorType.Sibling) {\n shouldTestNextSiblings = true;\n }\n }\n return compileRules(rules, options, finalContext);\n })\n .reduce(reduceRules, boolbase_1.default.falseFunc);\n query.shouldTestNextSiblings = shouldTestNextSiblings;\n return query;\n}\nexports.compileToken = compileToken;\nfunction compileRules(rules, options, context) {\n var _a;\n return rules.reduce(function (previous, rule) {\n return previous === boolbase_1.default.falseFunc\n ? boolbase_1.default.falseFunc\n : (0, general_js_1.compileGeneralSelector)(previous, rule, options, context, compileToken);\n }, (_a = options.rootFunc) !== null && _a !== void 0 ? _a : boolbase_1.default.trueFunc);\n}\nfunction reduceRules(a, b) {\n if (b === boolbase_1.default.falseFunc || a === boolbase_1.default.trueFunc) {\n return a;\n }\n if (a === boolbase_1.default.falseFunc || b === boolbase_1.default.trueFunc) {\n return b;\n }\n return function combine(elem) {\n return a(elem) || b(elem);\n };\n}\n//# sourceMappingURL=compile.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aliases = exports.pseudos = exports.filters = exports.is = exports.selectOne = exports.selectAll = exports.prepareContext = exports._compileToken = exports._compileUnsafe = exports.compile = void 0;\nvar DomUtils = __importStar(require(\"domutils\"));\nvar boolbase_1 = __importDefault(require(\"boolbase\"));\nvar compile_js_1 = require(\"./compile.js\");\nvar subselects_js_1 = require(\"./pseudo-selectors/subselects.js\");\nvar defaultEquals = function (a, b) { return a === b; };\nvar defaultOptions = {\n adapter: DomUtils,\n equals: defaultEquals,\n};\nfunction convertOptionFormats(options) {\n var _a, _b, _c, _d;\n /*\n * We force one format of options to the other one.\n */\n // @ts-expect-error Default options may have incompatible `Node` / `ElementNode`.\n var opts = options !== null && options !== void 0 ? options : defaultOptions;\n // @ts-expect-error Same as above.\n (_a = opts.adapter) !== null && _a !== void 0 ? _a : (opts.adapter = DomUtils);\n // @ts-expect-error `equals` does not exist on `Options`\n (_b = opts.equals) !== null && _b !== void 0 ? _b : (opts.equals = (_d = (_c = opts.adapter) === null || _c === void 0 ? void 0 : _c.equals) !== null && _d !== void 0 ? _d : defaultEquals);\n return opts;\n}\nfunction wrapCompile(func) {\n return function addAdapter(selector, options, context) {\n var opts = convertOptionFormats(options);\n return func(selector, opts, context);\n };\n}\n/**\n * Compiles the query, returns a function.\n */\nexports.compile = wrapCompile(compile_js_1.compile);\nexports._compileUnsafe = wrapCompile(compile_js_1.compileUnsafe);\nexports._compileToken = wrapCompile(compile_js_1.compileToken);\nfunction getSelectorFunc(searchFunc) {\n return function select(query, elements, options) {\n var opts = convertOptionFormats(options);\n if (typeof query !== \"function\") {\n query = (0, compile_js_1.compileUnsafe)(query, opts, elements);\n }\n var filteredElements = prepareContext(elements, opts.adapter, query.shouldTestNextSiblings);\n return searchFunc(query, filteredElements, opts);\n };\n}\nfunction prepareContext(elems, adapter, shouldTestNextSiblings) {\n if (shouldTestNextSiblings === void 0) { shouldTestNextSiblings = false; }\n /*\n * Add siblings if the query requires them.\n * See https://github.com/fb55/css-select/pull/43#issuecomment-225414692\n */\n if (shouldTestNextSiblings) {\n elems = appendNextSiblings(elems, adapter);\n }\n return Array.isArray(elems)\n ? adapter.removeSubsets(elems)\n : adapter.getChildren(elems);\n}\nexports.prepareContext = prepareContext;\nfunction appendNextSiblings(elem, adapter) {\n // Order matters because jQuery seems to check the children before the siblings\n var elems = Array.isArray(elem) ? elem.slice(0) : [elem];\n var elemsLength = elems.length;\n for (var i = 0; i < elemsLength; i++) {\n var nextSiblings = (0, subselects_js_1.getNextSiblings)(elems[i], adapter);\n elems.push.apply(elems, nextSiblings);\n }\n return elems;\n}\n/**\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param elems Elements to query. If it is an element, its children will be queried..\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns All matching elements.\n *\n */\nexports.selectAll = getSelectorFunc(function (query, elems, options) {\n return query === boolbase_1.default.falseFunc || !elems || elems.length === 0\n ? []\n : options.adapter.findAll(query, elems);\n});\n/**\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param elems Elements to query. If it is an element, its children will be queried..\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns the first match, or null if there was no match.\n */\nexports.selectOne = getSelectorFunc(function (query, elems, options) {\n return query === boolbase_1.default.falseFunc || !elems || elems.length === 0\n ? null\n : options.adapter.findOne(query, elems);\n});\n/**\n * Tests whether or not an element is matched by query.\n *\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param elem The element to test if it matches the query.\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns\n */\nfunction is(elem, query, options) {\n var opts = convertOptionFormats(options);\n return (typeof query === \"function\" ? query : (0, compile_js_1.compile)(query, opts))(elem);\n}\nexports.is = is;\n/**\n * Alias for selectAll(query, elems, options).\n * @see [compile] for supported selector queries.\n */\nexports.default = exports.selectAll;\n// Export filters, pseudos and aliases to allow users to supply their own.\n/** @deprecated Use the `pseudos` option instead. */\nvar index_js_1 = require(\"./pseudo-selectors/index.js\");\nObject.defineProperty(exports, \"filters\", { enumerable: true, get: function () { return index_js_1.filters; } });\nObject.defineProperty(exports, \"pseudos\", { enumerable: true, get: function () { return index_js_1.pseudos; } });\nObject.defineProperty(exports, \"aliases\", { enumerable: true, get: function () { return index_js_1.aliases; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction arr_back(arr) {\n return arr[arr.length - 1];\n}\nexports.default = arr_back;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst type_1 = __importDefault(require(\"./nodes/type\"));\nfunction isTag(node) {\n return node && node.nodeType === type_1.default.ELEMENT_NODE;\n}\nfunction getAttributeValue(elem, name) {\n return isTag(elem) ? elem.getAttribute(name) : undefined;\n}\nfunction getName(elem) {\n return ((elem && elem.rawTagName) || '').toLowerCase();\n}\nfunction getChildren(node) {\n return node && node.childNodes;\n}\nfunction getParent(node) {\n return node ? node.parentNode : null;\n}\nfunction getText(node) {\n return node.text;\n}\nfunction removeSubsets(nodes) {\n let idx = nodes.length;\n let node;\n let ancestor;\n let replace;\n // Check if each node (or one of its ancestors) is already contained in the\n // array.\n while (--idx > -1) {\n node = ancestor = nodes[idx];\n // Temporarily remove the node under consideration\n nodes[idx] = null;\n replace = true;\n while (ancestor) {\n if (nodes.indexOf(ancestor) > -1) {\n replace = false;\n nodes.splice(idx, 1);\n break;\n }\n ancestor = getParent(ancestor);\n }\n // If the node has been found to be unique, re-insert it.\n if (replace) {\n nodes[idx] = node;\n }\n }\n return nodes;\n}\nfunction existsOne(test, elems) {\n return elems.some((elem) => {\n return isTag(elem) ? test(elem) || existsOne(test, getChildren(elem)) : false;\n });\n}\nfunction getSiblings(node) {\n const parent = getParent(node);\n return parent ? getChildren(parent) : [];\n}\nfunction hasAttrib(elem, name) {\n return getAttributeValue(elem, name) !== undefined;\n}\nfunction findOne(test, elems) {\n let elem = null;\n for (let i = 0, l = elems === null || elems === void 0 ? void 0 : elems.length; i < l && !elem; i++) {\n const el = elems[i];\n if (test(el)) {\n elem = el;\n }\n else {\n const childs = getChildren(el);\n if (childs && childs.length > 0) {\n elem = findOne(test, childs);\n }\n }\n }\n return elem;\n}\nfunction findAll(test, nodes) {\n let result = [];\n for (let i = 0, j = nodes.length; i < j; i++) {\n if (!isTag(nodes[i]))\n continue;\n if (test(nodes[i]))\n result.push(nodes[i]);\n const childs = getChildren(nodes[i]);\n if (childs)\n result = result.concat(findAll(test, childs));\n }\n return result;\n}\nexports.default = {\n isTag,\n getAttributeValue,\n getName,\n getChildren,\n getParent,\n getText,\n removeSubsets,\n existsOne,\n getSiblings,\n hasAttrib,\n findOne,\n findAll\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass VoidTag {\n constructor(addClosingSlash = false, tags) {\n this.addClosingSlash = addClosingSlash;\n if (Array.isArray(tags)) {\n this.voidTags = tags.reduce((set, tag) => {\n return set.add(tag.toLowerCase()).add(tag.toUpperCase()).add(tag);\n }, new Set());\n }\n else {\n this.voidTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'].reduce((set, tag) => {\n return set.add(tag.toLowerCase()).add(tag.toUpperCase()).add(tag);\n }, new Set());\n }\n }\n formatNode(tag, attrs, innerHTML) {\n const addClosingSlash = this.addClosingSlash;\n const closingSpace = (addClosingSlash && attrs && !attrs.endsWith(' ')) ? ' ' : '';\n const closingSlash = addClosingSlash ? `${closingSpace}/` : '';\n return this.isVoidElement(tag.toLowerCase()) ? `<${tag}${attrs}${closingSlash}>` : `<${tag}${attrs}>${innerHTML}</${tag}>`;\n }\n isVoidElement(tag) {\n return this.voidTags.has(tag);\n }\n}\nexports.default = VoidTag;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst he_1 = require(\"he\");\nconst node_1 = __importDefault(require(\"./node\"));\nconst type_1 = __importDefault(require(\"./type\"));\n/**\n * TextNode to contain a text element in DOM tree.\n * @param {string} value [description]\n */\nclass TextNode extends node_1.default {\n clone() {\n return new TextNode(this._rawText, null);\n }\n constructor(rawText, parentNode = null, range) {\n super(parentNode, range);\n /**\n * Node Type declaration.\n * @type {Number}\n */\n this.nodeType = type_1.default.TEXT_NODE;\n this.rawTagName = '';\n this._rawText = rawText;\n }\n get rawText() {\n return this._rawText;\n }\n /**\n * Set rawText and invalidate trimmed caches\n */\n set rawText(text) {\n this._rawText = text;\n this._trimmedRawText = void 0;\n this._trimmedText = void 0;\n }\n /**\n * Returns raw text with all whitespace trimmed except single leading/trailing non-breaking space\n */\n get trimmedRawText() {\n if (this._trimmedRawText !== undefined)\n return this._trimmedRawText;\n this._trimmedRawText = trimText(this.rawText);\n return this._trimmedRawText;\n }\n /**\n * Returns text with all whitespace trimmed except single leading/trailing non-breaking space\n */\n get trimmedText() {\n if (this._trimmedText !== undefined)\n return this._trimmedText;\n this._trimmedText = trimText(this.text);\n return this._trimmedText;\n }\n /**\n * Get unescaped text value of current node and its children.\n * @return {string} text content\n */\n get text() {\n return (0, he_1.decode)(this.rawText);\n }\n /**\n * Detect if the node contains only white space.\n * @return {boolean}\n */\n get isWhitespace() {\n return /^(\\s|&nbsp;)*$/.test(this.rawText);\n }\n toString() {\n return this.rawText;\n }\n}\nexports.default = TextNode;\n/**\n * Trim whitespace except single leading/trailing non-breaking space\n */\nfunction trimText(text) {\n let i = 0;\n let startPos;\n let endPos;\n while (i >= 0 && i < text.length) {\n if (/\\S/.test(text[i])) {\n if (startPos === undefined) {\n startPos = i;\n i = text.length;\n }\n else {\n endPos = i;\n i = void 0;\n }\n }\n if (startPos === undefined)\n i++;\n else\n i--;\n }\n if (startPos === undefined)\n startPos = 0;\n if (endPos === undefined)\n endPos = text.length - 1;\n const hasLeadingSpace = startPos > 0 && /[^\\S\\r\\n]/.test(text[startPos - 1]);\n const hasTrailingSpace = endPos < (text.length - 1) && /[^\\S\\r\\n]/.test(text[endPos + 1]);\n return (hasLeadingSpace ? ' ' : '') + text.slice(startPos, endPos + 1) + (hasTrailingSpace ? ' ' : '');\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = exports.base_parse = void 0;\nconst css_select_1 = require(\"css-select\");\nconst he_1 = __importDefault(require(\"he\"));\nconst back_1 = __importDefault(require(\"../back\"));\nconst matcher_1 = __importDefault(require(\"../matcher\"));\nconst void_tag_1 = __importDefault(require(\"../void-tag\"));\nconst comment_1 = __importDefault(require(\"./comment\"));\nconst node_1 = __importDefault(require(\"./node\"));\nconst text_1 = __importDefault(require(\"./text\"));\nconst type_1 = __importDefault(require(\"./type\"));\nfunction decode(val) {\n // clone string\n return JSON.parse(JSON.stringify(he_1.default.decode(val)));\n}\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements\nconst Htags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup'];\nconst Dtags = ['details', 'dialog', 'dd', 'div', 'dt'];\nconst Ftags = ['fieldset', 'figcaption', 'figure', 'footer', 'form'];\nconst tableTags = ['table', 'td', 'tr'];\nconst htmlTags = ['address', 'article', 'aside', 'blockquote', 'br', 'hr', 'li', 'main', 'nav', 'ol', 'p', 'pre', 'section', 'ul'];\nconst kBlockElements = new Set();\nfunction addToKBlockElement(...args) {\n const addToSet = (array) => {\n for (let index = 0; index < array.length; index++) {\n const element = array[index];\n kBlockElements.add(element);\n kBlockElements.add(element.toUpperCase());\n }\n };\n for (const arg of args)\n addToSet(arg);\n}\naddToKBlockElement(Htags, Dtags, Ftags, tableTags, htmlTags);\nclass DOMTokenList {\n _validate(c) {\n if (/\\s/.test(c)) {\n throw new Error(`DOMException in DOMTokenList.add: The token '${c}' contains HTML space characters, which are not valid in tokens.`);\n }\n }\n constructor(valuesInit = [], afterUpdate = () => null) {\n this._set = new Set(valuesInit);\n this._afterUpdate = afterUpdate;\n }\n add(c) {\n this._validate(c);\n this._set.add(c);\n this._afterUpdate(this); // eslint-disable-line @typescript-eslint/no-unsafe-call\n }\n replace(c1, c2) {\n this._validate(c2);\n this._set.delete(c1);\n this._set.add(c2);\n this._afterUpdate(this); // eslint-disable-line @typescript-eslint/no-unsafe-call\n }\n remove(c) {\n this._set.delete(c) && this._afterUpdate(this); // eslint-disable-line @typescript-eslint/no-unsafe-call\n }\n toggle(c) {\n this._validate(c);\n if (this._set.has(c))\n this._set.delete(c);\n else\n this._set.add(c);\n this._afterUpdate(this); // eslint-disable-line @typescript-eslint/no-unsafe-call\n }\n contains(c) {\n return this._set.has(c);\n }\n get length() {\n return this._set.size;\n }\n values() {\n return this._set.values();\n }\n get value() {\n return Array.from(this._set.values());\n }\n toString() {\n return Array.from(this._set.values()).join(' ');\n }\n}\n/**\n * HTMLElement, which contains a set of children.\n *\n * Note: this is a minimalist implementation, no complete tree\n * structure provided (no parentNode, nextSibling,\n * previousSibling etc).\n * @class HTMLElement\n * @extends {Node}\n */\nclass HTMLElement extends node_1.default {\n /**\n * Quote attribute values\n * @param attr attribute value\n * @returns {string} quoted value\n */\n quoteAttribute(attr) {\n if (attr == null) {\n return 'null';\n }\n return JSON.stringify(attr.replace(/\"/g, '&quot;'))\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\/g, '');\n }\n /**\n * Creates an instance of HTMLElement.\n * @param keyAttrs\tid and class attribute\n * @param [rawAttrs]\tattributes in string\n *\n * @memberof HTMLElement\n */\n constructor(tagName, keyAttrs, rawAttrs = '', parentNode = null, range, voidTag = new void_tag_1.default(), _parseOptions = {}) {\n super(parentNode, range);\n this.rawAttrs = rawAttrs;\n this.voidTag = voidTag;\n /**\n * Node Type declaration.\n */\n this.nodeType = type_1.default.ELEMENT_NODE;\n this.rawTagName = tagName;\n this.rawAttrs = rawAttrs || '';\n this._id = keyAttrs.id || '';\n this.childNodes = [];\n this._parseOptions = _parseOptions;\n this.classList = new DOMTokenList(keyAttrs.class ? keyAttrs.class.split(/\\s+/) : [], (classList) => this.setAttribute('class', classList.toString()) // eslint-disable-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n );\n if (keyAttrs.id) {\n if (!rawAttrs) {\n this.rawAttrs = `id=\"${keyAttrs.id}\"`;\n }\n }\n if (keyAttrs.class) {\n if (!rawAttrs) {\n const cls = `class=\"${this.classList.toString()}\"`;\n if (this.rawAttrs) {\n this.rawAttrs += ` ${cls}`;\n }\n else {\n this.rawAttrs = cls;\n }\n }\n }\n }\n /**\n * Remove Child element from childNodes array\n * @param {HTMLElement} node node to remove\n */\n removeChild(node) {\n this.childNodes = this.childNodes.filter((child) => {\n return child !== node;\n });\n return this;\n }\n /**\n * Exchanges given child with new child\n * @param {HTMLElement} oldNode node to exchange\n * @param {HTMLElement} newNode new node\n */\n exchangeChild(oldNode, newNode) {\n const children = this.childNodes;\n this.childNodes = children.map((child) => {\n if (child === oldNode) {\n return newNode;\n }\n return child;\n });\n return this;\n }\n get tagName() {\n return this.rawTagName ? this.rawTagName.toUpperCase() : this.rawTagName;\n }\n set tagName(newname) {\n this.rawTagName = newname.toLowerCase();\n }\n get localName() {\n return this.rawTagName.toLowerCase();\n }\n get isVoidElement() {\n return this.voidTag.isVoidElement(this.localName);\n }\n get id() {\n return this._id;\n }\n set id(newid) {\n this.setAttribute('id', newid);\n }\n /**\n * Get escpaed (as-it) text value of current node and its children.\n * @return {string} text content\n */\n get rawText() {\n // https://github.com/taoqf/node-html-parser/issues/249\n if (/^br$/i.test(this.rawTagName)) {\n return '\\n';\n }\n return this.childNodes.reduce((pre, cur) => {\n return (pre += cur.rawText);\n }, '');\n }\n get textContent() {\n return decode(this.rawText);\n }\n set textContent(val) {\n const content = [new text_1.default(val, this)];\n this.childNodes = content;\n }\n /**\n * Get unescaped text value of current node and its children.\n * @return {string} text content\n */\n get text() {\n return decode(this.rawText);\n }\n /**\n * Get structured Text (with '\\n' etc.)\n * @return {string} structured text\n */\n get structuredText() {\n let currentBlock = [];\n const blocks = [currentBlock];\n function dfs(node) {\n if (node.nodeType === type_1.default.ELEMENT_NODE) {\n if (kBlockElements.has(node.rawTagName)) {\n if (currentBlock.length > 0) {\n blocks.push((currentBlock = []));\n }\n node.childNodes.forEach(dfs);\n if (currentBlock.length > 0) {\n blocks.push((currentBlock = []));\n }\n }\n else {\n node.childNodes.forEach(dfs);\n }\n }\n else if (node.nodeType === type_1.default.TEXT_NODE) {\n if (node.isWhitespace) {\n // Whitespace node, postponed output\n currentBlock.prependWhitespace = true;\n }\n else {\n let text = node.trimmedText;\n if (currentBlock.prependWhitespace) {\n text = ` ${text}`;\n currentBlock.prependWhitespace = false;\n }\n currentBlock.push(text);\n }\n }\n }\n dfs(this);\n return blocks\n .map((block) => {\n return block.join('').replace(/\\s{2,}/g, ' '); // Normalize each line's whitespace\n })\n .join('\\n')\n .replace(/\\s+$/, ''); // trimRight;\n }\n toString() {\n const tag = this.rawTagName;\n if (tag) {\n const attrs = this.rawAttrs ? ` ${this.rawAttrs}` : '';\n return this.voidTag.formatNode(tag, attrs, this.innerHTML);\n }\n return this.innerHTML;\n }\n get innerHTML() {\n return this.childNodes\n .map((child) => {\n return child.toString();\n })\n .join('');\n }\n set innerHTML(content) {\n const r = parse(content, this._parseOptions);\n const nodes = r.childNodes.length ? r.childNodes : [new text_1.default(content, this)];\n resetParent(nodes, this);\n resetParent(this.childNodes, null);\n this.childNodes = nodes;\n }\n set_content(content, options = {}) {\n if (content instanceof node_1.default) {\n content = [content];\n }\n else if (typeof content == 'string') {\n options = Object.assign(Object.assign({}, this._parseOptions), options);\n const r = parse(content, options);\n content = r.childNodes.length ? r.childNodes : [new text_1.default(r.innerHTML, this)];\n }\n resetParent(this.childNodes, null);\n resetParent(content, this);\n this.childNodes = content;\n return this;\n }\n replaceWith(...nodes) {\n const parent = this.parentNode;\n const content = nodes\n .map((node) => {\n if (node instanceof node_1.default) {\n return [node];\n }\n else if (typeof node == 'string') {\n const r = parse(node, this._parseOptions);\n return r.childNodes.length ? r.childNodes : [new text_1.default(node, this)];\n }\n return [];\n })\n .flat();\n const idx = parent.childNodes.findIndex((child) => {\n return child === this;\n });\n resetParent([this], null);\n parent.childNodes = [...parent.childNodes.slice(0, idx), ...resetParent(content, parent), ...parent.childNodes.slice(idx + 1)];\n return this;\n }\n get outerHTML() {\n return this.toString();\n }\n /**\n * Trim element from right (in block) after seeing pattern in a TextNode.\n * @param {RegExp} pattern pattern to find\n * @return {HTMLElement} reference to current node\n */\n trimRight(pattern) {\n for (let i = 0; i < this.childNodes.length; i++) {\n const childNode = this.childNodes[i];\n if (childNode.nodeType === type_1.default.ELEMENT_NODE) {\n childNode.trimRight(pattern);\n }\n else {\n const index = childNode.rawText.search(pattern);\n if (index > -1) {\n childNode.rawText = childNode.rawText.substr(0, index);\n // trim all following nodes.\n this.childNodes.length = i + 1;\n }\n }\n }\n return this;\n }\n /**\n * Get DOM structure\n * @return {string} structure\n */\n get structure() {\n const res = [];\n let indention = 0;\n function write(str) {\n res.push(' '.repeat(indention) + str);\n }\n function dfs(node) {\n const idStr = node._id ? `#${node._id}` : '';\n const classStr = node.classList.length ? `.${node.classList.value.join('.')}` : ''; // eslint-disable-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-call\n write(`${node.rawTagName}${idStr}${classStr}`);\n indention++;\n node.childNodes.forEach((childNode) => {\n if (childNode.nodeType === type_1.default.ELEMENT_NODE) {\n dfs(childNode);\n }\n else if (childNode.nodeType === type_1.default.TEXT_NODE) {\n if (!childNode.isWhitespace) {\n write('#text');\n }\n }\n });\n indention--;\n }\n dfs(this);\n return res.join('\\n');\n }\n /**\n * Remove whitespaces in this sub tree.\n * @return {HTMLElement} pointer to this\n */\n removeWhitespace() {\n let o = 0;\n this.childNodes.forEach((node) => {\n if (node.nodeType === type_1.default.TEXT_NODE) {\n if (node.isWhitespace) {\n return;\n }\n node.rawText = node.trimmedRawText;\n }\n else if (node.nodeType === type_1.default.ELEMENT_NODE) {\n node.removeWhitespace();\n }\n this.childNodes[o++] = node;\n });\n this.childNodes.length = o;\n // remove whitespace between attributes\n const attrs = Object.keys(this.rawAttributes)\n .map((key) => {\n const val = this.rawAttributes[key];\n return `${key}=${JSON.stringify(val)}`;\n })\n .join(' ');\n this.rawAttrs = attrs;\n delete this._rawAttrs;\n return this;\n }\n /**\n * Query CSS selector to find matching nodes.\n * @param {string} selector Simplified CSS selector\n * @return {HTMLElement[]} matching elements\n */\n querySelectorAll(selector) {\n return (0, css_select_1.selectAll)(selector, this, {\n xmlMode: true,\n adapter: matcher_1.default,\n });\n }\n /**\n * Query CSS Selector to find matching node.\n * @param {string} selector Simplified CSS selector\n * @return {(HTMLElement|null)} matching node\n */\n querySelector(selector) {\n return (0, css_select_1.selectOne)(selector, this, {\n xmlMode: true,\n adapter: matcher_1.default,\n });\n }\n /**\n * find elements by their tagName\n * @param {string} tagName the tagName of the elements to select\n */\n getElementsByTagName(tagName) {\n const upperCasedTagName = tagName.toUpperCase();\n const re = [];\n const stack = [];\n let currentNodeReference = this;\n let index = 0;\n // index turns to undefined once the stack is empty and the first condition occurs\n // which happens once all relevant children are searched through\n while (index !== undefined) {\n let child;\n // make it work with sparse arrays\n do {\n child = currentNodeReference.childNodes[index++];\n } while (index < currentNodeReference.childNodes.length && child === undefined);\n // if the child does not exist we move on with the last provided index (which belongs to the parentNode)\n if (child === undefined) {\n currentNodeReference = currentNodeReference.parentNode;\n index = stack.pop();\n continue;\n }\n if (child.nodeType === type_1.default.ELEMENT_NODE) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName#syntax\n if (tagName === '*' || child.tagName === upperCasedTagName)\n re.push(child);\n // if children are existing push the current status to the stack and keep searching for elements in the level below\n if (child.childNodes.length > 0) {\n stack.push(index);\n currentNodeReference = child;\n index = 0;\n }\n }\n }\n return re;\n }\n /**\n * find element by it's id\n * @param {string} id the id of the element to select\n * @returns {HTMLElement | null} the element with the given id or null if not found\n */\n getElementById(id) {\n const stack = [];\n let currentNodeReference = this;\n let index = 0;\n // index turns to undefined once the stack is empty and the first condition occurs\n // which happens once all relevant children are searched through\n while (index !== undefined) {\n let child;\n // make it work with sparse arrays\n do {\n child = currentNodeReference.childNodes[index++];\n } while (index < currentNodeReference.childNodes.length && child === undefined);\n // if the child does not exist we move on with the last provided index (which belongs to the parentNode)\n if (child === undefined) {\n currentNodeReference = currentNodeReference.parentNode;\n index = stack.pop();\n continue;\n }\n if (child.nodeType === type_1.default.ELEMENT_NODE) {\n if (child._id === id) {\n return child;\n }\n // if children are existing push the current status to the stack and keep searching for elements in the level below\n if (child.childNodes.length > 0) {\n stack.push(index);\n currentNodeReference = child;\n index = 0;\n }\n }\n }\n return null;\n }\n /**\n * traverses the Element and its parents (heading toward the document root) until it finds a node that matches the provided selector string. Will return itself or the matching ancestor. If no such element exists, it returns null.\n * @param selector a DOMString containing a selector list\n * @returns {HTMLElement | null} the element with the given id or null if not found\n */\n closest(selector) {\n const mapChild = new Map();\n let el = this;\n let old = null;\n function findOne(test, elems) {\n let elem = null;\n for (let i = 0, l = elems.length; i < l && !elem; i++) {\n const el = elems[i];\n if (test(el)) {\n elem = el;\n }\n else {\n const child = mapChild.get(el);\n if (child) {\n elem = findOne(test, [child]);\n }\n }\n }\n return elem;\n }\n while (el) {\n mapChild.set(el, old);\n old = el;\n el = el.parentNode;\n }\n el = this;\n while (el) {\n const e = (0, css_select_1.selectOne)(selector, el, {\n xmlMode: true,\n adapter: Object.assign(Object.assign({}, matcher_1.default), { getChildren(node) {\n const child = mapChild.get(node);\n return child && [child];\n },\n getSiblings(node) {\n return [node];\n },\n findOne,\n findAll() {\n return [];\n } }),\n });\n if (e) {\n return e;\n }\n el = el.parentNode;\n }\n return null;\n }\n /**\n * Append a child node to childNodes\n * @param {Node} node node to append\n * @return {Node} node appended\n */\n appendChild(node) {\n this.append(node);\n return node;\n }\n /**\n * Get attributes\n * @access private\n * @return {Object} parsed and unescaped attributes\n */\n get attrs() {\n if (this._attrs) {\n return this._attrs;\n }\n this._attrs = {};\n const attrs = this.rawAttributes;\n for (const key in attrs) {\n const val = attrs[key] || '';\n this._attrs[key.toLowerCase()] = decode(val);\n }\n return this._attrs;\n }\n get attributes() {\n const ret_attrs = {};\n const attrs = this.rawAttributes;\n for (const key in attrs) {\n const val = attrs[key] || '';\n ret_attrs[key] = decode(val);\n }\n return ret_attrs;\n }\n /**\n * Get escaped (as-is) attributes\n * @return {Object} parsed attributes\n */\n get rawAttributes() {\n if (this._rawAttrs) {\n return this._rawAttrs;\n }\n const attrs = {};\n if (this.rawAttrs) {\n const re = /([a-zA-Z()[\\]#@$.?:][a-zA-Z0-9-._:()[\\]#]*)(?:\\s*=\\s*((?:'[^']*')|(?:\"[^\"]*\")|\\S+))?/g;\n let match;\n while ((match = re.exec(this.rawAttrs))) {\n const key = match[1];\n let val = match[2] || null;\n if (val && (val[0] === `'` || val[0] === `\"`))\n val = val.slice(1, val.length - 1);\n attrs[key] = attrs[key] || val;\n }\n }\n this._rawAttrs = attrs;\n return attrs;\n }\n removeAttribute(key) {\n const attrs = this.rawAttributes;\n delete attrs[key];\n // Update this.attribute\n if (this._attrs) {\n delete this._attrs[key];\n }\n // Update rawString\n this.rawAttrs = Object.keys(attrs)\n .map((name) => {\n const val = this.quoteAttribute(attrs[name]);\n if (val === 'null' || val === '\"\"')\n return name;\n return `${name}=${val}`;\n })\n .join(' ');\n // Update this._id\n if (key === 'id') {\n this._id = '';\n }\n return this;\n }\n hasAttribute(key) {\n return key.toLowerCase() in this.attrs;\n }\n /**\n * Get an attribute\n * @return {string | undefined} value of the attribute; or undefined if not exist\n */\n getAttribute(key) {\n return this.attrs[key.toLowerCase()];\n }\n /**\n * Set an attribute value to the HTMLElement\n * @param {string} key The attribute name\n * @param {string} value The value to set, or null / undefined to remove an attribute\n */\n setAttribute(key, value) {\n if (arguments.length < 2) {\n throw new Error(\"Failed to execute 'setAttribute' on 'Element'\");\n }\n const k2 = key.toLowerCase();\n const attrs = this.rawAttributes;\n for (const k in attrs) {\n if (k.toLowerCase() === k2) {\n key = k;\n break;\n }\n }\n attrs[key] = String(value);\n // update this.attrs\n if (this._attrs) {\n this._attrs[k2] = decode(attrs[key]);\n }\n // Update rawString\n this.rawAttrs = Object.keys(attrs)\n .map((name) => {\n const val = this.quoteAttribute(attrs[name]);\n if (val === 'null' || val === '\"\"')\n return name;\n return `${name}=${val}`;\n })\n .join(' ');\n // Update this._id\n if (key === 'id') {\n this._id = value;\n }\n return this;\n }\n /**\n * Replace all the attributes of the HTMLElement by the provided attributes\n * @param {Attributes} attributes the new attribute set\n */\n setAttributes(attributes) {\n // Invalidate current this.attributes\n if (this._attrs) {\n delete this._attrs;\n }\n // Invalidate current this.rawAttributes\n if (this._rawAttrs) {\n delete this._rawAttrs;\n }\n // Update rawString\n this.rawAttrs = Object.keys(attributes)\n .map((name) => {\n const val = attributes[name];\n if (val === 'null' || val === '\"\"')\n return name;\n return `${name}=${this.quoteAttribute(String(val))}`;\n })\n .join(' ');\n // Update this._id\n if ('id' in attributes) {\n this._id = attributes['id'];\n }\n return this;\n }\n insertAdjacentHTML(where, html) {\n if (arguments.length < 2) {\n throw new Error('2 arguments required');\n }\n const p = parse(html, this._parseOptions);\n if (where === 'afterend') {\n this.after(...p.childNodes);\n }\n else if (where === 'afterbegin') {\n this.prepend(...p.childNodes);\n }\n else if (where === 'beforeend') {\n this.append(...p.childNodes);\n }\n else if (where === 'beforebegin') {\n this.before(...p.childNodes);\n }\n else {\n throw new Error(`The value provided ('${where}') is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'`);\n }\n return this;\n }\n /** Prepend nodes or strings to this node's children. */\n prepend(...insertable) {\n const nodes = resolveInsertable(insertable);\n resetParent(nodes, this);\n this.childNodes.unshift(...nodes);\n }\n /** Append nodes or strings to this node's children. */\n append(...insertable) {\n const nodes = resolveInsertable(insertable);\n resetParent(nodes, this);\n this.childNodes.push(...nodes);\n }\n /** Insert nodes or strings before this node. */\n before(...insertable) {\n const nodes = resolveInsertable(insertable);\n const siblings = this.parentNode.childNodes;\n resetParent(nodes, this.parentNode);\n siblings.splice(siblings.indexOf(this), 0, ...nodes);\n }\n /** Insert nodes or strings after this node. */\n after(...insertable) {\n const nodes = resolveInsertable(insertable);\n const siblings = this.parentNode.childNodes;\n resetParent(nodes, this.parentNode);\n siblings.splice(siblings.indexOf(this) + 1, 0, ...nodes);\n }\n get nextSibling() {\n if (this.parentNode) {\n const children = this.parentNode.childNodes;\n let i = 0;\n while (i < children.length) {\n const child = children[i++];\n if (this === child)\n return children[i] || null;\n }\n return null;\n }\n }\n get nextElementSibling() {\n if (this.parentNode) {\n const children = this.parentNode.childNodes;\n let i = 0;\n let find = false;\n while (i < children.length) {\n const child = children[i++];\n if (find) {\n if (child instanceof HTMLElement) {\n return child || null;\n }\n }\n else if (this === child) {\n find = true;\n }\n }\n return null;\n }\n }\n get previousSibling() {\n if (this.parentNode) {\n const children = this.parentNode.childNodes;\n let i = children.length;\n while (i > 0) {\n const child = children[--i];\n if (this === child)\n return children[i - 1] || null;\n }\n return null;\n }\n }\n get previousElementSibling() {\n if (this.parentNode) {\n const children = this.parentNode.childNodes;\n let i = children.length;\n let find = false;\n while (i > 0) {\n const child = children[--i];\n if (find) {\n if (child instanceof HTMLElement) {\n return child || null;\n }\n }\n else if (this === child) {\n find = true;\n }\n }\n return null;\n }\n }\n /** Get all childNodes of type {@link HTMLElement}. */\n get children() {\n const children = [];\n for (const childNode of this.childNodes) {\n if (childNode instanceof HTMLElement) {\n children.push(childNode);\n }\n }\n return children;\n }\n /**\n * Get the first child node.\n * @return The first child or undefined if none exists.\n */\n get firstChild() {\n return this.childNodes[0];\n }\n /**\n * Get the first child node of type {@link HTMLElement}.\n * @return The first child element or undefined if none exists.\n */\n get firstElementChild() {\n return this.children[0];\n }\n /**\n * Get the last child node.\n * @return The last child or undefined if none exists.\n */\n get lastChild() {\n return (0, back_1.default)(this.childNodes);\n }\n /**\n * Get the last child node of type {@link HTMLElement}.\n * @return The last child element or undefined if none exists.\n */\n get lastElementChild() {\n return this.children[this.children.length - 1];\n }\n get childElementCount() {\n return this.children.length;\n }\n get classNames() {\n return this.classList.toString();\n }\n /** Clone this Node */\n clone() {\n return parse(this.toString(), this._parseOptions).firstChild;\n }\n}\nexports.default = HTMLElement;\n// #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\nconst kMarkupPattern = /<!--[\\s\\S]*?-->|<(\\/?)([a-zA-Z][-.:0-9_a-zA-Z@\\xB7\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u03A1\\u03A3-\\u03D9\\u03DB-\\u03EF\\u03F7-\\u03FF\\u0400-\\u04FF\\u0500-\\u052F\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E00-\\u1E9B\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2126\\u212A-\\u212B\\u2132\\u214E\\u2160-\\u2188\\u2C60-\\u2C7F\\uA722-\\uA787\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA7FF\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64-\\uAB65\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\x37F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*)((?:\\s+[^>]*?(?:(?:'[^']*')|(?:\"[^\"]*\"))?)*)\\s*(\\/?)>/gu;\n// const kMarkupPattern = /<!--[\\s\\S]*?-->|<(\\/?)([a-zA-Z][-.:0-9_a-zA-Z]*)((?:\\s+[^>]*?(?:(?:'[^']*')|(?:\"[^\"]*\"))?)*)\\s*(\\/?)>/g;\nconst kAttributePattern = /(?:^|\\s)(id|class)\\s*=\\s*((?:'[^']*')|(?:\"[^\"]*\")|\\S+)/gi;\nconst kElementsClosedByOpening = {\n li: { li: true, LI: true },\n LI: { li: true, LI: true },\n p: { p: true, div: true, P: true, DIV: true },\n P: { p: true, div: true, P: true, DIV: true },\n b: { div: true, DIV: true },\n B: { div: true, DIV: true },\n td: { td: true, th: true, TD: true, TH: true },\n TD: { td: true, th: true, TD: true, TH: true },\n th: { td: true, th: true, TD: true, TH: true },\n TH: { td: true, th: true, TD: true, TH: true },\n h1: { h1: true, H1: true },\n H1: { h1: true, H1: true },\n h2: { h2: true, H2: true },\n H2: { h2: true, H2: true },\n h3: { h3: true, H3: true },\n H3: { h3: true, H3: true },\n h4: { h4: true, H4: true },\n H4: { h4: true, H4: true },\n h5: { h5: true, H5: true },\n H5: { h5: true, H5: true },\n h6: { h6: true, H6: true },\n H6: { h6: true, H6: true },\n};\nconst kElementsClosedByClosing = {\n li: { ul: true, ol: true, UL: true, OL: true },\n LI: { ul: true, ol: true, UL: true, OL: true },\n a: { div: true, DIV: true },\n A: { div: true, DIV: true },\n b: { div: true, DIV: true },\n B: { div: true, DIV: true },\n i: { div: true, DIV: true },\n I: { div: true, DIV: true },\n p: { div: true, DIV: true },\n P: { div: true, DIV: true },\n td: { tr: true, table: true, TR: true, TABLE: true },\n TD: { tr: true, table: true, TR: true, TABLE: true },\n th: { tr: true, table: true, TR: true, TABLE: true },\n TH: { tr: true, table: true, TR: true, TABLE: true },\n};\nconst kElementsClosedByClosingExcept = {\n p: { a: true, audio: true, del: true, ins: true, map: true, noscript: true, video: true },\n};\nconst frameflag = 'documentfragmentcontainer';\n/**\n * Parses HTML and returns a root element\n * Parse a chuck of HTML source.\n * @param {string} data html\n * @return {HTMLElement} root element\n */\nfunction base_parse(data, options = {}) {\n var _a, _b;\n const voidTag = new void_tag_1.default((_a = options === null || options === void 0 ? void 0 : options.voidTag) === null || _a === void 0 ? void 0 : _a.closingSlash, (_b = options === null || options === void 0 ? void 0 : options.voidTag) === null || _b === void 0 ? void 0 : _b.tags);\n const elements = options.blockTextElements || {\n script: true,\n noscript: true,\n style: true,\n pre: true,\n };\n const element_names = Object.keys(elements);\n const kBlockTextElements = element_names.map((it) => new RegExp(`^${it}$`, 'i'));\n const kIgnoreElements = element_names.filter((it) => Boolean(elements[it])).map((it) => new RegExp(`^${it}$`, 'i'));\n function element_should_be_ignore(tag) {\n return kIgnoreElements.some((it) => it.test(tag));\n }\n function is_block_text_element(tag) {\n return kBlockTextElements.some((it) => it.test(tag));\n }\n const createRange = (startPos, endPos) => [startPos - frameFlagOffset, endPos - frameFlagOffset];\n const root = new HTMLElement(null, {}, '', null, [0, data.length], voidTag, options);\n let currentParent = root;\n const stack = [root];\n let lastTextPos = -1;\n let noNestedTagIndex = undefined;\n let match;\n // https://github.com/taoqf/node-html-parser/issues/38\n data = `<${frameflag}>${data}</${frameflag}>`;\n const { lowerCaseTagName, fixNestedATags } = options;\n const dataEndPos = data.length - (frameflag.length + 2);\n const frameFlagOffset = frameflag.length + 2;\n while ((match = kMarkupPattern.exec(data))) {\n // Note: Object destructuring here consistently tests as higher performance than array destructuring\n // eslint-disable-next-line prefer-const\n let { 0: matchText, 1: leadingSlash, 2: tagName, 3: attributes, 4: closingSlash } = match;\n const matchLength = matchText.length;\n const tagStartPos = kMarkupPattern.lastIndex - matchLength;\n const tagEndPos = kMarkupPattern.lastIndex;\n // Add TextNode if content\n if (lastTextPos > -1) {\n if (lastTextPos + matchLength < tagEndPos) {\n const text = data.substring(lastTextPos, tagStartPos);\n currentParent.appendChild(new text_1.default(text, currentParent, createRange(lastTextPos, tagStartPos)));\n }\n }\n lastTextPos = kMarkupPattern.lastIndex;\n // https://github.com/taoqf/node-html-parser/issues/38\n // Skip frameflag node\n if (tagName === frameflag)\n continue;\n // Handle comments\n if (matchText[1] === '!') {\n if (options.comment) {\n // Only keep what is in between <!-- and -->\n const text = data.substring(tagStartPos + 4, tagEndPos - 3);\n currentParent.appendChild(new comment_1.default(text, currentParent, createRange(tagStartPos, tagEndPos)));\n }\n continue;\n }\n /* -- Handle tag matching -- */\n // Fix tag casing if necessary\n if (lowerCaseTagName)\n tagName = tagName.toLowerCase();\n // Handle opening tags (ie. <this> not </that>)\n if (!leadingSlash) {\n /* Populate attributes */\n const attrs = {};\n for (let attMatch; (attMatch = kAttributePattern.exec(attributes));) {\n const { 1: key, 2: val } = attMatch;\n const isQuoted = val[0] === `'` || val[0] === `\"`;\n attrs[key.toLowerCase()] = isQuoted ? val.slice(1, val.length - 1) : val;\n }\n const parentTagName = currentParent.rawTagName;\n if (!closingSlash && kElementsClosedByOpening[parentTagName]) {\n if (kElementsClosedByOpening[parentTagName][tagName]) {\n stack.pop();\n currentParent = (0, back_1.default)(stack);\n }\n }\n // Prevent nested A tags by terminating the last A and starting a new one : see issue #144\n if (fixNestedATags && (tagName === 'a' || tagName === 'A')) {\n if (noNestedTagIndex !== undefined) {\n stack.splice(noNestedTagIndex);\n currentParent = (0, back_1.default)(stack);\n }\n noNestedTagIndex = stack.length;\n }\n const tagEndPos = kMarkupPattern.lastIndex;\n const tagStartPos = tagEndPos - matchLength;\n currentParent = currentParent.appendChild(\n // Initialize range (end position updated later for closed tags)\n new HTMLElement(tagName, attrs, attributes.slice(1), null, createRange(tagStartPos, tagEndPos), voidTag, options));\n stack.push(currentParent);\n if (is_block_text_element(tagName)) {\n // Find closing tag\n const closeMarkup = `</${tagName}>`;\n const closeIndex = lowerCaseTagName\n ? data.toLocaleLowerCase().indexOf(closeMarkup, kMarkupPattern.lastIndex)\n : data.indexOf(closeMarkup, kMarkupPattern.lastIndex);\n const textEndPos = closeIndex === -1 ? dataEndPos : closeIndex;\n if (element_should_be_ignore(tagName)) {\n const text = data.substring(tagEndPos, textEndPos);\n if (text.length > 0 && /\\S/.test(text)) {\n currentParent.appendChild(new text_1.default(text, currentParent, createRange(tagEndPos, textEndPos)));\n }\n }\n if (closeIndex === -1) {\n lastTextPos = kMarkupPattern.lastIndex = data.length + 1;\n }\n else {\n lastTextPos = kMarkupPattern.lastIndex = closeIndex + closeMarkup.length;\n // Cause to be treated as self-closing, because no close found\n leadingSlash = '/';\n }\n }\n }\n // Handle closing tags or self-closed elements (ie </tag> or <br>)\n if (leadingSlash || closingSlash || voidTag.isVoidElement(tagName)) {\n while (true) {\n if (noNestedTagIndex != null && (tagName === 'a' || tagName === 'A'))\n noNestedTagIndex = undefined;\n if (currentParent.rawTagName === tagName) {\n // Update range end for closed tag\n currentParent.range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1];\n stack.pop();\n currentParent = (0, back_1.default)(stack);\n break;\n }\n else {\n const parentTagName = currentParent.tagName;\n // Trying to close current tag, and move on\n if (kElementsClosedByClosing[parentTagName]) {\n if (kElementsClosedByClosing[parentTagName][tagName]) {\n stack.pop();\n currentParent = (0, back_1.default)(stack);\n continue;\n }\n }\n const openTag = currentParent.rawTagName ?\n currentParent.rawTagName.toLowerCase() :\n '';\n if (kElementsClosedByClosingExcept[openTag]) {\n const closingTag = tagName.toLowerCase();\n if (stack.length > 1) {\n const possibleContainer = stack[stack.length - 2];\n if (possibleContainer &&\n possibleContainer.rawTagName &&\n possibleContainer.rawTagName.toLowerCase() === closingTag &&\n !kElementsClosedByClosingExcept[openTag][closingTag]) {\n // Update range end for closed tag\n currentParent.range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1];\n stack.pop();\n currentParent = (0, back_1.default)(stack);\n continue;\n }\n }\n }\n // Use aggressive strategy to handle unmatching markups.\n break;\n }\n }\n }\n }\n return stack;\n}\nexports.base_parse = base_parse;\n/**\n * Parses HTML and returns a root element\n * Parse a chuck of HTML source.\n */\nfunction parse(data, options = {}) {\n const stack = base_parse(data, options);\n const [root] = stack;\n while (stack.length > 1) {\n // Handle each error elements.\n const last = stack.pop();\n const oneBefore = (0, back_1.default)(stack);\n if (last.parentNode && last.parentNode.parentNode) {\n if (last.parentNode === oneBefore && last.tagName === oneBefore.tagName) {\n // Pair error case <h3> <h3> handle : Fixes to <h3> </h3>\n // this is wrong, becouse this will put the H3 outside the current right position which should be inside the current Html Element, see issue 152 for more info\n if (options.parseNoneClosedTags !== true) {\n oneBefore.removeChild(last);\n last.childNodes.forEach((child) => {\n oneBefore.parentNode.appendChild(child);\n });\n stack.pop();\n }\n }\n else {\n // Single error <div> <h3> </div> handle: Just removes <h3>\n // Why remove? this is already a HtmlElement and the missing <H3> is already added in this case. see issue 152 for more info\n // eslint-disable-next-line no-lonely-if\n if (options.parseNoneClosedTags !== true) {\n oneBefore.removeChild(last);\n last.childNodes.forEach((child) => {\n oneBefore.appendChild(child);\n });\n }\n }\n }\n else {\n // If it's final element just skip.\n }\n }\n // response.childNodes.forEach((node) => {\n // \tif (node instanceof HTMLElement) {\n // \t\tnode.parentNode = null;\n // \t}\n // });\n return root;\n}\nexports.parse = parse;\n/**\n * Resolves a list of {@link NodeInsertable} to a list of nodes,\n * and removes nodes from any potential parent.\n */\nfunction resolveInsertable(insertable) {\n return insertable.map((val) => {\n if (typeof val === 'string') {\n return new text_1.default(val);\n }\n val.remove();\n return val;\n });\n}\nfunction resetParent(nodes, parent) {\n return nodes.map((node) => {\n node.parentNode = parent;\n return node;\n });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = void 0;\nvar html_1 = require(\"./nodes/html\");\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return html_1.parse; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst html_1 = require(\"./nodes/html\");\n/**\n * Parses HTML and returns a root element\n * Parse a chuck of HTML source.\n */\nfunction valid(data, options = {}) {\n const stack = (0, html_1.base_parse)(data, options);\n return Boolean(stack.length === 1);\n}\nexports.default = valid;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NodeType = exports.TextNode = exports.Node = exports.valid = exports.CommentNode = exports.HTMLElement = exports.parse = void 0;\nconst comment_1 = __importDefault(require(\"./nodes/comment\"));\nexports.CommentNode = comment_1.default;\nconst html_1 = __importDefault(require(\"./nodes/html\"));\nexports.HTMLElement = html_1.default;\nconst node_1 = __importDefault(require(\"./nodes/node\"));\nexports.Node = node_1.default;\nconst text_1 = __importDefault(require(\"./nodes/text\"));\nexports.TextNode = text_1.default;\nconst type_1 = __importDefault(require(\"./nodes/type\"));\nexports.NodeType = type_1.default;\nconst parse_1 = __importDefault(require(\"./parse\"));\nconst valid_1 = __importDefault(require(\"./valid\"));\nexports.valid = valid_1.default;\nfunction parse(data, options = {}) {\n return (0, parse_1.default)(data, options);\n}\nexports.default = parse;\nexports.parse = parse;\nparse.parse = parse_1.default;\nparse.HTMLElement = html_1.default;\nparse.CommentNode = comment_1.default;\nparse.valid = valid_1.default;\nparse.Node = node_1.default;\nparse.TextNode = text_1.default;\nparse.NodeType = type_1.default;\n","/**\n * arXiv HTML to JatsDocument parser.\n *\n * Parses LaTeXML-generated HTML from arXiv and converts it to the intermediate\n * JatsDocument representation, which can then be rendered to Markdown via writeMarkdown().\n */\nimport { parse as parseHtml } from \"node-html-parser\";\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n/** Query a single element, returning null if not found. */\nfunction q(root, selector) {\n return root.querySelector(selector);\n}\n/** Query all matching elements. */\nfunction qa(root, selector) {\n return root.querySelectorAll(selector);\n}\n/** Check if an element has a given CSS class. */\nfunction hasClass(el, cls) {\n return el.classList.contains(cls);\n}\nfunction escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n/** Clone an element and remove <annotation> elements, then return textContent. */\nfunction stripAnnotations(el) {\n const clone = parseHtml(el.outerHTML);\n for (const ann of qa(clone, \"annotation\")) {\n ann.remove();\n }\n return clone.textContent.trim();\n}\n// ---------------------------------------------------------------------------\n// Inline content parsing — class-based handlers\n// ---------------------------------------------------------------------------\n/** Try matching a class-based inline element. Returns null if no match. */\nfunction matchClassInline(el) {\n if (hasClass(el, \"ltx_font_bold\")) {\n return { type: \"bold\", children: parseInlineChildren(el) };\n }\n if (hasClass(el, \"ltx_font_italic\")) {\n return { type: \"italic\", children: parseInlineChildren(el) };\n }\n if (hasClass(el, \"ltx_font_typewriter\")) {\n return { type: \"code\", text: el.textContent.trim() };\n }\n return null;\n}\nfunction handleMath(el) {\n const alt = el.getAttribute(\"alttext\");\n const text = stripAnnotations(el);\n const result = { type: \"inline-formula\", text };\n if (alt)\n result.tex = alt;\n return result;\n}\nfunction handleAnchor(el) {\n const href = el.getAttribute(\"href\") ?? \"\";\n if (href.startsWith(\"#bib\")) {\n return { type: \"citation\", refId: href.slice(1), text: el.textContent.trim() };\n }\n if (href.startsWith(\"http://\") || href.startsWith(\"https://\")) {\n return { type: \"link\", url: href, children: parseInlineChildren(el) };\n }\n return { type: \"text\", text: el.textContent.trim() };\n}\n/** Dispatch map for tag names → inline handlers. */\nconst TAG_INLINE_HANDLERS = {\n math: handleMath,\n a: handleAnchor,\n b: (el) => ({ type: \"bold\", children: parseInlineChildren(el) }),\n strong: (el) => ({ type: \"bold\", children: parseInlineChildren(el) }),\n i: (el) => ({ type: \"italic\", children: parseInlineChildren(el) }),\n em: (el) => ({ type: \"italic\", children: parseInlineChildren(el) }),\n code: (el) => ({ type: \"code\", text: el.textContent.trim() }),\n sup: (el) => ({ type: \"superscript\", text: el.textContent.trim() }),\n sub: (el) => ({ type: \"subscript\", text: el.textContent.trim() }),\n};\n/** Tags that should be recursed into as inline containers. */\nconst INLINE_CONTAINER_TAGS = new Set([\"span\", \"cite\"]);\n/** Process a single element node into inline content. */\nfunction processInlineElement(el) {\n // Class-based detection first\n const classMatch = matchClassInline(el);\n if (classMatch)\n return [classMatch];\n // Tag-based dispatch\n const tag = el.tagName?.toLowerCase() ?? \"\";\n const handler = TAG_INLINE_HANDLERS[tag];\n if (handler) {\n const content = handler(el);\n return content ? [content] : [];\n }\n // Inline containers: recurse\n if (INLINE_CONTAINER_TAGS.has(tag)) {\n return parseInlineChildren(el);\n }\n // Fallback: extract text\n const text = el.textContent.trim();\n return text ? [{ type: \"text\", text }] : [];\n}\n/** Parse inline content from child nodes of an element. */\nfunction parseInlineChildren(parent) {\n const result = [];\n for (const node of parent.childNodes) {\n if (node.nodeType === 3) {\n const text = node.textContent;\n if (text)\n result.push({ type: \"text\", text });\n }\n else if (node.nodeType === 1) {\n result.push(...processInlineElement(node));\n }\n }\n return result;\n}\n// ---------------------------------------------------------------------------\n// Block content parsing — individual block handlers\n// ---------------------------------------------------------------------------\nfunction parseParagraph(el) {\n const innerP = q(el, \"p\");\n return { type: \"paragraph\", content: parseInlineChildren(innerP ?? el) };\n}\n/**\n * Parse an ltx_para element which may contain a mix of <p> text and\n * block-level elements (equations, tables, etc.).\n */\nfunction parseLtxPara(el) {\n const blocks = [];\n for (const child of el.childNodes) {\n if (child.nodeType !== 1)\n continue;\n const childEl = child;\n const tag = childEl.tagName?.toLowerCase() ?? \"\";\n if (tag === \"section\" || /^h[1-6]$/.test(tag))\n continue;\n const block = matchBlockByClass(childEl) ?? matchBlockByTag(childEl, tag);\n if (block) {\n blocks.push(block);\n }\n }\n if (blocks.length === 0) {\n blocks.push(parseParagraph(el));\n }\n return blocks;\n}\nfunction parseList(el) {\n const tag = el.tagName?.toLowerCase() ?? \"\";\n const ordered = tag === \"ol\" || hasClass(el, \"ltx_enumerate\");\n const items = [];\n for (const li of qa(el, \"li\")) {\n items.push(parseInlineChildren(li));\n }\n return { type: \"list\", ordered, items };\n}\nfunction parseFigure(el) {\n const labelEl = q(el, \".ltx_caption .ltx_tag_figure\");\n const captionEl = q(el, \".ltx_caption\");\n const id = el.getAttribute(\"id\");\n let label;\n if (labelEl) {\n label = labelEl.textContent.trim().replace(/:$/, \"\");\n }\n let caption;\n if (captionEl) {\n const captionText = captionEl.textContent.trim();\n caption = label\n ? captionText.replace(new RegExp(`^${escapeRegex(label)}[:\\\\s]*`), \"\").trim()\n : captionText;\n }\n const block = { type: \"figure\" };\n if (id)\n block.id = id;\n if (label)\n block.label = label;\n if (caption)\n block.caption = caption;\n return block;\n}\nfunction parseTableHeaders(thead) {\n const headers = [];\n const headerRow = q(thead, \"tr\") ?? q(thead, \".ltx_tr\");\n if (headerRow) {\n for (const th of qa(headerRow, \"th, td, .ltx_td\")) {\n headers.push(stripAnnotations(th));\n }\n }\n return headers;\n}\nfunction parseTableRows(el, thead) {\n const rows = [];\n const tbody = q(el, \"tbody\") ?? q(el, \".ltx_tbody\") ?? el;\n for (const tr of qa(tbody, \"tr, .ltx_tr\")) {\n if (thead && tr.parentNode === thead)\n continue;\n const cells = [];\n for (const td of qa(tr, \"td, th, .ltx_td\")) {\n cells.push(stripAnnotations(td));\n }\n if (cells.length > 0)\n rows.push(cells);\n }\n return rows;\n}\nfunction parseTable(el) {\n const captionEl = q(el, \".ltx_caption\");\n const thead = q(el, \"thead\") ?? q(el, \".ltx_thead\");\n const headers = thead ? parseTableHeaders(thead) : [];\n const rows = parseTableRows(el, thead);\n if (captionEl) {\n return { type: \"table\", caption: captionEl.textContent.trim(), headers, rows };\n }\n return { type: \"table\", headers, rows };\n}\nfunction parseFormula(el) {\n const mathEl = q(el, \"math\");\n const id = el.getAttribute(\"id\");\n const labelEl = q(el, \".ltx_tag_equation\");\n const label = labelEl ? labelEl.textContent.trim() : undefined;\n let tex;\n let text;\n if (mathEl) {\n const alt = mathEl.getAttribute(\"alttext\");\n if (alt)\n tex = alt;\n text = stripAnnotations(mathEl);\n }\n else {\n text = el.textContent.trim();\n }\n const block = { type: \"formula\" };\n if (id)\n block.id = id;\n if (label)\n block.label = label;\n if (tex)\n block.tex = tex;\n if (text && !tex)\n block.text = text;\n return block;\n}\n// ---------------------------------------------------------------------------\n// Block content parsing — dispatch\n// ---------------------------------------------------------------------------\n/** Match block elements by CSS class (checked before tag-based matching). */\nfunction matchBlockByClass(el) {\n if (hasClass(el, \"ltx_equation\") || hasClass(el, \"ltx_eqn_table\"))\n return parseFormula(el);\n if (hasClass(el, \"ltx_tabular\"))\n return parseTable(el);\n return null;\n}\n/** Match block elements by tag name. */\nfunction matchBlockByTag(el, tag) {\n if (tag === \"p\")\n return { type: \"paragraph\", content: parseInlineChildren(el) };\n if (tag === \"ol\" || tag === \"ul\")\n return parseList(el);\n if (tag === \"figure\" && hasClass(el, \"ltx_table\"))\n return parseTable(el);\n if (tag === \"table\")\n return parseTable(el);\n if (tag === \"figure\")\n return parseFigure(el);\n if (tag === \"blockquote\")\n return { type: \"blockquote\", content: parseInlineChildren(el) };\n if (tag === \"pre\")\n return { type: \"preformat\", text: el.textContent.trim() };\n return null;\n}\n/** Try to parse an element as a specific block type. Returns null if not matched. */\nfunction matchBlock(el) {\n const tag = el.tagName?.toLowerCase() ?? \"\";\n if (tag === \"section\" || /^h[1-6]$/.test(tag))\n return null;\n return matchBlockByClass(el) ?? matchBlockByTag(el, tag);\n}\n/** Parse block content from a section's child elements. */\nfunction parseBlockContent(parent) {\n const blocks = [];\n for (const child of parent.childNodes) {\n if (child.nodeType !== 1)\n continue;\n const el = child;\n // ltx_para may contain mixed content (text + embedded equations/tables)\n if (hasClass(el, \"ltx_para\")) {\n blocks.push(...parseLtxPara(el));\n continue;\n }\n const block = matchBlock(el);\n if (block) {\n blocks.push(block);\n continue;\n }\n // Fallback: treat as paragraph if it has text and is not a skipped element\n const tag = el.tagName?.toLowerCase() ?? \"\";\n if (tag !== \"section\" && tag !== \"nav\" && !/^h[1-6]$/.test(tag)) {\n const text = el.textContent.trim();\n if (text)\n blocks.push({ type: \"paragraph\", content: parseInlineChildren(el) });\n }\n }\n return blocks;\n}\n// ---------------------------------------------------------------------------\n// Section parsing\n// ---------------------------------------------------------------------------\n/** Determine section level from CSS class. */\nfunction getSectionLevel(el) {\n if (hasClass(el, \"ltx_subsection\"))\n return 3;\n if (hasClass(el, \"ltx_subsubsection\"))\n return 4;\n if (hasClass(el, \"ltx_paragraph\"))\n return 5;\n return 2;\n}\n/** Find the heading element for a section. */\nfunction findHeading(el, level) {\n return (q(el, `:scope > h${level}`) ??\n q(el, \":scope > h2\") ??\n q(el, \":scope > h3\") ??\n q(el, \":scope > h4\") ??\n q(el, \":scope > h5\") ??\n q(el, \":scope > h6\"));\n}\n/** Parse a section element and its subsections recursively. */\nfunction parseSection(el) {\n const level = getSectionLevel(el);\n const headingEl = findHeading(el, level);\n const title = headingEl ? headingEl.textContent.trim() : \"\";\n const content = parseBlockContent(el);\n const subsections = [];\n for (const child of el.childNodes) {\n if (child.nodeType !== 1)\n continue;\n const childEl = child;\n if (childEl.tagName?.toLowerCase() === \"section\") {\n subsections.push(parseSection(childEl));\n }\n }\n return { title, level, content, subsections };\n}\n// ---------------------------------------------------------------------------\n// Metadata parsing\n// ---------------------------------------------------------------------------\n/** Extract document title from the HTML. */\nfunction parseTitle(root) {\n const titleEl = q(root, \".ltx_title.ltx_title_document\");\n if (!titleEl)\n return \"\";\n const titleClone = parseHtml(titleEl.outerHTML);\n for (const authorInTitle of qa(titleClone, \".ltx_authors\")) {\n authorInTitle.remove();\n }\n return titleClone.textContent.trim();\n}\n/** Try to parse a comma-split part as an author. Returns null for affiliations. */\nfunction parseAuthorName(commaPart) {\n // Take the first non-empty line (affiliations appear on subsequent lines after <br>)\n const lines = commaPart.split(/\\n/);\n const firstLine = lines.find((l) => l.trim() !== \"\")?.trim() ?? \"\";\n if (!firstLine)\n return null;\n // Skip affiliation entries: start with digit (e.g. \"1IBM Research\", \"2 NASA MFSC\")\n if (/^\\d/.test(firstLine))\n return null;\n // Remove trailing superscript digits (affiliation markers attached to names)\n const name = firstLine.replace(/\\d+$/, \"\").trim();\n if (!name)\n return null;\n const words = name.split(/\\s+/);\n const surname = words.pop() ?? name;\n const author = { surname };\n if (words.length > 0)\n author.givenNames = words.join(\" \");\n return author;\n}\n/** Extract authors from the HTML. */\nfunction parseAuthors(root) {\n const authors = [];\n for (const authorEl of qa(root, \".ltx_authors .ltx_personname\")) {\n const fullText = authorEl.textContent.trim();\n if (!fullText)\n continue;\n // Split by comma to handle multiple authors in a single ltx_personname\n for (const part of fullText.split(\",\")) {\n const author = parseAuthorName(part);\n if (author)\n authors.push(author);\n }\n }\n return authors;\n}\n/** Extract abstract text from the HTML. */\nfunction parseAbstract(root) {\n const abstractEl = q(root, \".ltx_abstract\");\n if (!abstractEl)\n return undefined;\n const clone = parseHtml(abstractEl.outerHTML);\n const absTitle = q(clone, \".ltx_title\");\n if (absTitle)\n absTitle.remove();\n for (const note of qa(clone, \".ltx_note\")) {\n note.remove();\n }\n const text = clone.textContent.trim();\n return text || undefined;\n}\n/** Parse document metadata from the HTML. */\nfunction parseMetadata(root) {\n const title = parseTitle(root);\n const authors = parseAuthors(root);\n const abstract = parseAbstract(root);\n const keywordEls = qa(root, \".ltx_keywords .ltx_text\");\n const keywords = keywordEls.map((kw) => kw.textContent.trim()).filter(Boolean);\n const metadata = { title, authors };\n if (abstract)\n metadata.abstract = abstract;\n if (keywords.length > 0)\n metadata.keywords = keywords;\n return metadata;\n}\n// ---------------------------------------------------------------------------\n// References parsing\n// ---------------------------------------------------------------------------\n/** Extract reference text from a bibitem element. */\nfunction extractRefText(item) {\n const bibBlock = q(item, \".ltx_bibblock\");\n if (bibBlock)\n return bibBlock.textContent.trim();\n let text = item.textContent.trim();\n const labelEl = q(item, \".ltx_tag_bibitem\");\n if (labelEl) {\n const labelText = labelEl.textContent.trim();\n if (text.startsWith(labelText)) {\n text = text.slice(labelText.length).trim();\n }\n }\n return text;\n}\n/** Extract DOI from links in a bibitem. */\nfunction extractDoi(item) {\n for (const link of qa(item, \"a\")) {\n const href = link.getAttribute(\"href\") ?? \"\";\n const doiMatch = href.match(/doi\\.org\\/(.+)/);\n if (doiMatch)\n return doiMatch[1];\n }\n return undefined;\n}\n/** Parse bibliography references. */\nfunction parseReferences(root) {\n const refs = [];\n for (const item of qa(root, \".ltx_bibitem\")) {\n const id = item.getAttribute(\"id\") ?? `ref${refs.length + 1}`;\n const text = extractRefText(item);\n const doi = extractDoi(item);\n const ref = { id, text };\n if (doi)\n ref.doi = doi;\n refs.push(ref);\n }\n return refs;\n}\n// ---------------------------------------------------------------------------\n// Acknowledgments parsing\n// ---------------------------------------------------------------------------\nfunction parseAcknowledgments(root) {\n const ackEl = q(root, \".ltx_acknowledgement\");\n if (!ackEl)\n return undefined;\n const clone = parseHtml(ackEl.outerHTML);\n const heading = q(clone, \".ltx_title\");\n if (heading)\n heading.remove();\n const text = clone.textContent.trim();\n return text || undefined;\n}\n// ---------------------------------------------------------------------------\n// Body sections parsing (shared logic)\n// ---------------------------------------------------------------------------\n/** Check if a section element is a body section (not bibliography or acknowledgements). */\nfunction isBodySection(el) {\n return (el.tagName?.toLowerCase() === \"section\" &&\n !hasClass(el, \"ltx_bibliography\") &&\n !hasClass(el, \"ltx_acknowledgement\"));\n}\n/** Parse body sections from an article root element. */\nfunction parseBodySections(article) {\n const sections = [];\n for (const child of article.childNodes) {\n if (child.nodeType !== 1)\n continue;\n const el = child;\n if (isBodySection(el)) {\n sections.push(parseSection(el));\n }\n }\n return sections;\n}\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n/**\n * Parse arXiv LaTeXML HTML into a JatsDocument.\n * @param html - Full HTML string from arXiv\n * @returns Complete parsed document\n */\nexport function parseArxivHtml(html) {\n const root = parseHtml(html);\n const metadata = parseMetadata(root);\n const references = parseReferences(root);\n const article = q(root, \"article.ltx_document\") ?? root;\n const sections = parseBodySections(article);\n const acknowledgments = parseAcknowledgments(root);\n const doc = { metadata, sections, references };\n if (acknowledgments)\n doc.acknowledgments = acknowledgments;\n return doc;\n}\n/**\n * Parse only metadata from arXiv HTML.\n */\nexport function parseArxivHtmlMetadata(html) {\n return parseMetadata(parseHtml(html));\n}\n/**\n * Parse only body sections from arXiv HTML.\n */\nexport function parseArxivHtmlBody(html) {\n const root = parseHtml(html);\n const article = q(root, \"article.ltx_document\") ?? root;\n return parseBodySections(article);\n}\n/**\n * Parse only references from arXiv HTML.\n */\nexport function parseArxivHtmlReferences(html) {\n return parseReferences(parseHtml(html));\n}\n//# sourceMappingURL=arxiv-html-parser.js.map","'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nexport const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nexport function getAllMatches(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n allmatches.startIndex = regex.lastIndex - match[0].length;\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n}\n\nexport const isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n}\n\nexport function isExist(v) {\n return typeof v !== 'undefined';\n}\n\nexport function isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexport function merge(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a); // will return an array of own properties\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n if (arrayMode === 'strict') {\n target[keys[i]] = [ a[keys[i]] ];\n } else {\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n}\n/* exports.merge =function (b,a){\n return Object.assign(b,a);\n} */\n\nexport function getValue(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n}\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};","'use strict';\n\nimport {getAllMatches, isName} from './util.js';\n\nconst defaultOptions = {\n allowBooleanAttributes: false, //A tag can have attributes without any value\n unpairedTags: []\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexport function validate(xmlData, options) {\n options = Object.assign({}, defaultOptions, options);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n const tags = [];\n let tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n let reachedRoot = false;\n\n if (xmlData[0] === '\\ufeff') {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n \n for (let i = 0; i < xmlData.length; i++) {\n\n if (xmlData[i] === '<' && xmlData[i+1] === '?') {\n i+=2;\n i = readPI(xmlData,i);\n if (i.err) return i;\n }else if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n let tagStartPos = i;\n i++;\n \n if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = '';\n for (; i < xmlData.length &&\n xmlData[i] !== '>' &&\n xmlData[i] !== ' ' &&\n xmlData[i] !== '\\t' &&\n xmlData[i] !== '\\n' &&\n xmlData[i] !== '\\r'; i++\n ) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"Invalid space after '<'.\";\n } else {\n msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n }\n return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === '/') {\n //self closing tag\n const attrStrStart = i - attrStr.length;\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n //continue; //text may presents after self closing tag\n } else {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else if (tags.length === 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' has not been opened.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else {\n const otg = tags.pop();\n if (tagName !== otg.tagName) {\n let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n return getErrorObject('InvalidTag',\n \"Expected closing tag '\"+otg.tagName+\"' (opened in line \"+openPos.line+\", col \"+openPos.col+\") instead of closing tag '\"+tagName+\"'.\",\n getLineNumberForPosition(xmlData, tagStartPos));\n }\n\n //when there are no more tags, we reached the root level.\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if (reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else if(options.unpairedTags.indexOf(tagName) !== -1){\n //don't push into stack\n } else {\n tags.push({tagName, tagStartPos});\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else if (xmlData[i+1] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) return i;\n } else{\n break;\n }\n } else if (xmlData[i] === '&') {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n }else{\n if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n return getErrorObject('InvalidXml', \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n }\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if ( isWhiteSpace(xmlData[i])) {\n continue;\n }\n return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n }else if (tags.length == 1) {\n return getErrorObject('InvalidTag', \"Unclosed tag '\"+tags[0].tagName+\"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n }else if (tags.length > 0) {\n return getErrorObject('InvalidXml', \"Invalid '\"+\n JSON.stringify(tags.map(t => t.tagName), null, 4).replace(/\\r?\\n/g, '')+\n \"' found.\", {line: 1, col: 1});\n }\n\n return true;\n};\n\nfunction isWhiteSpace(char){\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n}\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n const tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (\n xmlData.length > i + 8 &&\n xmlData[i + 1] === 'D' &&\n xmlData[i + 2] === 'O' &&\n xmlData[i + 3] === 'C' &&\n xmlData[i + 4] === 'T' &&\n xmlData[i + 5] === 'Y' &&\n xmlData[i + 6] === 'P' &&\n xmlData[i + 7] === 'E'\n ) {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (\n xmlData.length > i + 9 &&\n xmlData[i + 1] === '[' &&\n xmlData[i + 2] === 'C' &&\n xmlData[i + 3] === 'D' &&\n xmlData[i + 4] === 'A' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'A' &&\n xmlData[i + 7] === '['\n ) {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = '';\n let startChar = '';\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n\n return {\n value: attrStr,\n index: i,\n tagClosed: tagClosed\n };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(matches[i]))\n } else if (matches[i][3] !== undefined && matches[i][4] === undefined) {\n return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' is without value.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(matches[i]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(matches[i]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(matches[i]));\n }\n }\n\n return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n let re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';')\n return i;\n if (!xmlData[i].match(re))\n break;\n }\n return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';')\n return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === ';')\n break;\n return -1;\n }\n return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber.line || lineNumber,\n col: lineNumber.col,\n },\n };\n}\n\nfunction validateAttrName(attrName) {\n return isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return {\n line: lines.length,\n\n // column number is last line's length + 1, because column numbering starts at 1:\n col: lines[lines.length - 1].length + 1\n };\n}\n\n//this function returns the position of the first character of match within attrStr\nfunction getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n}\n","\nexport const defaultOptions = {\n preserveOrder: false,\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n removeNSPrefix: false, // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true\n },\n tagValueProcessor: function(tagName, val) {\n return val;\n },\n attributeValueProcessor: function(attrName, val) {\n return val;\n },\n stopNodes: [], //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => false,\n commentPropName: false,\n unpairedTags: [],\n processEntities: true,\n htmlEntities: false,\n ignoreDeclaration: false,\n ignorePiTags: false,\n transformTagName: false,\n transformAttributeName: false,\n updateTag: function(tagName, jPath, attrs){\n return tagName\n },\n // skipEmptyListItem: false\n captureMetaData: false,\n};\n \nexport const buildOptions = function(options) {\n return Object.assign({}, defaultOptions, options);\n};\n","'use strict';\n\nlet METADATA_SYMBOL;\n\nif (typeof Symbol !== \"function\") {\n METADATA_SYMBOL = \"@@xmlMetadata\";\n} else {\n METADATA_SYMBOL = Symbol(\"XML Node Metadata\");\n}\n\nexport default class XmlNode{\n constructor(tagname) {\n this.tagname = tagname;\n this.child = []; //nested tags, text, cdata, comments in order\n this[\":@\"] = {}; //attributes map\n }\n add(key,val){\n // this.child.push( {name : key, val: val, isCdata: isCdata });\n if(key === \"__proto__\") key = \"#__proto__\";\n this.child.push( {[key]: val });\n }\n addChild(node, startIndex) {\n if(node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n if(node[\":@\"] && Object.keys(node[\":@\"]).length > 0){\n this.child.push( { [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n }else{\n this.child.push( { [node.tagname]: node.child });\n }\n // if requested, add the startIndex\n if (startIndex !== undefined) {\n // Note: for now we just overwrite the metadata. If we had more complex metadata,\n // we might need to do an object append here: metadata = { ...metadata, startIndex }\n this.child[this.child.length - 1][METADATA_SYMBOL] = { startIndex };\n }\n }\n /** symbol used for metadata */\n static getMetaDataSymbol() {\n return METADATA_SYMBOL;\n }\n}\n","import {isName} from '../util.js';\n\nexport default class DocTypeReader{\n constructor(processEntities){\n this.suppressValidationErr = !processEntities;\n }\n \n readDocType(xmlData, i){\n \n const entities = {};\n if( xmlData[i + 3] === 'O' &&\n xmlData[i + 4] === 'C' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'Y' &&\n xmlData[i + 7] === 'P' &&\n xmlData[i + 8] === 'E')\n { \n i = i+9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n for(;i<xmlData.length;i++){\n if (xmlData[i] === '<' && !comment) { //Determine the tag type\n if( hasBody && hasSeq(xmlData, \"!ENTITY\",i)){\n i += 7; \n let entityName, val;\n [entityName, val,i] = this.readEntityExp(xmlData,i+1,this.suppressValidationErr);\n if(val.indexOf(\"&\") === -1){ //Parameter entities are not supported\n const escaped = entityName.replace(/[.\\-+*:]/g, '\\\\.');\n entities[ entityName ] = {\n regx : RegExp( `&${escaped};`,\"g\"),\n val: val\n };\n }\n }\n else if( hasBody && hasSeq(xmlData, \"!ELEMENT\",i)) {\n i += 8;//Not supported\n const {index} = this.readElementExp(xmlData,i+1);\n i = index;\n }else if( hasBody && hasSeq(xmlData, \"!ATTLIST\",i)){\n i += 8;//Not supported\n // const {index} = this.readAttlistExp(xmlData,i+1);\n // i = index;\n }else if( hasBody && hasSeq(xmlData, \"!NOTATION\",i)) {\n i += 9;//Not supported\n const {index} = this.readNotationExp(xmlData,i+1,this.suppressValidationErr);\n i = index;\n }else if( hasSeq(xmlData, \"!--\",i) ) comment = true;\n else throw new Error(`Invalid DOCTYPE`);\n\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i] === '>') { //Read tag content\n if(comment){\n if( xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\"){\n comment = false;\n angleBracketsCount--;\n }\n }else{\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n }else if( xmlData[i] === '['){\n hasBody = true;\n }else{\n exp += xmlData[i];\n }\n }\n if(angleBracketsCount !== 0){\n throw new Error(`Unclosed DOCTYPE`);\n }\n }else{\n throw new Error(`Invalid Tag instead of DOCTYPE`);\n }\n return {entities, i};\n }\n readEntityExp(xmlData, i) { \n //External entities are not supported\n // <!ENTITY ext SYSTEM \"http://normal-website.com\" >\n\n //Parameter entities are not supported\n // <!ENTITY entityname \"&anotherElement;\">\n\n //Internal entities are supported\n // <!ENTITY entityname \"replacement text\">\n\n // Skip leading whitespace after <!ENTITY\n i = skipWhitespace(xmlData, i);\n\n // Read entity name\n let entityName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i]) && xmlData[i] !== '\"' && xmlData[i] !== \"'\") {\n entityName += xmlData[i];\n i++;\n }\n validateEntityName(entityName);\n\n // Skip whitespace after entity name\n i = skipWhitespace(xmlData, i);\n\n // Check for unsupported constructs (external entities or parameter entities)\n if(!this.suppressValidationErr){\n if (xmlData.substring(i, i + 6).toUpperCase() === \"SYSTEM\") {\n throw new Error(\"External entities are not supported\");\n }else if (xmlData[i] === \"%\") {\n throw new Error(\"Parameter entities are not supported\");\n }\n }\n\n // Read entity value (internal entity)\n let entityValue = \"\";\n [i, entityValue] = this.readIdentifierVal(xmlData, i, \"entity\");\n i--;\n return [entityName, entityValue, i ];\n }\n\n readNotationExp(xmlData, i) {\n // Skip leading whitespace after <!NOTATION\n i = skipWhitespace(xmlData, i);\n\n // Read notation name\n let notationName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n notationName += xmlData[i];\n i++;\n }\n !this.suppressValidationErr && validateEntityName(notationName);\n\n // Skip whitespace after notation name\n i = skipWhitespace(xmlData, i);\n\n // Check identifier type (SYSTEM or PUBLIC)\n const identifierType = xmlData.substring(i, i + 6).toUpperCase();\n if (!this.suppressValidationErr && identifierType !== \"SYSTEM\" && identifierType !== \"PUBLIC\") {\n throw new Error(`Expected SYSTEM or PUBLIC, found \"${identifierType}\"`);\n }\n i += identifierType.length;\n\n // Skip whitespace after identifier type\n i = skipWhitespace(xmlData, i);\n\n // Read public identifier (if PUBLIC)\n let publicIdentifier = null;\n let systemIdentifier = null;\n\n if (identifierType === \"PUBLIC\") {\n [i, publicIdentifier ] = this.readIdentifierVal(xmlData, i, \"publicIdentifier\");\n\n // Skip whitespace after public identifier\n i = skipWhitespace(xmlData, i);\n\n // Optionally read system identifier\n if (xmlData[i] === '\"' || xmlData[i] === \"'\") {\n [i, systemIdentifier ] = this.readIdentifierVal(xmlData, i,\"systemIdentifier\");\n }\n } else if (identifierType === \"SYSTEM\") {\n // Read system identifier (mandatory for SYSTEM)\n [i, systemIdentifier ] = this.readIdentifierVal(xmlData, i, \"systemIdentifier\");\n\n if (!this.suppressValidationErr && !systemIdentifier) {\n throw new Error(\"Missing mandatory system identifier for SYSTEM notation\");\n }\n }\n \n return {notationName, publicIdentifier, systemIdentifier, index: --i};\n }\n\n readIdentifierVal(xmlData, i, type) {\n let identifierVal = \"\";\n const startChar = xmlData[i];\n if (startChar !== '\"' && startChar !== \"'\") {\n throw new Error(`Expected quoted string, found \"${startChar}\"`);\n }\n i++;\n\n while (i < xmlData.length && xmlData[i] !== startChar) {\n identifierVal += xmlData[i];\n i++;\n }\n\n if (xmlData[i] !== startChar) {\n throw new Error(`Unterminated ${type} value`);\n }\n i++;\n return [i, identifierVal];\n }\n\n readElementExp(xmlData, i) {\n // <!ELEMENT br EMPTY>\n // <!ELEMENT div ANY>\n // <!ELEMENT title (#PCDATA)>\n // <!ELEMENT book (title, author+)>\n // <!ELEMENT name (content-model)>\n \n // Skip leading whitespace after <!ELEMENT\n i = skipWhitespace(xmlData, i);\n\n // Read element name\n let elementName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n elementName += xmlData[i];\n i++;\n }\n\n // Validate element name\n if (!this.suppressValidationErr && !isName(elementName)) {\n throw new Error(`Invalid element name: \"${elementName}\"`);\n }\n\n // Skip whitespace after element name\n i = skipWhitespace(xmlData, i);\n let contentModel = \"\";\n // Expect '(' to start content model\n if(xmlData[i] === \"E\" && hasSeq(xmlData, \"MPTY\",i)) i+=4;\n else if(xmlData[i] === \"A\" && hasSeq(xmlData, \"NY\",i)) i+=2;\n else if (xmlData[i] === \"(\") {\n i++; // Move past '('\n\n // Read content model\n while (i < xmlData.length && xmlData[i] !== \")\") {\n contentModel += xmlData[i];\n i++;\n }\n if (xmlData[i] !== \")\") {\n throw new Error(\"Unterminated content model\");\n }\n\n }else if(!this.suppressValidationErr){\n throw new Error(`Invalid Element Expression, found \"${xmlData[i]}\"`);\n }\n \n return {\n elementName,\n contentModel: contentModel.trim(),\n index: i\n };\n }\n\n readAttlistExp(xmlData, i) {\n // Skip leading whitespace after <!ATTLIST\n i = skipWhitespace(xmlData, i);\n\n // Read element name\n let elementName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n elementName += xmlData[i];\n i++;\n }\n\n // Validate element name\n validateEntityName(elementName)\n\n // Skip whitespace after element name\n i = skipWhitespace(xmlData, i);\n\n // Read attribute name\n let attributeName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n attributeName += xmlData[i];\n i++;\n }\n\n // Validate attribute name\n if (!validateEntityName(attributeName)) {\n throw new Error(`Invalid attribute name: \"${attributeName}\"`);\n }\n\n // Skip whitespace after attribute name\n i = skipWhitespace(xmlData, i);\n\n // Read attribute type\n let attributeType = \"\";\n if (xmlData.substring(i, i + 8).toUpperCase() === \"NOTATION\") {\n attributeType = \"NOTATION\";\n i += 8; // Move past \"NOTATION\"\n\n // Skip whitespace after \"NOTATION\"\n i = skipWhitespace(xmlData, i);\n\n // Expect '(' to start the list of notations\n if (xmlData[i] !== \"(\") {\n throw new Error(`Expected '(', found \"${xmlData[i]}\"`);\n }\n i++; // Move past '('\n\n // Read the list of allowed notations\n let allowedNotations = [];\n while (i < xmlData.length && xmlData[i] !== \")\") {\n let notation = \"\";\n while (i < xmlData.length && xmlData[i] !== \"|\" && xmlData[i] !== \")\") {\n notation += xmlData[i];\n i++;\n }\n\n // Validate notation name\n notation = notation.trim();\n if (!validateEntityName(notation)) {\n throw new Error(`Invalid notation name: \"${notation}\"`);\n }\n\n allowedNotations.push(notation);\n\n // Skip '|' separator or exit loop\n if (xmlData[i] === \"|\") {\n i++; // Move past '|'\n i = skipWhitespace(xmlData, i); // Skip optional whitespace after '|'\n }\n }\n\n if (xmlData[i] !== \")\") {\n throw new Error(\"Unterminated list of notations\");\n }\n i++; // Move past ')'\n\n // Store the allowed notations as part of the attribute type\n attributeType += \" (\" + allowedNotations.join(\"|\") + \")\";\n } else {\n // Handle simple types (e.g., CDATA, ID, IDREF, etc.)\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n attributeType += xmlData[i];\n i++;\n }\n\n // Validate simple attribute type\n const validTypes = [\"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"ENTITY\", \"ENTITIES\", \"NMTOKEN\", \"NMTOKENS\"];\n if (!this.suppressValidationErr && !validTypes.includes(attributeType.toUpperCase())) {\n throw new Error(`Invalid attribute type: \"${attributeType}\"`);\n }\n }\n\n // Skip whitespace after attribute type\n i = skipWhitespace(xmlData, i);\n\n // Read default value\n let defaultValue = \"\";\n if (xmlData.substring(i, i + 8).toUpperCase() === \"#REQUIRED\") {\n defaultValue = \"#REQUIRED\";\n i += 8;\n } else if (xmlData.substring(i, i + 7).toUpperCase() === \"#IMPLIED\") {\n defaultValue = \"#IMPLIED\";\n i += 7;\n } else {\n [i, defaultValue] = this.readIdentifierVal(xmlData, i, \"ATTLIST\");\n }\n\n return {\n elementName,\n attributeName,\n attributeType,\n defaultValue,\n index: i\n }\n }\n}\n\n\n\nconst skipWhitespace = (data, index) => {\n while (index < data.length && /\\s/.test(data[index])) {\n index++;\n }\n return index;\n};\n\n\n\nfunction hasSeq(data, seq,i){\n for(let j=0;j<seq.length;j++){\n if(seq[j]!==data[i+j+1]) return false;\n }\n return true;\n}\n\nfunction validateEntityName(name){\n if (isName(name))\n\t return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}\n","const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)([0-9]*(\\.[0-9]*)?)$/;\n// const octRegex = /^0x[a-z0-9]+/;\n// const binRegex = /0x[a-z0-9]+/;\n\n \nconst consider = {\n hex : true,\n // oct: false,\n leadingZeros: true,\n decimalPoint: \"\\.\",\n eNotation: true,\n //skipLike: /regex/\n};\n\nexport default function toNumber(str, options = {}){\n options = Object.assign({}, consider, options );\n if(!str || typeof str !== \"string\" ) return str;\n \n let trimmedStr = str.trim();\n \n if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;\n else if(str===\"0\") return 0;\n else if (options.hex && hexRegex.test(trimmedStr)) {\n return parse_int(trimmedStr, 16);\n // }else if (options.oct && octRegex.test(str)) {\n // return Number.parseInt(val, 8);\n }else if (trimmedStr.includes('e') || trimmedStr.includes('E')) { //eNotation\n return resolveEnotation(str,trimmedStr,options);\n // }else if (options.parseBin && binRegex.test(str)) {\n // return Number.parseInt(val, 2);\n }else{\n //separate negative sign, leading zeros, and rest number\n const match = numRegex.exec(trimmedStr);\n // +00.123 => [ , '+', '00', '.123', ..\n if(match){\n const sign = match[1] || \"\";\n const leadingZeros = match[2];\n let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros\n const decimalAdjacentToLeadingZeros = sign ? // 0., -00., 000.\n str[leadingZeros.length+1] === \".\" \n : str[leadingZeros.length] === \".\";\n\n //trim ending zeros for floating number\n if(!options.leadingZeros //leading zeros are not allowed\n && (leadingZeros.length > 1 \n || (leadingZeros.length === 1 && !decimalAdjacentToLeadingZeros))){\n // 00, 00.3, +03.24, 03, 03.24\n return str;\n }\n else{//no leading zeros or leading zeros are allowed\n const num = Number(trimmedStr);\n const parsedStr = String(num);\n\n if( num === 0) return num;\n if(parsedStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation\n if(options.eNotation) return num;\n else return str;\n }else if(trimmedStr.indexOf(\".\") !== -1){ //floating number\n if(parsedStr === \"0\") return num; //0.0\n else if(parsedStr === numTrimmedByZeros) return num; //0.456. 0.79000\n else if( parsedStr === `${sign}${numTrimmedByZeros}`) return num;\n else return str;\n }\n \n let n = leadingZeros? numTrimmedByZeros : trimmedStr;\n if(leadingZeros){\n // -009 => -9\n return (n === parsedStr) || (sign+n === parsedStr) ? num : str\n }else {\n // +9\n return (n === parsedStr) || (n === sign+parsedStr) ? num : str\n }\n }\n }else{ //non-numeric string\n return str;\n }\n }\n}\n\nconst eNotationRegx = /^([-+])?(0*)(\\d*(\\.\\d*)?[eE][-\\+]?\\d+)$/;\nfunction resolveEnotation(str,trimmedStr,options){\n if(!options.eNotation) return str;\n const notation = trimmedStr.match(eNotationRegx); \n if(notation){\n let sign = notation[1] || \"\";\n const eChar = notation[3].indexOf(\"e\") === -1 ? \"E\" : \"e\";\n const leadingZeros = notation[2];\n const eAdjacentToLeadingZeros = sign ? // 0E.\n str[leadingZeros.length+1] === eChar \n : str[leadingZeros.length] === eChar;\n\n if(leadingZeros.length > 1 && eAdjacentToLeadingZeros) return str;\n else if(leadingZeros.length === 1 \n && (notation[3].startsWith(`.${eChar}`) || notation[3][0] === eChar)){\n return Number(trimmedStr);\n }else if(options.leadingZeros && !eAdjacentToLeadingZeros){ //accept with leading zeros\n //remove leading 0s\n trimmedStr = (notation[1] || \"\") + notation[3];\n return Number(trimmedStr);\n }else return str;\n }else{\n return str;\n }\n}\n\n/**\n * \n * @param {string} numStr without leading zeros\n * @returns \n */\nfunction trimZeros(numStr){\n if(numStr && numStr.indexOf(\".\") !== -1){//float\n numStr = numStr.replace(/0+$/, \"\"); //remove ending zeros\n if(numStr === \".\") numStr = \"0\";\n else if(numStr[0] === \".\") numStr = \"0\"+numStr;\n else if(numStr[numStr.length-1] === \".\") numStr = numStr.substring(0,numStr.length-1);\n return numStr;\n }\n return numStr;\n}\n\nfunction parse_int(numStr, base){\n //polyfill\n if(parseInt) return parseInt(numStr, base);\n else if(Number.parseInt) return Number.parseInt(numStr, base);\n else if(window && window.parseInt) return window.parseInt(numStr, base);\n else throw new Error(\"parseInt, Number.parseInt, window.parseInt are not supported\")\n}","export default function getIgnoreAttributesFn(ignoreAttributes) {\n if (typeof ignoreAttributes === 'function') {\n return ignoreAttributes\n }\n if (Array.isArray(ignoreAttributes)) {\n return (attrName) => {\n for (const pattern of ignoreAttributes) {\n if (typeof pattern === 'string' && attrName === pattern) {\n return true\n }\n if (pattern instanceof RegExp && pattern.test(attrName)) {\n return true\n }\n }\n }\n }\n return () => false\n}","'use strict';\n///@ts-check\n\nimport {getAllMatches, isExist} from '../util.js';\nimport xmlNode from './xmlNode.js';\nimport DocTypeReader from './DocTypeReader.js';\nimport toNumber from \"strnum\";\nimport getIgnoreAttributesFn from \"../ignoreAttributes.js\";\n\n// const regx =\n// '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n// .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\nexport default class OrderedObjParser{\n constructor(options){\n this.options = options;\n this.currentNode = null;\n this.tagsNodeStack = [];\n this.docTypeEntities = {};\n this.lastEntities = {\n \"apos\" : { regex: /&(apos|#39|#x27);/g, val : \"'\"},\n \"gt\" : { regex: /&(gt|#62|#x3E);/g, val : \">\"},\n \"lt\" : { regex: /&(lt|#60|#x3C);/g, val : \"<\"},\n \"quot\" : { regex: /&(quot|#34|#x22);/g, val : \"\\\"\"},\n };\n this.ampEntity = { regex: /&(amp|#38|#x26);/g, val : \"&\"};\n this.htmlEntities = {\n \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n \"cent\" : { regex: /&(cent|#162);/g, val: \"¢\" },\n \"pound\" : { regex: /&(pound|#163);/g, val: \"£\" },\n \"yen\" : { regex: /&(yen|#165);/g, val: \"¥\" },\n \"euro\" : { regex: /&(euro|#8364);/g, val: \"€\" },\n \"copyright\" : { regex: /&(copy|#169);/g, val: \"©\" },\n \"reg\" : { regex: /&(reg|#174);/g, val: \"®\" },\n \"inr\" : { regex: /&(inr|#8377);/g, val: \"₹\" },\n \"num_dec\": { regex: /&#([0-9]{1,7});/g, val : (_, str) => fromCodePoint(str, 10, \"&#\") },\n \"num_hex\": { regex: /&#x([0-9a-fA-F]{1,6});/g, val : (_, str) => fromCodePoint(str, 16, \"&#x\") },\n };\n this.addExternalEntities = addExternalEntities;\n this.parseXml = parseXml;\n this.parseTextData = parseTextData;\n this.resolveNameSpace = resolveNameSpace;\n this.buildAttributesMap = buildAttributesMap;\n this.isItStopNode = isItStopNode;\n this.replaceEntitiesValue = replaceEntitiesValue;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\n\n if(this.options.stopNodes && this.options.stopNodes.length > 0){\n this.stopNodesExact = new Set();\n this.stopNodesWildcard = new Set();\n for(let i = 0; i < this.options.stopNodes.length; i++){\n const stopNodeExp = this.options.stopNodes[i];\n if(typeof stopNodeExp !== 'string') continue;\n if(stopNodeExp.startsWith(\"*.\")){\n this.stopNodesWildcard.add(stopNodeExp.substring(2));\n }else{\n this.stopNodesExact.add(stopNodeExp);\n }\n }\n }\n }\n\n}\n\nfunction addExternalEntities(externalEntities){\n const entKeys = Object.keys(externalEntities);\n for (let i = 0; i < entKeys.length; i++) {\n const ent = entKeys[i];\n const escaped = ent.replace(/[.\\-+*:]/g, '\\\\.');\n this.lastEntities[ent] = {\n regex: new RegExp(\"&\"+escaped+\";\",\"g\"),\n val : externalEntities[ent]\n }\n }\n}\n\n/**\n * @param {string} val\n * @param {string} tagName\n * @param {string} jPath\n * @param {boolean} dontTrim\n * @param {boolean} hasAttributes\n * @param {boolean} isLeafNode\n * @param {boolean} escapeEntities\n */\nfunction parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n if (val !== undefined) {\n if (this.options.trimValues && !dontTrim) {\n val = val.trim();\n }\n if(val.length > 0){\n if(!escapeEntities) val = this.replaceEntitiesValue(val);\n \n const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);\n if(newval === null || newval === undefined){\n //don't parse\n return val;\n }else if(typeof newval !== typeof val || newval !== val){\n //overwrite\n return newval;\n }else if(this.options.trimValues){\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n }else{\n const trimmedVal = val.trim();\n if(trimmedVal === val){\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n }else{\n return val;\n }\n }\n }\n }\n}\n\nfunction resolveNameSpace(tagname) {\n if (this.options.removeNSPrefix) {\n const tags = tagname.split(':');\n const prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])([\\\\s\\\\S]*?)\\\\3)?', 'gm');\n\nfunction buildAttributesMap(attrStr, jPath) {\n if (this.options.ignoreAttributes !== true && typeof attrStr === 'string') {\n // attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n const matches = getAllMatches(attrStr, attrsRegx);\n const len = matches.length; //don't make it inline\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = this.resolveNameSpace(matches[i][1]);\n if (this.ignoreAttributesFn(attrName, jPath)) {\n continue\n }\n let oldVal = matches[i][4];\n let aName = this.options.attributeNamePrefix + attrName;\n if (attrName.length) {\n if (this.options.transformAttributeName) {\n aName = this.options.transformAttributeName(aName);\n }\n if(aName === \"__proto__\") aName = \"#__proto__\";\n if (oldVal !== undefined) {\n if (this.options.trimValues) {\n oldVal = oldVal.trim();\n }\n oldVal = this.replaceEntitiesValue(oldVal);\n const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n if(newVal === null || newVal === undefined){\n //don't parse\n attrs[aName] = oldVal;\n }else if(typeof newVal !== typeof oldVal || newVal !== oldVal){\n //overwrite\n attrs[aName] = newVal;\n }else{\n //parse\n attrs[aName] = parseValue(\n oldVal,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n }\n } else if (this.options.allowBooleanAttributes) {\n attrs[aName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (this.options.attributesGroupName) {\n const attrCollection = {};\n attrCollection[this.options.attributesGroupName] = attrs;\n return attrCollection;\n }\n return attrs\n }\n}\n\nconst parseXml = function(xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\"); //TODO: remove this line\n const xmlObj = new xmlNode('!xml');\n let currentNode = xmlObj;\n let textData = \"\";\n let jPath = \"\";\n const docTypeReader = new DocTypeReader(this.options.processEntities);\n for(let i=0; i< xmlData.length; i++){//for each char in XML data\n const ch = xmlData[i];\n if(ch === '<'){\n // const nextIndex = i+1;\n // const _2ndChar = xmlData[nextIndex];\n if( xmlData[i+1] === '/') {//Closing Tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n if(this.options.removeNSPrefix){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n }\n }\n\n if(this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n\n if(currentNode){\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n }\n\n //check if last tag of nested tag was unpaired tag\n const lastTagName = jPath.substring(jPath.lastIndexOf(\".\")+1);\n if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){\n throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);\n }\n let propIndex = 0\n if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){\n propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1)\n this.tagsNodeStack.pop();\n }else{\n propIndex = jPath.lastIndexOf(\".\");\n }\n jPath = jPath.substring(0, propIndex);\n\n currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope\n textData = \"\";\n i = closeIndex;\n } else if( xmlData[i+1] === '?') {\n\n let tagData = readTagExp(xmlData,i, false, \"?>\");\n if(!tagData) throw new Error(\"Pi Tag is not closed.\");\n\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n if( (this.options.ignoreDeclaration && tagData.tagName === \"?xml\") || this.options.ignorePiTags){\n //do nothing\n }else{\n \n const childNode = new xmlNode(tagData.tagName);\n childNode.add(this.options.textNodeName, \"\");\n \n if(tagData.tagName !== tagData.tagExp && tagData.attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath);\n }\n this.addChild(currentNode, childNode, jPath, i);\n }\n\n\n i = tagData.closeIndex + 1;\n } else if(xmlData.substr(i + 1, 3) === '!--') {\n const endIndex = findClosingIndex(xmlData, \"-->\", i+4, \"Comment is not closed.\")\n if(this.options.commentPropName){\n const comment = xmlData.substring(i + 4, endIndex - 2);\n\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]);\n }\n i = endIndex;\n } else if( xmlData.substr(i + 1, 2) === '!D') {\n const result = docTypeReader.readDocType(xmlData, i);\n this.docTypeEntities = result.entities;\n i = result.i;\n }else if(xmlData.substr(i + 1, 2) === '![') {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i + 9,closeIndex);\n\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n if(val == undefined) val = \"\";\n\n //cdata should be set even if it is 0 length string\n if(this.options.cdataPropName){\n currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]);\n }else{\n currentNode.add(this.options.textNodeName, val);\n }\n \n i = closeIndex + 2;\n }else {//Opening tag\n let result = readTagExp(xmlData,i, this.options.removeNSPrefix);\n let tagName= result.tagName;\n const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n\n if (this.options.transformTagName) {\n //console.log(tagExp, tagName)\n const newTagName = this.options.transformTagName(tagName);\n if(tagExp === tagName) {\n tagExp = newTagName\n }\n tagName = newTagName;\n }\n \n //save text as child node\n if (currentNode && textData) {\n if(currentNode.tagname !== '!xml'){\n //when nested tag is found\n textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n }\n }\n\n //check if last tag was unpaired tag\n const lastTag = currentNode;\n if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){\n currentNode = this.tagsNodeStack.pop();\n jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n }\n if(tagName !== xmlObj.tagname){\n jPath += jPath ? \".\" + tagName : tagName;\n }\n const startIndex = i;\n if (this.isItStopNode(this.stopNodesExact, this.stopNodesWildcard, jPath, tagName)) {\n let tagContent = \"\";\n //self-closing tag\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n }else{\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n i = result.closeIndex;\n }\n //unpaired tag\n else if(this.options.unpairedTags.indexOf(tagName) !== -1){\n \n i = result.closeIndex;\n }\n //normal tag\n else{\n //read until closing tag is found\n const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if(!result) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result.i;\n tagContent = result.tagContent;\n }\n\n const childNode = new xmlNode(tagName);\n\n if(tagName !== tagExp && attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath\n );\n }\n if(tagContent) {\n tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n }\n \n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n childNode.add(this.options.textNodeName, tagContent);\n \n this.addChild(currentNode, childNode, jPath, startIndex);\n }else{\n //selfClosing tag\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n }else{\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n \n if(this.options.transformTagName) {\n const newTagName = this.options.transformTagName(tagName);\n if(tagExp === tagName) {\n tagExp = newTagName\n }\n tagName = newTagName;\n }\n\n const childNode = new xmlNode(tagName);\n if(tagName !== tagExp && attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath);\n }\n this.addChild(currentNode, childNode, jPath, startIndex);\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n }\n //opening tag\n else{\n const childNode = new xmlNode( tagName);\n this.tagsNodeStack.push(currentNode);\n \n if(tagName !== tagExp && attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath);\n }\n this.addChild(currentNode, childNode, jPath, startIndex);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }\n }else{\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n}\n\nfunction addChild(currentNode, childNode, jPath, startIndex){\n // unset startIndex if not requested\n if (!this.options.captureMetaData) startIndex = undefined;\n const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"])\n if(result === false){\n //do nothing\n } else if(typeof result === \"string\"){\n childNode.tagname = result\n currentNode.addChild(childNode, startIndex);\n }else{\n currentNode.addChild(childNode, startIndex);\n }\n}\n\nconst replaceEntitiesValue = function(val){\n\n if(this.options.processEntities){\n for(let entityName in this.docTypeEntities){\n const entity = this.docTypeEntities[entityName];\n val = val.replace( entity.regx, entity.val);\n }\n for(let entityName in this.lastEntities){\n const entity = this.lastEntities[entityName];\n val = val.replace( entity.regex, entity.val);\n }\n if(this.options.htmlEntities){\n for(let entityName in this.htmlEntities){\n const entity = this.htmlEntities[entityName];\n val = val.replace( entity.regex, entity.val);\n }\n }\n val = val.replace( this.ampEntity.regex, this.ampEntity.val);\n }\n return val;\n}\nfunction saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {\n if (textData) { //store previously collected data as textNode\n if(isLeafNode === undefined) isLeafNode = currentNode.child.length === 0\n \n textData = this.parseTextData(textData,\n currentNode.tagname,\n jPath,\n false,\n currentNode[\":@\"] ? Object.keys(currentNode[\":@\"]).length !== 0 : false,\n isLeafNode);\n\n if (textData !== undefined && textData !== \"\")\n currentNode.add(this.options.textNodeName, textData);\n textData = \"\";\n }\n return textData;\n}\n\n//TODO: use jPath to simplify the logic\n/**\n * @param {Set} stopNodesExact\n * @param {Set} stopNodesWildcard\n * @param {string} jPath\n * @param {string} currentTagName\n */\nfunction isItStopNode(stopNodesExact, stopNodesWildcard, jPath, currentTagName){\n if(stopNodesWildcard && stopNodesWildcard.has(currentTagName)) return true;\n if(stopNodesExact && stopNodesExact.has(jPath)) return true;\n return false;\n}\n\n/**\n * Returns the tag Expression and where it is ending handling single-double quotes situation\n * @param {string} xmlData \n * @param {number} i starting index\n * @returns \n */\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\"){\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < xmlData.length; index++) {\n let ch = xmlData[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";//reset\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === closingChar[0]) {\n if(closingChar[1]){\n if(xmlData[index + 1] === closingChar[1]){\n return {\n data: tagExp,\n index: index\n }\n }\n }else{\n return {\n data: tagExp,\n index: index\n }\n }\n } else if (ch === '\\t') {\n ch = \" \"\n }\n tagExp += ch;\n }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n const closingIndex = xmlData.indexOf(str, i);\n if(closingIndex === -1){\n throw new Error(errMsg)\n }else{\n return closingIndex + str.length - 1;\n }\n}\n\nfunction readTagExp(xmlData,i, removeNSPrefix, closingChar = \">\"){\n const result = tagExpWithClosingIndex(xmlData, i+1, closingChar);\n if(!result) return;\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.search(/\\s/);\n let tagName = tagExp;\n let attrExpPresent = true;\n if(separatorIndex !== -1){//separate tag name and attributes expression\n tagName = tagExp.substring(0, separatorIndex);\n tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n }\n\n const rawTagName = tagName;\n if(removeNSPrefix){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n\n return {\n tagName: tagName,\n tagExp: tagExp,\n closeIndex: closeIndex,\n attrExpPresent: attrExpPresent,\n rawTagName: rawTagName,\n }\n}\n/**\n * find paired tag for a stop node\n * @param {string} xmlData \n * @param {string} tagName \n * @param {number} i \n */\nfunction readStopNodeData(xmlData, tagName, i){\n const startIndex = i;\n // Starting at 1 since we already have an open tag\n let openTagCount = 1;\n\n for (; i < xmlData.length; i++) {\n if( xmlData[i] === \"<\"){ \n if (xmlData[i+1] === \"/\") {//close tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i+2,closeIndex).trim();\n if(closeTagName === tagName){\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i : closeIndex\n }\n }\n }\n i=closeIndex;\n } else if(xmlData[i+1] === '?') { \n const closeIndex = findClosingIndex(xmlData, \"?>\", i+1, \"StopNode is not closed.\")\n i=closeIndex;\n } else if(xmlData.substr(i + 1, 3) === '!--') { \n const closeIndex = findClosingIndex(xmlData, \"-->\", i+3, \"StopNode is not closed.\")\n i=closeIndex;\n } else if(xmlData.substr(i + 1, 2) === '![') { \n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i=closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, '>')\n\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== \"/\") {\n openTagCount++;\n }\n i=tagData.closeIndex;\n }\n }\n }\n }//end for loop\n}\n\nfunction parseValue(val, shouldParse, options) {\n if (shouldParse && typeof val === 'string') {\n //console.log(options)\n const newval = val.trim();\n if(newval === 'true' ) return true;\n else if(newval === 'false' ) return false;\n else return toNumber(val, options);\n } else {\n if (isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\nfunction fromCodePoint(str, base, prefix){\n const codePoint = Number.parseInt(str, base);\n\n if (codePoint >= 0 && codePoint <= 0x10FFFF) {\n return String.fromCodePoint(codePoint);\n } else {\n return prefix +str + \";\";\n }\n}","'use strict';\n\nimport XmlNode from './xmlNode.js';\n\nconst METADATA_SYMBOL = XmlNode.getMetaDataSymbol();\n\n/**\n * \n * @param {array} node \n * @param {any} options \n * @returns \n */\nexport default function prettify(node, options){\n return compress( node, options);\n}\n\n/**\n * \n * @param {array} arr \n * @param {object} options \n * @param {string} jPath \n * @returns object\n */\nfunction compress(arr, options, jPath){\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName(tagObj);\n let newJpath = \"\";\n if(jPath === undefined) newJpath = property;\n else newJpath = jPath + \".\" + property;\n\n if(property === options.textNodeName){\n if(text === undefined) text = tagObj[property];\n else text += \"\" + tagObj[property];\n }else if(property === undefined){\n continue;\n }else if(tagObj[property]){\n \n let val = compress(tagObj[property], options, newJpath);\n const isLeaf = isLeafTag(val, options);\n if (tagObj[METADATA_SYMBOL] !== undefined) {\n val[METADATA_SYMBOL] = tagObj[METADATA_SYMBOL]; // copy over metadata\n }\n\n if(tagObj[\":@\"]){\n assignAttributes( val, tagObj[\":@\"], newJpath, options);\n }else if(Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode){\n val = val[options.textNodeName];\n }else if(Object.keys(val).length === 0){\n if(options.alwaysCreateTextNode) val[options.textNodeName] = \"\";\n else val = \"\";\n }\n\n if(compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {\n if(!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [ compressedObj[property] ];\n }\n compressedObj[property].push(val);\n }else{\n //TODO: if a node is not an array, then check if it should be an array\n //also determine if it is a leaf node\n if (options.isArray(property, newJpath, isLeaf )) {\n compressedObj[property] = [val];\n }else{\n compressedObj[property] = val;\n }\n }\n }\n \n }\n // if(text && text.length > 0) compressedObj[options.textNodeName] = text;\n if(typeof text === \"string\"){\n if(text.length > 0) compressedObj[options.textNodeName] = text;\n }else if(text !== undefined) compressedObj[options.textNodeName] = text;\n return compressedObj;\n}\n\nfunction propName(obj){\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if(key !== \":@\") return key;\n }\n}\n\nfunction assignAttributes(obj, attrMap, jpath, options){\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n obj[atrrName] = [ attrMap[atrrName] ];\n } else {\n obj[atrrName] = attrMap[atrrName];\n }\n }\n }\n}\n\nfunction isLeafTag(obj, options){\n const { textNodeName } = options;\n const propCount = Object.keys(obj).length;\n \n if (propCount === 0) {\n return true;\n }\n\n if (\n propCount === 1 &&\n (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)\n ) {\n return true;\n }\n\n return false;\n}\n","import { buildOptions} from './OptionsBuilder.js';\nimport OrderedObjParser from './OrderedObjParser.js';\nimport prettify from './node2json.js';\nimport {validate} from \"../validator.js\";\nimport XmlNode from './xmlNode.js';\n\nexport default class XMLParser{\n \n constructor(options){\n this.externalEntities = {};\n this.options = buildOptions(options);\n \n }\n /**\n * Parse XML dats to JS object \n * @param {string|Uint8Array} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(xmlData,validationOption){\n if(typeof xmlData !== \"string\" && xmlData.toString){\n xmlData = xmlData.toString();\n }else if(typeof xmlData !== \"string\"){\n throw new Error(\"XML data is accepted in String or Bytes[] form.\")\n }\n \n if( validationOption){\n if(validationOption === true) validationOption = {}; //validate with default options\n \n const result = validate(xmlData, validationOption);\n if (result !== true) {\n throw Error( `${result.err.msg}:${result.err.line}:${result.err.col}` )\n }\n }\n const orderedObjParser = new OrderedObjParser(this.options);\n orderedObjParser.addExternalEntities(this.externalEntities);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n if(this.options.preserveOrder || orderedResult === undefined) return orderedResult;\n else return prettify(orderedResult, this.options);\n }\n\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(key, value){\n if(value.indexOf(\"&\") !== -1){\n throw new Error(\"Entity value can't have '&'\")\n }else if(key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1){\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'\")\n }else if(value === \"&\"){\n throw new Error(\"An entity with value '&' is not permitted\");\n }else{\n this.externalEntities[key] = value;\n }\n }\n\n /**\n * Returns a Symbol that can be used to access the metadata\n * property on a node.\n * \n * If Symbol is not available in the environment, an ordinary property is used\n * and the name of the property is here returned.\n * \n * The XMLMetaData property is only present when `captureMetaData`\n * is true in the options.\n */\n static getMetaDataSymbol() {\n return XmlNode.getMetaDataSymbol();\n }\n}\n","/**\n * JATS XML parser for PMC articles.\n *\n * Parses JATS (Journal Article Tag Suite) XML into an intermediate\n * representation for Markdown conversion.\n *\n * Uses fast-xml-parser with `preserveOrder: true` to maintain document order\n * of interleaved elements (e.g. text, citations, formatting).\n */\nimport { XMLParser } from \"fast-xml-parser\";\nconst parser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: \"@_\",\n textNodeName: \"#text\",\n trimValues: false,\n preserveOrder: true,\n processEntities: true,\n htmlEntities: true,\n});\n// ─── Navigation Helpers ──────────────────────────────────────────────\n/** Get the tag name of an ordered node (the first key that isn't \":@\" or \"#text\"). */\nfunction getTagName(node) {\n for (const key of Object.keys(node)) {\n if (key !== \":@\" && key !== \"#text\")\n return key;\n }\n return undefined;\n}\n/** Get the children array of an element node. */\nfunction getChildren(node) {\n const tag = getTagName(node);\n if (!tag)\n return [];\n const children = node[tag];\n return Array.isArray(children) ? children : [];\n}\n/** Get attributes of an element node. */\nfunction getAttr(node, attrName) {\n const attrs = node[\":@\"];\n if (!attrs)\n return undefined;\n const val = attrs[`@_${attrName}`];\n return val != null ? String(val) : undefined;\n}\n/** Get all attributes of an element node (strips @_ prefix for consistency with getAttr). */\nfunction getAttrs(node) {\n const attrs = node[\":@\"];\n if (!attrs)\n return {};\n const result = {};\n for (const [key, value] of Object.entries(attrs)) {\n if (key.startsWith(\"@_\")) {\n result[key.slice(2)] = String(value);\n }\n }\n return result;\n}\n/** Find the first child element with the given tag name. */\nfunction findChild(children, tagName) {\n for (const child of children) {\n if (tagName in child) {\n const childArr = child[tagName];\n return {\n node: child,\n children: Array.isArray(childArr) ? childArr : [],\n attrs: getAttrs(child),\n };\n }\n }\n return undefined;\n}\n/** Find all child elements with the given tag name. */\nfunction findChildren(children, tagName) {\n const results = [];\n for (const child of children) {\n if (tagName in child) {\n const childArr = child[tagName];\n results.push({\n node: child,\n children: Array.isArray(childArr) ? childArr : [],\n attrs: getAttrs(child),\n });\n }\n }\n return results;\n}\n/** Get text content from a #text node. */\nfunction getTextContent(child) {\n if (\"#text\" in child) {\n const val = child[\"#text\"];\n return val != null ? String(val) : undefined;\n }\n return undefined;\n}\n/**\n * Find the <article> element, handling optional <pmc-articleset> wrapper\n * that appears in efetch responses.\n */\nfunction findArticle(parsed) {\n const direct = findChild(parsed, \"article\");\n if (direct)\n return direct;\n const wrapper = findChild(parsed, \"pmc-articleset\");\n if (wrapper)\n return findChild(wrapper.children, \"article\");\n return undefined;\n}\n// ─── Text Extraction ─────────────────────────────────────────────────\n/** Tags whose text content should be followed by a space when adjacent to other content. */\nconst SPACE_AFTER_TAGS = new Set([\"surname\", \"given-names\", \"name\", \"string-name\"]);\n/**\n * Extract plain text from a node that may contain nested elements.\n * Recursively collects all text content from preserveOrder nodes.\n *\n * When extracting text from inline container elements (e.g. `<name>`,\n * `<string-name>`), inserts a space between adjacent child elements\n * that would otherwise concatenate without whitespace (e.g.\n * `<surname>McGuire</surname><given-names>N</given-names>` → `McGuire N`).\n */\nfunction extractAllText(node) {\n if (node == null)\n return \"\";\n if (typeof node === \"string\")\n return node;\n if (typeof node === \"number\")\n return String(node);\n if (Array.isArray(node)) {\n return joinChildTexts(node);\n }\n if (typeof node === \"object\") {\n const obj = node;\n // Text node\n const text = getTextContent(obj);\n if (text != null)\n return text;\n // Element node — recurse into children\n const tag = getTagName(obj);\n if (tag) {\n const children = obj[tag];\n if (Array.isArray(children)) {\n return joinChildTexts(children);\n }\n }\n }\n return \"\";\n}\n/**\n * Join extracted text from an array of child nodes, inserting spaces\n * between adjacent inline elements where no whitespace separator exists.\n */\nfunction joinChildTexts(children) {\n const parts = [];\n for (const child of children) {\n const text = extractAllText(child);\n if (!text)\n continue;\n const tag = getTagName(child);\n // If this is a space-after tag and there's previous content that doesn't\n // end with whitespace or punctuation, insert a space before this text.\n if (tag && SPACE_AFTER_TAGS.has(tag) && parts.length > 0) {\n const prev = parts.at(-1);\n if (prev && !/[\\s,;.:()\\-/]$/.test(prev)) {\n parts.push(\" \");\n }\n }\n parts.push(text);\n // If this is a space-after tag, check if a space is needed after.\n // We handle this by peeking: space will be inserted before the next\n // element if needed (handled above). But we also need to handle\n // the case where the next sibling is a text node starting without space.\n // That's already handled since text nodes include their own whitespace.\n }\n return parts.join(\"\");\n}\n// ─── Metadata Parsing ────────────────────────────────────────────────\n/** Extract DOI, PMCID, and PMID from article-id elements. */\nfunction parseArticleIds(metaChildren) {\n const articleIds = findChildren(metaChildren, \"article-id\");\n const result = {};\n for (const idEntry of articleIds) {\n const idType = idEntry.attrs[\"pub-id-type\"];\n const idText = extractAllText(idEntry.children);\n if (idType === \"doi\")\n result.doi = idText;\n if (idType === \"pmc\" || idType === \"pmcid\") {\n result.pmcid = idText.replace(/^PMC/, \"\");\n }\n if (idType === \"pmid\")\n result.pmid = idText;\n }\n return result;\n}\n/** Extract authors from contrib-group. */\nfunction parseAuthors(metaChildren) {\n const authors = [];\n const contribGroup = findChild(metaChildren, \"contrib-group\");\n if (!contribGroup)\n return authors;\n const contribs = findChildren(contribGroup.children, \"contrib\");\n for (const contrib of contribs) {\n if (contrib.attrs[\"contrib-type\"] !== \"author\")\n continue;\n const nameNode = findChild(contrib.children, \"name\");\n if (!nameNode)\n continue;\n const surnameNode = findChild(nameNode.children, \"surname\");\n const givenNamesNode = findChild(nameNode.children, \"given-names\");\n const author = {\n surname: surnameNode ? extractAllText(surnameNode.children) : \"\",\n };\n const givenNames = givenNamesNode ? extractAllText(givenNamesNode.children) : \"\";\n if (givenNames) {\n author.givenNames = givenNames;\n }\n authors.push(author);\n }\n return authors;\n}\n/** Extract abstract text, handling both structured and simple formats. */\nfunction parseAbstract(metaChildren) {\n const abstractNode = findChild(metaChildren, \"abstract\");\n if (!abstractNode)\n return undefined;\n // Structured abstract with <sec> elements\n const sections = findChildren(abstractNode.children, \"sec\");\n if (sections.length > 0) {\n return parseStructuredAbstract(sections);\n }\n // Simple abstract with <p>\n const paragraphs = findChildren(abstractNode.children, \"p\");\n if (paragraphs.length > 0) {\n return paragraphs.map((p) => extractAllText(p.children)).join(\"\\n\\n\");\n }\n const text = extractAllText(abstractNode.children);\n return text || undefined;\n}\n/** Parse a structured abstract with <sec> elements. */\nfunction parseStructuredAbstract(sections) {\n const parts = [];\n for (const sec of sections) {\n const secTitleNode = findChild(sec.children, \"title\");\n const secTitle = secTitleNode ? extractAllText(secTitleNode.children) : \"\";\n const secPs = findChildren(sec.children, \"p\");\n const text = secPs.map((p) => extractAllText(p.children)).join(\" \");\n parts.push(secTitle ? `${secTitle}: ${text}` : text);\n }\n return parts.join(\"\\n\\n\");\n}\n/** Extract a date from a pub-date node. */\nfunction extractDateFromNode(pd) {\n const yearNode = findChild(pd.children, \"year\");\n if (!yearNode)\n return undefined;\n const year = extractAllText(yearNode.children);\n const monthNode = findChild(pd.children, \"month\");\n const dayNode = findChild(pd.children, \"day\");\n const date = { year };\n if (monthNode)\n date.month = extractAllText(monthNode.children);\n if (dayNode)\n date.day = extractAllText(dayNode.children);\n return date;\n}\n/**\n * Extract publication date with priority: epub > ppub > collection > any other.\n * Falls back to first available date if none match priority.\n */\nfunction parsePublicationDate(metaChildren) {\n const pubDates = findChildren(metaChildren, \"pub-date\");\n const datePriority = { epub: 0, ppub: 1, collection: 2 };\n let bestPriority = Number.POSITIVE_INFINITY;\n let publicationDate;\n for (const pd of pubDates) {\n const dateType = pd.attrs[\"pub-type\"] ?? pd.attrs[\"date-type\"] ?? \"\";\n const priority = datePriority[dateType] ?? 3;\n if (priority < bestPriority) {\n bestPriority = priority;\n publicationDate = extractDateFromNode(pd);\n }\n }\n // If no prioritized date found, take first available\n if (!publicationDate && pubDates.length > 0) {\n const pd = pubDates.at(0);\n if (pd) {\n publicationDate = extractDateFromNode(pd);\n }\n }\n return publicationDate;\n}\n/** Extract license information from permissions. */\nfunction parseLicense(metaChildren) {\n const permissions = findChild(metaChildren, \"permissions\");\n if (!permissions)\n return undefined;\n const licenseNode = findChild(permissions.children, \"license\");\n if (!licenseNode)\n return undefined;\n // Prefer @xlink:href (standardized URL) over <license-p> (free-text)\n const href = licenseNode.attrs[\"xlink:href\"];\n if (href)\n return href;\n const licenseP = findChild(licenseNode.children, \"license-p\");\n if (licenseP)\n return extractAllText(licenseP.children).trim();\n return undefined;\n}\n/** Extract keywords from all kwd-group elements. */\nfunction parseKeywords(metaChildren) {\n const kwdGroups = findChildren(metaChildren, \"kwd-group\");\n const keywords = [];\n for (const kwdGroup of kwdGroups) {\n const kwds = findChildren(kwdGroup.children, \"kwd\");\n for (const kwd of kwds) {\n const text = extractAllText(kwd.children).trim();\n if (text)\n keywords.push(text);\n }\n }\n return keywords;\n}\n/** Extract volume, issue, and pages from article meta. */\nfunction parseVolumeAndPages(metaChildren) {\n const volumeNode = findChild(metaChildren, \"volume\");\n const volume = volumeNode ? extractAllText(volumeNode.children) : undefined;\n const issueNode = findChild(metaChildren, \"issue\");\n const issue = issueNode ? extractAllText(issueNode.children) : undefined;\n let pages;\n const fpageNode = findChild(metaChildren, \"fpage\");\n const lpageNode = findChild(metaChildren, \"lpage\");\n if (fpageNode) {\n const fp = extractAllText(fpageNode.children);\n const lp = lpageNode ? extractAllText(lpageNode.children) : \"\";\n pages = lp ? `${fp}-${lp}` : fp;\n }\n else {\n const elocationNode = findChild(metaChildren, \"elocation-id\");\n if (elocationNode)\n pages = extractAllText(elocationNode.children);\n }\n const result = {};\n if (volume !== undefined)\n result.volume = volume;\n if (issue !== undefined)\n result.issue = issue;\n if (pages !== undefined)\n result.pages = pages;\n return result;\n}\n/** Extract journal name from front matter journal-meta. */\nfunction parseJournalName(frontChildren) {\n const journalMeta = findChild(frontChildren, \"journal-meta\");\n if (!journalMeta)\n return undefined;\n const titleGroup = findChild(journalMeta.children, \"journal-title-group\");\n if (titleGroup) {\n const jTitle = findChild(titleGroup.children, \"journal-title\");\n if (jTitle)\n return extractAllText(jTitle.children);\n }\n const jTitle = findChild(journalMeta.children, \"journal-title\");\n if (jTitle)\n return extractAllText(jTitle.children);\n return undefined;\n}\n/** Extract article title from title-group. */\nfunction parseArticleTitle(metaChildren) {\n const titleGroup = findChild(metaChildren, \"title-group\");\n const articleTitle = titleGroup ? findChild(titleGroup.children, \"article-title\") : undefined;\n return articleTitle ? extractAllText(articleTitle.children) : \"\";\n}\n/** Assemble optional metadata fields into a JatsMetadata result. */\nfunction assembleMetadata(base, fields) {\n const result = { ...base };\n if (fields.doi)\n result.doi = fields.doi;\n if (fields.pmcid)\n result.pmcid = fields.pmcid;\n if (fields.pmid)\n result.pmid = fields.pmid;\n if (fields.journal)\n result.journal = fields.journal;\n if (fields.publicationDate)\n result.publicationDate = fields.publicationDate;\n if (fields.volume)\n result.volume = fields.volume;\n if (fields.issue)\n result.issue = fields.issue;\n if (fields.pages)\n result.pages = fields.pages;\n if (fields.keywords.length > 0)\n result.keywords = fields.keywords;\n if (fields.articleType)\n result.articleType = fields.articleType;\n if (fields.license)\n result.license = fields.license;\n if (fields.abstract)\n result.abstract = fields.abstract;\n return result;\n}\n/**\n * Parse JATS XML front matter to extract article metadata.\n */\nexport function parseJatsMetadata(xml) {\n const parsed = parser.parse(xml);\n const article = findArticle(parsed);\n if (!article)\n return { title: \"\", authors: [] };\n const front = findChild(article.children, \"front\");\n if (!front)\n return { title: \"\", authors: [] };\n const articleMeta = findChild(front.children, \"article-meta\");\n if (!articleMeta)\n return { title: \"\", authors: [] };\n const metaChildren = articleMeta.children;\n const journal = parseJournalName(front.children);\n const publicationDate = parsePublicationDate(metaChildren);\n const articleType = article.attrs[\"article-type\"] || undefined;\n const license = parseLicense(metaChildren);\n const abstract = parseAbstract(metaChildren);\n return assembleMetadata({ title: parseArticleTitle(metaChildren), authors: parseAuthors(metaChildren) }, {\n ...parseArticleIds(metaChildren),\n ...(journal !== undefined ? { journal } : {}),\n ...(publicationDate !== undefined ? { publicationDate } : {}),\n ...parseVolumeAndPages(metaChildren),\n keywords: parseKeywords(metaChildren),\n ...(articleType !== undefined ? { articleType } : {}),\n ...(license !== undefined ? { license } : {}),\n ...(abstract !== undefined ? { abstract } : {}),\n });\n}\n// ─── Inline Content Parsing ──────────────────────────────────────────\n/** Handle <inline-formula> tag. */\nfunction handleInlineFormula(innerChildren) {\n // Try to find <tex-math> directly or inside <alternatives>\n let texMath = findChild(innerChildren, \"tex-math\");\n if (!texMath) {\n const alternatives = findChild(innerChildren, \"alternatives\");\n if (alternatives) {\n texMath = findChild(alternatives.children, \"tex-math\");\n }\n }\n const tex = texMath ? extractAllText(texMath.children) : undefined;\n const text = tex || extractAllText(innerChildren);\n const entry = {\n type: \"inline-formula\",\n text,\n };\n if (tex)\n entry.tex = tex;\n return entry;\n}\n/** Handle <ext-link> tag. */\nfunction handleExtLink(child, innerChildren) {\n const href = getAttr(child, \"xlink:href\");\n if (href) {\n return { type: \"link\", url: href, children: parseInlineContent(innerChildren) };\n }\n const linkText = extractAllText(innerChildren);\n if (linkText)\n return { type: \"text\", text: linkText };\n return null;\n}\n/** Handle <uri> tag. */\nfunction handleUri(child, innerChildren) {\n const href = getAttr(child, \"xlink:href\");\n const textContent = extractAllText(innerChildren);\n const url = href || textContent;\n if (url) {\n return { type: \"link\", url, children: parseInlineContent(innerChildren) };\n }\n return null;\n}\n/** Handle <xref> tag. */\nfunction handleXref(child, innerChildren) {\n const refType = getAttr(child, \"ref-type\");\n if (refType === \"bibr\") {\n return {\n type: \"citation\",\n refId: getAttr(child, \"rid\") ?? \"\",\n text: extractAllText(innerChildren),\n };\n }\n const xrefText = extractAllText(innerChildren);\n if (xrefText)\n return { type: \"text\", text: xrefText };\n return null;\n}\n/** Map of tag names to their inline content handlers. */\nconst inlineTagHandlers = {\n bold: (_child, innerChildren) => ({\n type: \"bold\",\n children: parseInlineContent(innerChildren),\n }),\n italic: (_child, innerChildren) => ({\n type: \"italic\",\n children: parseInlineContent(innerChildren),\n }),\n sup: (_child, innerChildren) => ({\n type: \"superscript\",\n text: extractAllText(innerChildren),\n }),\n sub: (_child, innerChildren) => ({\n type: \"subscript\",\n text: extractAllText(innerChildren),\n }),\n \"inline-formula\": (_child, innerChildren) => handleInlineFormula(innerChildren),\n monospace: (_child, innerChildren) => ({\n type: \"code\",\n text: extractAllText(innerChildren),\n }),\n \"ext-link\": (child, innerChildren) => handleExtLink(child, innerChildren),\n uri: (child, innerChildren) => handleUri(child, innerChildren),\n underline: (_child, innerChildren) => {\n const passText = extractAllText(innerChildren);\n return passText ? { type: \"text\", text: passText } : null;\n },\n sc: (_child, innerChildren) => {\n const passText = extractAllText(innerChildren);\n return passText ? { type: \"text\", text: passText } : null;\n },\n xref: (child, innerChildren) => handleXref(child, innerChildren),\n};\n/** Process a single inline child node into an InlineContent, or return null. */\nfunction processInlineChild(child) {\n // Text node\n const text = getTextContent(child);\n if (text != null) {\n return text ? { type: \"text\", text } : null;\n }\n const tag = getTagName(child);\n if (!tag)\n return null;\n const innerChildren = getChildren(child);\n const handler = inlineTagHandlers[tag];\n if (handler)\n return handler(child, innerChildren);\n // Unknown inline element -- extract text\n const unknownText = extractAllText(innerChildren);\n return unknownText ? { type: \"text\", text: unknownText } : null;\n}\n/**\n * Parse inline content from a paragraph's children array.\n * Iterates in document order to preserve interleaving of text, citations,\n * and formatting elements.\n */\nfunction parseInlineContent(children) {\n const result = [];\n for (const child of children) {\n const content = processInlineChild(child);\n if (content)\n result.push(content);\n }\n return result;\n}\n// ─── Block Content Parsing ───────────────────────────────────────────\n/**\n * Parse a <list> element into a BlockElement.\n */\nfunction parseList(listNode) {\n const listType = getAttr(listNode, \"list-type\");\n const ordered = listType === \"order\";\n const listChildren = getChildren(listNode);\n const listItems = findChildren(listChildren, \"list-item\");\n const items = [];\n for (const item of listItems) {\n const pNodes = findChildren(item.children, \"p\");\n const content = pNodes.flatMap((p) => parseInlineContent(p.children));\n items.push(content);\n }\n return { type: \"list\", ordered, items };\n}\n/**\n * Parse a table row into an array of cell text content.\n */\nfunction parseTableRow(trChildren) {\n const cells = [];\n for (const child of trChildren) {\n const tag = getTagName(child);\n if (tag === \"th\" || tag === \"td\") {\n const cellChildren = getChildren(child);\n // Check if cell contains multiple <p> elements\n const paragraphs = findChildren(cellChildren, \"p\");\n if (paragraphs.length > 1) {\n cells.push(paragraphs.map((p) => extractAllText(p.children)).join(\"<br>\"));\n }\n else {\n cells.push(extractAllText(cellChildren));\n }\n }\n }\n return cells;\n}\n/**\n * Parse an already-parsed table-wrap node.\n */\nfunction parseTableWrap(tableWrapNode) {\n const children = getChildren(tableWrapNode);\n // Caption\n const labelNode = findChild(children, \"label\");\n const label = labelNode ? extractAllText(labelNode.children) : \"\";\n const captionNode = findChild(children, \"caption\");\n const captionText = captionNode ? extractAllText(captionNode.children) : \"\";\n const captionStr = [label, captionText].filter(Boolean).join(\". \");\n const tableNode = findChild(children, \"table\");\n const result = {\n headers: [],\n rows: [],\n };\n if (captionStr)\n result.caption = captionStr;\n if (!tableNode)\n return result;\n // Headers from thead\n const thead = findChild(tableNode.children, \"thead\");\n if (thead) {\n const headRows = findChildren(thead.children, \"tr\");\n if (headRows.length > 0) {\n result.headers.push(...parseTableRow(headRows[0]?.children ?? []));\n }\n }\n // Body rows\n const tbody = findChild(tableNode.children, \"tbody\");\n if (tbody) {\n const bodyRows = findChildren(tbody.children, \"tr\");\n for (const row of bodyRows) {\n result.rows.push(parseTableRow(row.children));\n }\n }\n return result;\n}\n/**\n * Parse a <table-wrap> element into a table block.\n * Exported for standalone use and used internally by parseBlockContent.\n */\nexport function parseJatsTable(xml) {\n const parsed = parser.parse(xml);\n const tableWrap = findChild(parsed, \"table-wrap\");\n if (tableWrap) {\n return parseTableWrap(tableWrap.node);\n }\n // Fallback: if not wrapped, try to find table directly\n return { headers: [], rows: [] };\n}\n/**\n * Parse a <boxed-text> element into a boxed-text block.\n * Extracts optional title and recursively parses inner block content.\n */\nfunction parseBoxedText(node) {\n const children = getChildren(node);\n const titleNode = findChild(children, \"title\");\n const title = titleNode ? extractAllText(titleNode.children) : undefined;\n const content = parseBlockContent(children);\n const block = { type: \"boxed-text\", content };\n if (title)\n block.title = title;\n return block;\n}\n/**\n * Parse a <def-list> element into a def-list block.\n * Extracts optional title and <def-item> pairs with <term> and <def>.\n */\nfunction parseDefList(node) {\n const children = getChildren(node);\n const titleNode = findChild(children, \"title\");\n const title = titleNode ? extractAllText(titleNode.children) : undefined;\n const defItems = findChildren(children, \"def-item\");\n const items = [];\n for (const item of defItems) {\n const termNode = findChild(item.children, \"term\");\n const defNode = findChild(item.children, \"def\");\n const term = termNode ? extractAllText(termNode.children) : \"\";\n const definition = defNode ? extractAllText(defNode.children) : \"\";\n items.push({ term, definition });\n }\n const block = { type: \"def-list\", items };\n if (title)\n block.title = title;\n return block;\n}\n/**\n * Parse a <disp-formula> element into a formula block.\n * Extracts TeX content from <tex-math> preferentially (inside <alternatives> or direct),\n * falls back to extractAllText for plain text.\n */\nfunction parseDispFormula(node) {\n const children = getChildren(node);\n const id = getAttr(node, \"id\");\n const labelNode = findChild(children, \"label\");\n const label = labelNode ? extractAllText(labelNode.children) : undefined;\n // Try <alternatives> wrapper first\n const alternatives = findChild(children, \"alternatives\");\n const searchChildren = alternatives ? alternatives.children : children;\n const texMath = findChild(searchChildren, \"tex-math\");\n const block = { type: \"formula\" };\n if (id)\n block.id = id;\n if (label)\n block.label = label;\n if (texMath) {\n block.tex = extractAllText(texMath.children);\n }\n else {\n // Fall back to plain text extraction (skip label)\n const textChildren = children.filter((c) => !(\"label\" in c));\n const text = extractAllText(textChildren).trim();\n if (text)\n block.text = text;\n }\n return block;\n}\n/** Tags that represent block-level elements when nested inside <p>. */\nconst BLOCK_TAGS = new Set([\"table-wrap\", \"fig\", \"disp-quote\", \"boxed-text\"]);\n/**\n * Parse a <disp-quote> element into a blockquote block.\n * Extracts <p> children and concatenates their inline content.\n */\nfunction parseDispQuote(node) {\n const children = getChildren(node);\n const paragraphs = findChildren(children, \"p\");\n const content = [];\n for (let i = 0; i < paragraphs.length; i++) {\n if (i > 0)\n content.push({ type: \"text\", text: \"\\n\\n\" });\n const para = paragraphs[i];\n if (para)\n content.push(...parseInlineContent(para.children));\n }\n // If no <p> children, extract inline content directly\n if (paragraphs.length === 0) {\n content.push(...parseInlineContent(children));\n }\n return { type: \"blockquote\", content };\n}\n/**\n * Parse a <table-wrap> node into a table block element.\n */\nfunction parseTableBlock(node) {\n const tableResult = parseTableWrap(node);\n const tableBlock = {\n type: \"table\",\n headers: tableResult.headers,\n rows: tableResult.rows,\n };\n if (tableResult.caption)\n tableBlock.caption = tableResult.caption;\n return tableBlock;\n}\n/**\n * Parse a <fig> node into a figure block element.\n */\nfunction parseFigBlock(node) {\n const innerChildren = getChildren(node);\n const figBlock = { type: \"figure\" };\n const figId = getAttr(node, \"id\");\n if (figId)\n figBlock.id = figId;\n const figLabel = findChild(innerChildren, \"label\");\n if (figLabel) {\n const labelText = extractAllText(figLabel.children);\n if (labelText)\n figBlock.label = labelText;\n }\n const figCaption = findChild(innerChildren, \"caption\");\n if (figCaption) {\n const captionText = extractAllText(figCaption.children);\n if (captionText)\n figBlock.caption = captionText;\n }\n return figBlock;\n}\n/**\n * Parse a <p> element, splitting it if it contains nested block elements\n * (table-wrap, fig, disp-quote). Returns one or more block elements.\n */\nfunction parseParagraph(pChildren) {\n // Check if <p> contains any nested block elements\n const hasNestedBlocks = pChildren.some((child) => {\n const tag = getTagName(child);\n return tag != null && BLOCK_TAGS.has(tag);\n });\n if (!hasNestedBlocks) {\n return [{ type: \"paragraph\", content: parseInlineContent(pChildren) }];\n }\n // Split into inline runs and block elements\n const blocks = [];\n let inlineBuffer = [];\n const flushInline = () => {\n if (inlineBuffer.length > 0) {\n const content = parseInlineContent(inlineBuffer);\n // Skip whitespace-only paragraphs created by XML formatting\n const hasNonWhitespace = content.some((c) => c.type !== \"text\" || c.text.trim() !== \"\");\n if (content.length > 0 && hasNonWhitespace) {\n blocks.push({ type: \"paragraph\", content });\n }\n inlineBuffer = [];\n }\n };\n for (const child of pChildren) {\n const tag = getTagName(child);\n if (tag === \"table-wrap\") {\n flushInline();\n blocks.push(parseTableBlock(child));\n }\n else if (tag === \"fig\") {\n flushInline();\n blocks.push(parseFigBlock(child));\n }\n else if (tag === \"disp-quote\") {\n flushInline();\n blocks.push(parseDispQuote(child));\n }\n else if (tag === \"boxed-text\") {\n flushInline();\n blocks.push(parseBoxedText(child));\n }\n else {\n inlineBuffer.push(child);\n }\n }\n flushInline();\n return blocks;\n}\n/** Parse a <supplementary-material> element into a paragraph block. */\nfunction parseSupplementaryMaterial(child) {\n const innerChildren = getChildren(child);\n const labelNode = findChild(innerChildren, \"label\");\n const captionNode = findChild(innerChildren, \"caption\");\n const labelText = labelNode ? extractAllText(labelNode.children) : \"\";\n const captionText = captionNode ? extractAllText(captionNode.children) : \"\";\n const text = [labelText, captionText].filter(Boolean).join(\": \");\n if (text) {\n return { type: \"paragraph\", content: [{ type: \"text\", text }] };\n }\n return null;\n}\n/** Map of tag names to their block content handlers. */\nconst blockTagHandlers = {\n p: (child) => parseParagraph(getChildren(child)),\n list: (child) => parseList(child),\n \"table-wrap\": (child) => parseTableBlock(child),\n fig: (child) => parseFigBlock(child),\n \"disp-quote\": (child) => parseDispQuote(child),\n \"boxed-text\": (child) => parseBoxedText(child),\n \"def-list\": (child) => parseDefList(child),\n \"disp-formula\": (child) => parseDispFormula(child),\n preformat: (child) => ({ type: \"preformat\", text: extractAllText(getChildren(child)) }),\n \"supplementary-material\": (child) => parseSupplementaryMaterial(child),\n};\n/**\n * Parse block-level content from a section's children.\n * Iterates in document order to preserve ordering of paragraphs, lists,\n * tables, figures, and blockquotes.\n */\nfunction parseBlockContent(sectionChildren) {\n const blocks = [];\n for (const child of sectionChildren) {\n const tag = getTagName(child);\n if (!tag)\n continue;\n const handler = blockTagHandlers[tag];\n if (!handler)\n continue;\n const result = handler(child);\n if (result == null)\n continue;\n if (Array.isArray(result)) {\n blocks.push(...result);\n }\n else {\n blocks.push(result);\n }\n }\n return blocks;\n}\n// ─── Section Parsing ─────────────────────────────────────────────────\n/**\n * Parse a <sec> element into a JatsSection, recursively handling subsections.\n */\nfunction parseSection(secChildren, level) {\n const titleNode = findChild(secChildren, \"title\");\n const title = titleNode ? extractAllText(titleNode.children) : \"\";\n const content = parseBlockContent(secChildren);\n // Nested sections\n const subsections = [];\n const nestedSecs = findChildren(secChildren, \"sec\");\n for (const sub of nestedSecs) {\n subsections.push(parseSection(sub.children, level + 1));\n }\n return { title, level, content, subsections };\n}\n/** Flush buffered block nodes as an untitled section if non-empty. */\nfunction flushBlockBuffer(buffer, sections) {\n const content = parseBlockContent(buffer);\n if (content.length > 0) {\n sections.push({ title: \"\", level: 2, content, subsections: [] });\n }\n}\n/** Parse mixed body children (interleaved <p> and <sec>) in document order. */\nfunction parseMixedBodyChildren(children, sections) {\n let blockBuffer = [];\n for (const child of children) {\n if (getTagName(child) === \"sec\") {\n if (blockBuffer.length > 0) {\n flushBlockBuffer(blockBuffer, sections);\n blockBuffer = [];\n }\n sections.push(parseSection(getChildren(child), 2));\n }\n else {\n blockBuffer.push(child);\n }\n }\n if (blockBuffer.length > 0) {\n flushBlockBuffer(blockBuffer, sections);\n }\n}\n/**\n * Parse JATS XML body to extract sections and content.\n */\nexport function parseJatsBody(xml) {\n const parsed = parser.parse(xml);\n const article = findArticle(parsed);\n if (!article)\n return [];\n const body = findChild(article.children, \"body\");\n if (!body)\n return [];\n const sections = [];\n const secs = findChildren(body.children, \"sec\");\n if (secs.length > 0) {\n parseMixedBodyChildren(body.children, sections);\n }\n else {\n flushBlockBuffer(body.children, sections);\n }\n return sections;\n}\n// ─── Reference Parsing ───────────────────────────────────────────────\n/** Extract authors from a <person-group> element. */\nfunction extractCitationAuthors(children) {\n const personGroup = findChild(children, \"person-group\");\n if (!personGroup)\n return undefined;\n const names = findChildren(personGroup.children, \"name\");\n const authorParts = [];\n for (const name of names) {\n const surname = findChild(name.children, \"surname\");\n const givenNames = findChild(name.children, \"given-names\");\n const surnameText = surname ? extractAllText(surname.children) : \"\";\n const givenText = givenNames ? extractAllText(givenNames.children) : \"\";\n if (surnameText && givenText) {\n authorParts.push(`${surnameText} ${givenText}`);\n }\n else if (surnameText) {\n authorParts.push(surnameText);\n }\n }\n return authorParts.length > 0 ? authorParts.join(\", \") : undefined;\n}\n/** Format year, volume, and pages into a citation string part. */\nfunction formatYearVolumePage(children) {\n const year = findChild(children, \"year\");\n if (!year)\n return undefined;\n let yearStr = extractAllText(year.children);\n const volume = findChild(children, \"volume\");\n if (volume) {\n yearStr += `;${extractAllText(volume.children)}`;\n }\n const fpage = findChild(children, \"fpage\");\n if (fpage) {\n const fpageText = extractAllText(fpage.children);\n const lpage = findChild(children, \"lpage\");\n const lpageText = lpage ? extractAllText(lpage.children) : \"\";\n yearStr += `:${fpageText}${lpageText ? `-${lpageText}` : \"\"}`;\n }\n return yearStr;\n}\n/**\n * Format a structured <element-citation> into a readable reference string.\n * Produces: \"Author1, Author2. Title. Source. Year;Volume:FirstPage-LastPage.\"\n */\nfunction formatElementCitation(children) {\n const parts = [];\n const authorsStr = extractCitationAuthors(children);\n if (authorsStr)\n parts.push(authorsStr);\n // Article title\n const articleTitle = findChild(children, \"article-title\");\n if (articleTitle) {\n parts.push(extractAllText(articleTitle.children));\n }\n // Source (journal name)\n const source = findChild(children, \"source\");\n if (source) {\n parts.push(extractAllText(source.children));\n }\n // Year, volume, pages\n const yearVolumePage = formatYearVolumePage(children);\n if (yearVolumePage)\n parts.push(yearVolumePage);\n return `${parts.join(\". \")}.`;\n}\n/**\n * Extract text from a <mixed-citation>'s children, deduplicating any\n * <pub-id> content that also appears as inline text.\n *\n * Some publishers include the DOI/PMID both as a text node and inside\n * a <pub-id> element, causing duplication like \"10.1234/x 10.1234/x\".\n */\nfunction extractMixedCitationText(children) {\n // Collect pub-id values\n const pubIds = findChildren(children, \"pub-id\");\n const pubIdValues = pubIds.map((p) => extractAllText(p.children).trim()).filter(Boolean);\n if (pubIdValues.length === 0) {\n return extractAllText(children).trim();\n }\n // Extract full text\n const fullText = extractAllText(children).trim();\n // For each pub-id value, if it appears more than once, remove extra occurrences\n let result = fullText;\n for (const val of pubIdValues) {\n // Escape regex special characters\n const escaped = val.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const matches = result.match(new RegExp(escaped, \"g\"));\n if (matches && matches.length > 1) {\n // Remove the first occurrence (typically the inline text), keep the last (pub-id element)\n result = result.replace(val, \"\");\n // Clean up any leftover extra whitespace\n result = result.replace(/\\s{2,}/g, \" \").trim();\n }\n }\n return result;\n}\n/**\n * Extract structured pub-id values (DOI, PMID, PMCID) from children nodes.\n */\nfunction extractPubIds(children) {\n const pubIds = findChildren(children, \"pub-id\");\n const result = {};\n for (const p of pubIds) {\n const idType = p.attrs[\"pub-id-type\"];\n const value = extractAllText(p.children).trim();\n if (!value)\n continue;\n if (idType === \"doi\")\n result.doi = value;\n if (idType === \"pmid\")\n result.pmid = value;\n if (idType === \"pmc\" || idType === \"pmcid\") {\n result.pmcid = value.replace(/^PMC/, \"\");\n }\n }\n return result;\n}\n/**\n * Strip extracted pub-id values from reference text to avoid duplication\n * when pub-ids are rendered separately as links.\n */\nfunction stripPubIdValues(text, pubIds) {\n let result = text;\n const values = [pubIds.doi, pubIds.pmid, pubIds.pmcid].filter(Boolean);\n for (const val of values) {\n // Strip common label prefixes (e.g. \"doi: \", \"PMID: \", \"DOI:\", \"pmid:\") followed by the value\n const escaped = val.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n result = result.replace(new RegExp(`(?:doi|PMID|pmid|PMC|pmc)[:\\\\s]*${escaped}`, \"gi\"), \"\");\n // Also strip the bare value itself\n result = result.replace(new RegExp(escaped, \"g\"), \"\");\n }\n // Also strip PMC-prefixed form of pmcid\n if (pubIds.pmcid) {\n const pmcFull = `PMC${pubIds.pmcid}`;\n const escaped = pmcFull.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n result = result.replace(new RegExp(`(?:pmc|pmcid)[:\\\\s]*${escaped}`, \"gi\"), \"\");\n result = result.replace(new RegExp(escaped, \"g\"), \"\");\n }\n // Clean up trailing/leading whitespace and extra spaces\n result = result.replace(/\\s{2,}/g, \" \").trim();\n // Clean up trailing period after stripped content (e.g. \"Title. .\" -> \"Title.\")\n result = result.replace(/\\.\\s*\\.$/, \".\");\n return result;\n}\n/** Parse a single <ref> element into a JatsReference, or return null if invalid. */\nfunction parseSingleReference(ref) {\n const id = getAttr(ref.node, \"id\") ?? \"\";\n // Determine the search scope: if <citation-alternatives> exists, search within it;\n // otherwise search direct children of <ref>\n const citationAlternatives = findChild(ref.children, \"citation-alternatives\");\n const searchChildren = citationAlternatives ? citationAlternatives.children : ref.children;\n // Try mixed-citation first (already formatted), then element-citation (structured)\n const mixedCitation = findChild(searchChildren, \"mixed-citation\");\n if (mixedCitation) {\n const rawText = extractMixedCitationText(mixedCitation.children);\n const pubIds = extractPubIds(mixedCitation.children);\n const text = stripPubIdValues(rawText, pubIds);\n if (id && text)\n return { id, text, ...pubIds };\n return null;\n }\n const elementCitation = findChild(searchChildren, \"element-citation\");\n if (elementCitation) {\n const rawText = formatElementCitation(elementCitation.children);\n const pubIds = extractPubIds(elementCitation.children);\n const text = stripPubIdValues(rawText, pubIds);\n if (id && text)\n return { id, text, ...pubIds };\n return null;\n }\n // Fallback: extract all text from ref, skipping <label>\n const childrenWithoutLabel = ref.children.filter((c) => !(\"label\" in c));\n const text = extractAllText(childrenWithoutLabel).trim();\n if (id && text)\n return { id, text };\n return null;\n}\n/**\n * Parse JATS XML back matter to extract references.\n */\nexport function parseJatsReferences(xml) {\n const parsed = parser.parse(xml);\n const article = findArticle(parsed);\n if (!article)\n return [];\n const back = findChild(article.children, \"back\");\n if (!back)\n return [];\n const refList = findChild(back.children, \"ref-list\");\n if (!refList)\n return [];\n const refs = findChildren(refList.children, \"ref\");\n const references = [];\n for (const ref of refs) {\n const reference = parseSingleReference(ref);\n if (reference)\n references.push(reference);\n }\n return references;\n}\n/** Parse acknowledgments from <ack> element. */\nfunction parseAcknowledgments(backChildren) {\n const ack = findChild(backChildren, \"ack\");\n if (!ack)\n return undefined;\n const paragraphs = findChildren(ack.children, \"p\");\n if (paragraphs.length > 0) {\n return paragraphs.map((p) => extractAllText(p.children)).join(\"\\n\\n\");\n }\n return undefined;\n}\n/** Parse appendices from <app-group>/<app> elements. */\nfunction parseAppendices(backChildren) {\n const appGroup = findChild(backChildren, \"app-group\");\n if (!appGroup)\n return undefined;\n const apps = findChildren(appGroup.children, \"app\");\n if (apps.length === 0)\n return undefined;\n return apps.map((app) => parseSection(app.children, 2));\n}\n/** Parse a single footnote element into a JatsFootnote. */\nfunction parseSingleFootnote(fn) {\n const parts = [];\n // Include <title> if present\n const titleNode = findChild(fn.children, \"title\");\n if (titleNode) {\n const titleText = extractAllText(titleNode.children).trim();\n if (titleText)\n parts.push(titleText);\n }\n // Extract text from each <p> separately and join with space\n const paragraphs = findChildren(fn.children, \"p\");\n for (const p of paragraphs) {\n const pText = extractAllText(p.children).trim();\n if (pText)\n parts.push(pText);\n }\n return {\n id: getAttr(fn.node, \"id\") ?? \"\",\n text: parts.join(\" \"),\n };\n}\n/** Parse footnotes from <fn-group>/<fn> elements. */\nfunction parseFootnotes(backChildren) {\n const fnGroup = findChild(backChildren, \"fn-group\");\n if (!fnGroup)\n return undefined;\n const fns = findChildren(fnGroup.children, \"fn\");\n if (fns.length === 0)\n return undefined;\n return fns.map(parseSingleFootnote);\n}\n/** Parse a single notes element into BackMatterNote entries. */\nfunction parseSingleNotesElement(note) {\n const notes = [];\n // Check if this <notes> contains <sec> or nested <notes> children\n const secs = findChildren(note.children, \"sec\");\n const nestedNotes = findChildren(note.children, \"notes\");\n const subItems = secs.length > 0 ? secs : nestedNotes;\n if (subItems.length > 0) {\n for (const sub of subItems) {\n const subTitleNode = findChild(sub.children, \"title\");\n const subTitle = subTitleNode ? extractAllText(subTitleNode.children) : \"\";\n const subParagraphs = findChildren(sub.children, \"p\");\n const subText = subParagraphs.map((p) => extractAllText(p.children)).join(\"\\n\\n\");\n if (subTitle || subText) {\n notes.push({ title: subTitle, text: subText });\n }\n }\n return notes;\n }\n const titleNode = findChild(note.children, \"title\");\n const title = titleNode ? extractAllText(titleNode.children) : \"\";\n const paragraphs = findChildren(note.children, \"p\");\n const text = paragraphs.map((p) => extractAllText(p.children)).join(\"\\n\\n\");\n if (title || text) {\n notes.push({ title, text });\n }\n return notes;\n}\n/** Parse notes from <notes> elements (author contributions, funding, etc.). */\nfunction parseNotes(backChildren) {\n const notesElements = findChildren(backChildren, \"notes\");\n if (notesElements.length === 0)\n return undefined;\n const notes = [];\n for (const note of notesElements) {\n notes.push(...parseSingleNotesElement(note));\n }\n return notes.length > 0 ? notes : undefined;\n}\n/** Parse glossary elements into BackMatterNote entries. */\nfunction parseGlossary(backChildren) {\n const glossaryElements = findChildren(backChildren, \"glossary\");\n const notes = [];\n for (const glossary of glossaryElements) {\n const titleNode = findChild(glossary.children, \"title\");\n const title = titleNode ? extractAllText(titleNode.children) : \"Glossary\";\n const defList = findChild(glossary.children, \"def-list\");\n if (!defList)\n continue;\n const defItems = findChildren(defList.children, \"def-item\");\n const lines = [];\n for (const item of defItems) {\n const termNode = findChild(item.children, \"term\");\n const defNode = findChild(item.children, \"def\");\n const term = termNode ? extractAllText(termNode.children) : \"\";\n const definition = defNode ? extractAllText(defNode.children) : \"\";\n lines.push(`${term}: ${definition}`);\n }\n notes.push({ title, text: lines.join(\"\\n\") });\n }\n return notes;\n}\n/** Parse <floats-group> into block elements. */\nfunction parseFloatsGroup(articleChildren) {\n const floatsGroup = findChild(articleChildren, \"floats-group\");\n if (!floatsGroup)\n return undefined;\n const blocks = [];\n for (const child of floatsGroup.children) {\n const tag = getTagName(child);\n if (tag === \"fig\") {\n blocks.push(parseFigBlock(child));\n }\n else if (tag === \"table-wrap\") {\n blocks.push(parseTableBlock(child));\n }\n }\n return blocks.length > 0 ? blocks : undefined;\n}\n/**\n * Parse JATS XML back matter sections (ack, app-group, fn-group)\n * and top-level floats-group.\n */\nexport function parseJatsBackMatter(xml) {\n const parsed = parser.parse(xml);\n const article = findArticle(parsed);\n if (!article)\n return {};\n const result = {};\n // Parse <back> children\n const back = findChild(article.children, \"back\");\n if (back) {\n const ack = parseAcknowledgments(back.children);\n if (ack)\n result.acknowledgments = ack;\n const app = parseAppendices(back.children);\n if (app)\n result.appendices = app;\n const fn = parseFootnotes(back.children);\n if (fn)\n result.footnotes = fn;\n const notes = parseNotes(back.children);\n const glossaryNotes = parseGlossary(back.children);\n if (notes || glossaryNotes.length > 0) {\n result.notes = [...(notes ?? []), ...glossaryNotes];\n }\n }\n // Floats-group: <floats-group> (sibling of <body> and <back>)\n const floats = parseFloatsGroup(article.children);\n if (floats)\n result.floats = floats;\n return result;\n}\n//# sourceMappingURL=jats-parser.js.map","/**\n * Markdown writer for JATS XML conversion.\n *\n * Converts the intermediate JatsDocument representation to Markdown text.\n */\n/**\n * Format an author's name in abbreviated form (e.g., \"Smith J\").\n */\nfunction formatAuthor(author) {\n if (!author.givenNames)\n return author.surname;\n const initials = author.givenNames\n .split(/[\\s.]+/)\n .filter(Boolean)\n .map((n) => n[0])\n .join(\"\");\n return `${author.surname} ${initials}`;\n}\n/**\n * Render inline content to Markdown string.\n */\nfunction renderInline(content) {\n return content\n .map((node) => {\n switch (node.type) {\n case \"text\":\n return node.text;\n case \"bold\":\n return `**${renderInline(node.children)}**`;\n case \"italic\":\n return `*${renderInline(node.children)}*`;\n case \"superscript\":\n return `^${node.text}^`;\n case \"subscript\":\n return `~${node.text}~`;\n case \"citation\":\n return node.text;\n case \"code\":\n return `\\`${node.text}\\``;\n case \"inline-formula\":\n return node.tex ? `$${node.tex}$` : node.text;\n case \"link\": {\n const linkText = renderInline(node.children);\n if (linkText === node.url)\n return node.url;\n return `[${linkText}](${node.url})`;\n }\n }\n })\n .join(\"\");\n}\n/**\n * Render a table block to Markdown.\n */\nfunction renderTable(block) {\n const lines = [];\n if (block.caption) {\n lines.push(`*${block.caption}*`);\n lines.push(\"\");\n }\n if (block.headers.length > 0) {\n lines.push(`| ${block.headers.join(\" | \")} |`);\n lines.push(`| ${block.headers.map(() => \"---\").join(\" | \")} |`);\n }\n else if (block.rows.length > 0) {\n const colCount = block.rows[0]?.length ?? 0;\n lines.push(`| ${Array.from({ length: colCount }, () => \"\").join(\" | \")} |`);\n lines.push(`| ${Array.from({ length: colCount }, () => \"---\").join(\" | \")} |`);\n }\n for (const row of block.rows) {\n lines.push(`| ${row.join(\" | \")} |`);\n }\n return lines.join(\"\\n\");\n}\n/**\n * Render a formula block to Markdown.\n */\nfunction renderFormula(block) {\n const lines = [];\n if (block.tex) {\n lines.push(`$$${block.tex}$$`);\n }\n else if (block.text) {\n lines.push(\"```\");\n lines.push(block.text);\n lines.push(\"```\");\n }\n if (block.label) {\n lines.push(block.label);\n }\n return lines.join(\"\\n\");\n}\n/**\n * Render a definition list block to Markdown.\n */\nfunction renderDefList(block) {\n const lines = [];\n if (block.title) {\n lines.push(`**${block.title}**`);\n lines.push(\"\");\n }\n for (const item of block.items) {\n lines.push(`**${item.term}**: ${item.definition}`);\n }\n return lines.join(\"\\n\");\n}\n/**\n * Render a boxed-text block to Markdown.\n */\nfunction renderBoxedText(block) {\n const lines = [];\n if (block.title) {\n lines.push(`> **${block.title}**`);\n lines.push(\">\");\n }\n for (const inner of block.content) {\n const rendered = renderBlock(inner);\n for (const line of rendered.split(\"\\n\")) {\n lines.push(line === \"\" ? \">\" : `> ${line}`);\n }\n }\n return lines.join(\"\\n\");\n}\n/**\n * Render a block element to Markdown lines.\n */\nfunction renderBlock(block) {\n switch (block.type) {\n case \"paragraph\":\n return renderInline(block.content);\n case \"blockquote\": {\n const text = renderInline(block.content);\n return text\n .split(\"\\n\")\n .map((line) => (line === \"\" ? \">\" : `> ${line}`))\n .join(\"\\n\");\n }\n case \"list\": {\n return block.items\n .map((item, i) => {\n const prefix = block.ordered ? `${i + 1}. ` : \"- \";\n return `${prefix}${renderInline(item)}`;\n })\n .join(\"\\n\");\n }\n case \"table\":\n return renderTable(block);\n case \"figure\": {\n const label = block.label ?? \"Figure\";\n const altText = block.caption ? `${label}. ${block.caption}` : label;\n return `![${altText}]()`;\n }\n case \"preformat\":\n return `\\`\\`\\`\\n${block.text}\\n\\`\\`\\``;\n case \"formula\":\n return renderFormula(block);\n case \"def-list\":\n return renderDefList(block);\n case \"boxed-text\":\n return renderBoxedText(block);\n }\n}\n/**\n * Render a section and its subsections to Markdown.\n */\nfunction renderSection(section) {\n const lines = [];\n const heading = \"#\".repeat(section.level);\n if (section.title.trim()) {\n lines.push(`${heading} ${section.title}`);\n lines.push(\"\");\n }\n for (const block of section.content) {\n lines.push(renderBlock(block));\n lines.push(\"\");\n }\n for (const sub of section.subsections) {\n lines.push(renderSection(sub));\n }\n return lines.join(\"\\n\");\n}\n/**\n * Render references section.\n */\nfunction formatRefPubIds(ref) {\n const links = [];\n if (ref.doi) {\n links.push(`[doi:${ref.doi}](https://doi.org/${ref.doi})`);\n }\n if (ref.pmid) {\n links.push(`[pmid:${ref.pmid}](https://pubmed.ncbi.nlm.nih.gov/${ref.pmid}/)`);\n }\n if (ref.pmcid) {\n links.push(`[pmcid:PMC${ref.pmcid}](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC${ref.pmcid}/)`);\n }\n return links.join(\" \");\n}\nfunction renderReferences(references) {\n if (references.length === 0)\n return \"\";\n const lines = [\"## References\", \"\"];\n references.forEach((ref, i) => {\n const pubIdLinks = formatRefPubIds(ref);\n const line = pubIdLinks ? `${i + 1}. ${ref.text} ${pubIdLinks}` : `${i + 1}. ${ref.text}`;\n lines.push(line);\n });\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n/**\n * Render footnotes section.\n */\nfunction renderFootnotes(footnotes) {\n if (footnotes.length === 0)\n return \"\";\n const lines = [\"## Footnotes\", \"\"];\n footnotes.forEach((fn, i) => {\n lines.push(`${i + 1}. ${fn.text}`);\n });\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n/**\n * Render floats (figures and tables) section.\n */\nfunction renderFloats(floats) {\n if (floats.length === 0)\n return \"\";\n const lines = [\"## Figures and Tables\", \"\"];\n for (const block of floats) {\n lines.push(renderBlock(block));\n lines.push(\"\");\n }\n return lines.join(\"\\n\");\n}\n/**\n * Format a publication date as a string (e.g., \"2024\", \"2024-01\", \"2024-01-15\").\n */\nfunction formatPublicationDate(date) {\n let dateStr = date.year;\n if (date.month) {\n dateStr += `-${date.month.padStart(2, \"0\")}`;\n if (date.day)\n dateStr += `-${date.day.padStart(2, \"0\")}`;\n }\n return dateStr;\n}\n/**\n * Format a citation string from volume, issue, and pages.\n */\nfunction formatCitation(meta) {\n if (meta.volume && meta.issue) {\n let citation = `Vol. ${meta.volume}(${meta.issue})`;\n if (meta.pages)\n citation += `, pp. ${meta.pages}`;\n return citation;\n }\n const parts = [];\n if (meta.volume)\n parts.push(`Vol. ${meta.volume}`);\n if (meta.issue)\n parts.push(`(${meta.issue})`);\n if (meta.pages)\n parts.push(`pp. ${meta.pages}`);\n return parts.join(\", \");\n}\n/**\n * Render document metadata (authors, DOI, journal, etc.) to Markdown lines.\n */\nfunction renderMetadata(doc) {\n const lines = [];\n const meta = doc.metadata;\n // Title\n lines.push(`# ${meta.title}`);\n lines.push(\"\");\n // Track position after title to detect if any metadata fields were added\n const posAfterTitle = lines.length;\n // Authors\n if (meta.authors.length > 0) {\n const authorStr = meta.authors.map(formatAuthor).join(\", \");\n lines.push(`**Authors**: ${authorStr}`);\n }\n if (meta.doi)\n lines.push(`**DOI**: ${meta.doi}`);\n if (meta.pmcid)\n lines.push(`**PMC**: PMC${meta.pmcid}`);\n if (meta.pmid)\n lines.push(`**PMID**: ${meta.pmid}`);\n if (meta.journal)\n lines.push(`**Journal**: ${meta.journal}`);\n if (meta.publicationDate) {\n lines.push(`**Published**: ${formatPublicationDate(meta.publicationDate)}`);\n }\n if (meta.volume || meta.issue || meta.pages) {\n lines.push(`**Citation**: ${formatCitation(meta)}`);\n }\n if (meta.articleType)\n lines.push(`**Article Type**: ${meta.articleType}`);\n if (meta.keywords && meta.keywords.length > 0) {\n lines.push(`**Keywords**: ${meta.keywords.join(\", \")}`);\n }\n if (meta.license)\n lines.push(`**License**: ${meta.license}`);\n if (lines.length > posAfterTitle) {\n lines.push(\"\");\n }\n // Abstract\n if (meta.abstract) {\n lines.push(\"## Abstract\");\n lines.push(\"\");\n lines.push(meta.abstract);\n lines.push(\"\");\n }\n return lines;\n}\n/**\n * Render trailing sections (acknowledgments, notes, references, appendices,\n * footnotes, floats) to Markdown lines.\n */\nfunction renderTrailingSections(doc) {\n const lines = [];\n // Acknowledgments (before References)\n if (doc.acknowledgments) {\n lines.push(\"## Acknowledgments\");\n lines.push(\"\");\n lines.push(doc.acknowledgments);\n lines.push(\"\");\n }\n // Notes (between Acknowledgments and References)\n if (doc.notes && doc.notes.length > 0) {\n for (const note of doc.notes) {\n lines.push(`## ${note.title}`);\n lines.push(\"\");\n lines.push(note.text);\n lines.push(\"\");\n }\n }\n // References\n if (doc.references.length > 0) {\n lines.push(renderReferences(doc.references));\n }\n // Appendices (after References)\n if (doc.appendices && doc.appendices.length > 0) {\n for (const appendix of doc.appendices) {\n lines.push(renderSection(appendix));\n }\n }\n // Footnotes\n if (doc.footnotes && doc.footnotes.length > 0) {\n lines.push(renderFootnotes(doc.footnotes));\n }\n // Floats (Figures and Tables from floats-group)\n if (doc.floats && doc.floats.length > 0) {\n lines.push(renderFloats(doc.floats));\n }\n return lines;\n}\n/**\n * Convert a parsed JATS document to Markdown string.\n */\nexport function writeMarkdown(doc) {\n const lines = [];\n lines.push(...renderMetadata(doc));\n // Sections\n for (const section of doc.sections) {\n lines.push(renderSection(section));\n }\n lines.push(...renderTrailingSections(doc));\n return `${lines.join(\"\\n\").trimEnd()}\\n`;\n}\n//# sourceMappingURL=markdown-writer.js.map","/**\n * Conversion orchestrator for PMC XML and arXiv HTML to Markdown.\n *\n * Ties together the parsers and Markdown writer with file I/O.\n */\nimport { readFile, stat, writeFile } from \"node:fs/promises\";\nimport { parseArxivHtml } from \"./arxiv-html-parser.js\";\nimport { parseJatsBackMatter, parseJatsBody, parseJatsMetadata, parseJatsReferences, } from \"./jats-parser.js\";\nimport { writeMarkdown } from \"./markdown-writer.js\";\n/**\n * Convert a PMC JATS XML file to Markdown.\n *\n * Reads the XML, parses it into a JatsDocument, writes Markdown,\n * and optionally updates meta.json.\n */\nexport async function convertPmcXmlToMarkdown(xmlPath, mdPath, metaPath) {\n try {\n const xml = await readFile(xmlPath, \"utf-8\");\n // Parse\n const metadata = parseJatsMetadata(xml);\n const sections = parseJatsBody(xml);\n const references = parseJatsReferences(xml);\n const backMatter = parseJatsBackMatter(xml);\n const doc = { metadata, sections, references };\n if (backMatter.acknowledgments)\n doc.acknowledgments = backMatter.acknowledgments;\n if (backMatter.appendices)\n doc.appendices = backMatter.appendices;\n if (backMatter.footnotes)\n doc.footnotes = backMatter.footnotes;\n if (backMatter.floats)\n doc.floats = backMatter.floats;\n if (backMatter.notes)\n doc.notes = backMatter.notes;\n // Write Markdown\n const md = writeMarkdown(doc);\n await writeFile(mdPath, md, \"utf-8\");\n // Update meta.json if path provided and file exists\n if (metaPath) {\n try {\n await stat(metaPath);\n const metaRaw = await readFile(metaPath, \"utf-8\");\n const meta = JSON.parse(metaRaw);\n const mdStat = await stat(mdPath);\n meta.files.markdown = {\n filename: \"fulltext.md\",\n source: \"conversion\",\n retrievedAt: new Date().toISOString(),\n size: mdStat.size,\n convertedFrom: \"fulltext.xml\",\n };\n await writeFile(metaPath, `${JSON.stringify(meta, null, 2)}\\n`, \"utf-8\");\n }\n catch {\n // meta.json doesn't exist or can't be read, skip update\n }\n }\n const result = { success: true };\n result.title = metadata.title;\n result.sections = sections.length;\n result.references = references.length;\n return result;\n }\n catch (err) {\n const result = { success: false };\n result.error = err instanceof Error ? err.message : String(err);\n return result;\n }\n}\n/**\n * Convert an arXiv HTML file to Markdown.\n *\n * Reads the HTML, parses it into a JatsDocument via the arXiv HTML parser,\n * writes Markdown using the shared writer, and optionally updates meta.json.\n */\nexport async function convertArxivHtmlToMarkdown(htmlPath, mdPath, metaPath) {\n try {\n const html = await readFile(htmlPath, \"utf-8\");\n const doc = parseArxivHtml(html);\n // Write Markdown\n const md = writeMarkdown(doc);\n await writeFile(mdPath, md, \"utf-8\");\n // Update meta.json if path provided and file exists\n if (metaPath) {\n try {\n await stat(metaPath);\n const metaRaw = await readFile(metaPath, \"utf-8\");\n const meta = JSON.parse(metaRaw);\n const mdStat = await stat(mdPath);\n meta.files.markdown = {\n filename: \"fulltext.md\",\n source: \"conversion\",\n retrievedAt: new Date().toISOString(),\n size: mdStat.size,\n convertedFrom: \"fulltext.html\",\n };\n await writeFile(metaPath, `${JSON.stringify(meta, null, 2)}\\n`, \"utf-8\");\n }\n catch {\n // meta.json doesn't exist or can't be read, skip update\n }\n }\n const result = { success: true };\n result.title = doc.metadata.title;\n result.sections = doc.sections.length;\n result.references = doc.references.length;\n return result;\n }\n catch (err) {\n const result = { success: false };\n result.error = err instanceof Error ? err.message : String(err);\n return result;\n }\n}\n//# sourceMappingURL=index.js.map","/**\n * Fulltext OA discovery operation.\n *\n * Discovers open access availability for a reference by checking\n * multiple sources (Unpaywall, PMC, arXiv, CORE).\n */\n\nimport {\n type DiscoveryArticle,\n type DiscoveryConfig,\n type OALocation,\n type OAStatus,\n discoverOA,\n} from \"@ncukondo/academic-fulltext\";\nimport type { FulltextConfig } from \"../../../config/schema.js\";\nimport type { IdentifierType } from \"../../../core/library-interface.js\";\nimport type { ILibrary } from \"../../../core/library-interface.js\";\n\nexport interface FulltextDiscoverOptions {\n /** Reference identifier (id or uuid) */\n identifier: string;\n /** Identifier type: 'id' (default), 'uuid', 'doi', 'pmid', or 'isbn' */\n idType?: IdentifierType | undefined;\n /** Fulltext configuration */\n fulltextConfig: FulltextConfig;\n}\n\nexport interface FulltextDiscoverResult {\n success: boolean;\n error?: string;\n /** The reference ID used for display */\n referenceId?: string;\n /** OA status */\n oaStatus?: OAStatus;\n /** Discovered OA locations */\n locations?: OALocation[];\n /** Source-level errors (non-fatal) */\n errors?: Array<{ source: string; error: string }>;\n /** IDs discovered during OA resolution (e.g. PMCID from DOI via NCBI) */\n discoveredIds?: { pmcid?: string; pmid?: string };\n}\n\nexport async function fulltextDiscover(\n library: ILibrary,\n options: FulltextDiscoverOptions\n): Promise<FulltextDiscoverResult> {\n const { identifier, idType = \"id\", fulltextConfig } = options;\n\n // Resolve reference\n const item = await library.find(identifier, { idType });\n if (!item) {\n return { success: false, error: `Reference '${identifier}' not found` };\n }\n\n // Extract identifiers\n const doi = item.DOI;\n const pmid = item.PMID;\n const pmcid = item.PMCID;\n\n if (!doi && !pmid) {\n return {\n success: false,\n error: `No DOI or PMID found for ${identifier}. Cannot discover OA sources.`,\n };\n }\n\n // Build article object for discovery\n const article: DiscoveryArticle = {};\n if (doi) article.doi = doi;\n if (pmid) article.pmid = pmid;\n if (pmcid) article.pmcid = pmcid;\n\n // Build discovery config\n const config: DiscoveryConfig = {\n unpaywallEmail: fulltextConfig.sources.unpaywallEmail ?? \"\",\n coreApiKey: fulltextConfig.sources.coreApiKey ?? \"\",\n preferSources: fulltextConfig.preferSources,\n };\n if (fulltextConfig.sources.ncbiEmail) config.ncbiEmail = fulltextConfig.sources.ncbiEmail;\n if (fulltextConfig.sources.ncbiTool) config.ncbiTool = fulltextConfig.sources.ncbiTool;\n\n const result = await discoverOA(article, config);\n\n const discoverResult: FulltextDiscoverResult = {\n success: true,\n referenceId: item.id,\n oaStatus: result.oaStatus,\n locations: result.locations,\n discoveredIds: result.discoveredIds,\n };\n if (result.errors.length > 0) {\n discoverResult.errors = result.errors;\n }\n return discoverResult;\n}\n","/**\n * Fulltext fetch operation.\n *\n * Discovers OA sources, downloads full-text files (PDF, PMC XML),\n * converts XML to Markdown, and attaches them to references.\n */\n\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport {\n type DiscoveryArticle,\n type DiscoveryConfig,\n type OALocation,\n convertArxivHtmlToMarkdown,\n convertPmcXmlToMarkdown,\n discoverOA,\n downloadArxivHtml,\n downloadPdf,\n downloadPmcXml,\n} from \"@ncukondo/academic-fulltext\";\nimport type { FulltextConfig, FulltextSource } from \"../../../config/schema.js\";\nimport type { CslItem } from \"../../../core/csl-json/types.js\";\nimport type { ILibrary, IdentifierType } from \"../../../core/library-interface.js\";\nimport { fulltextAttach } from \"./attach.js\";\nimport { fulltextGet } from \"./get.js\";\n\nexport interface FulltextFetchOptions {\n /** Reference identifier (id or uuid) */\n identifier: string;\n /** Identifier type: 'id' (default), 'uuid', 'doi', 'pmid', or 'isbn' */\n idType?: IdentifierType | undefined;\n /** Fulltext configuration */\n fulltextConfig: FulltextConfig;\n /** Directory for fulltext attachments */\n fulltextDirectory: string;\n /** Preferred source to fetch from */\n source?: FulltextSource | undefined;\n /** Force overwrite existing fulltext */\n force?: boolean | undefined;\n}\n\nexport interface FulltextFetchResult {\n success: boolean;\n error?: string;\n /** The reference ID used for display */\n referenceId?: string;\n /** Which source was used */\n source?: string;\n /** Which file types were attached */\n attachedFiles?: string[];\n}\n\ninterface AttachContext {\n library: ILibrary;\n identifier: string;\n idType: IdentifierType;\n fulltextDirectory: string;\n force: boolean;\n}\n\n/**\n * Extract PMCID from PMC locations as a fallback when discoveredIds is empty.\n * Matches PMC PDF URLs like /pmc/articles/PMC12345678/pdf/\n * and efetch XML URLs like efetch.fcgi?db=pmc&id=12345678\n */\nfunction extractPmcidFromLocations(locations: OALocation[]): string | undefined {\n for (const loc of locations) {\n if (loc.source !== \"pmc\") continue;\n const pdfMatch = loc.url.match(/\\/pmc\\/articles\\/(PMC\\d+)\\//);\n if (pdfMatch) return pdfMatch[1];\n const xmlMatch = loc.url.match(/[?&]id=(\\d+)/);\n if (xmlMatch) return `PMC${xmlMatch[1]}`;\n }\n return undefined;\n}\n\nfunction buildDiscoveryArticle(item: CslItem): DiscoveryArticle {\n const article: DiscoveryArticle = {};\n if (item.DOI) article.doi = item.DOI;\n if (item.PMID) article.pmid = item.PMID;\n if (item.PMCID) article.pmcid = item.PMCID;\n return article;\n}\n\nfunction buildDiscoveryConfig(fulltextConfig: FulltextConfig): DiscoveryConfig {\n const config: DiscoveryConfig = {\n unpaywallEmail: fulltextConfig.sources.unpaywallEmail ?? \"\",\n coreApiKey: fulltextConfig.sources.coreApiKey ?? \"\",\n preferSources: fulltextConfig.preferSources,\n };\n if (fulltextConfig.sources.ncbiEmail) config.ncbiEmail = fulltextConfig.sources.ncbiEmail;\n if (fulltextConfig.sources.ncbiTool) config.ncbiTool = fulltextConfig.sources.ncbiTool;\n return config;\n}\n\nasync function tryDownloadPdf(\n locations: OALocation[],\n tempDir: string,\n ctx: AttachContext\n): Promise<{ attached: boolean; source: string }> {\n const pdfLocations = locations.filter((loc) => loc.urlType === \"pdf\");\n if (pdfLocations.length === 0) return { attached: false, source: \"\" };\n\n const pdfPath = join(tempDir, \"fulltext.pdf\");\n for (const pdfLocation of pdfLocations) {\n const pdfResult = await downloadPdf(pdfLocation.url, pdfPath);\n if (!pdfResult.success) continue;\n\n const attachResult = await fulltextAttach(ctx.library, {\n identifier: ctx.identifier,\n idType: ctx.idType,\n filePath: pdfPath,\n type: \"pdf\",\n force: ctx.force,\n move: true,\n fulltextDirectory: ctx.fulltextDirectory,\n });\n\n if (attachResult.success) {\n return { attached: true, source: pdfLocation.source };\n }\n }\n\n return { attached: false, source: pdfLocations[0]?.source ?? \"\" };\n}\n\nasync function tryDownloadPmcXmlAndConvert(\n pmcid: string,\n tempDir: string,\n ctx: AttachContext\n): Promise<boolean> {\n const xmlPath = join(tempDir, \"fulltext.xml\");\n const xmlResult = await downloadPmcXml(pmcid, xmlPath);\n if (!xmlResult.success) return false;\n\n const mdPath = join(tempDir, \"fulltext.md\");\n const convertResult = await convertPmcXmlToMarkdown(xmlPath, mdPath);\n if (!convertResult.success) return false;\n\n const attachResult = await fulltextAttach(ctx.library, {\n identifier: ctx.identifier,\n idType: ctx.idType,\n filePath: mdPath,\n type: \"markdown\",\n force: ctx.force,\n move: true,\n fulltextDirectory: ctx.fulltextDirectory,\n });\n\n return attachResult.success;\n}\n\n/**\n * Extract arXiv ID from an arXiv URL.\n * Handles formats like:\n * https://arxiv.org/abs/2301.13867\n * https://arxiv.org/html/2301.13867v2\n * https://arxiv.org/pdf/2301.13867\n */\nfunction extractArxivId(url: string): string | undefined {\n const match = url.match(/arxiv\\.org\\/(?:abs|html|pdf)\\/(\\d{4}\\.\\d{4,5}(?:v\\d+)?)/);\n return match?.[1];\n}\n\nasync function tryDownloadArxivHtmlAndConvert(\n arxivId: string,\n tempDir: string,\n ctx: AttachContext\n): Promise<boolean> {\n const htmlPath = join(tempDir, \"fulltext.html\");\n const htmlResult = await downloadArxivHtml(arxivId, htmlPath);\n if (!htmlResult.success) return false;\n\n const mdPath = join(tempDir, \"fulltext.md\");\n const convertResult = await convertArxivHtmlToMarkdown(htmlPath, mdPath);\n if (!convertResult.success) return false;\n\n const attachResult = await fulltextAttach(ctx.library, {\n identifier: ctx.identifier,\n idType: ctx.idType,\n filePath: mdPath,\n type: \"markdown\",\n force: ctx.force,\n move: true,\n fulltextDirectory: ctx.fulltextDirectory,\n });\n\n return attachResult.success;\n}\n\nasync function checkExistingFulltext(\n library: ILibrary,\n identifier: string,\n idType: IdentifierType,\n fulltextDirectory: string\n): Promise<boolean> {\n const existing = await fulltextGet(library, { identifier, idType, fulltextDirectory });\n return existing.success && existing.paths !== undefined;\n}\n\nexport async function fulltextFetch(\n library: ILibrary,\n options: FulltextFetchOptions\n): Promise<FulltextFetchResult> {\n const { identifier, idType = \"id\", fulltextConfig, fulltextDirectory, source, force } = options;\n\n const item = await library.find(identifier, { idType });\n if (!item) {\n return { success: false, error: `Reference '${identifier}' not found` };\n }\n\n if (!item.DOI && !item.PMID) {\n return {\n success: false,\n error: `No DOI or PMID found for ${identifier}. Cannot discover OA sources.`,\n };\n }\n\n if (!force && (await checkExistingFulltext(library, identifier, idType, fulltextDirectory))) {\n return {\n success: false,\n error: `Fulltext already attached to ${identifier}. Use --force to overwrite.`,\n };\n }\n\n const discovery = await discoverOA(\n buildDiscoveryArticle(item),\n buildDiscoveryConfig(fulltextConfig)\n );\n\n let locations = discovery.locations;\n if (source) {\n locations = locations.filter((loc) => loc.source === source);\n }\n\n if (locations.length === 0) {\n return { success: false, error: `No OA sources found for ${identifier}` };\n }\n\n const effectivePmcid =\n item.PMCID ?? discovery.discoveredIds?.pmcid ?? extractPmcidFromLocations(locations);\n\n const tempDir = await mkdtemp(join(tmpdir(), \"ref-fulltext-\"));\n const ctx: AttachContext = {\n library,\n identifier,\n idType,\n fulltextDirectory,\n force: force ?? false,\n };\n\n try {\n return await downloadAndAttach(locations, effectivePmcid, tempDir, ctx, item.id, identifier);\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {});\n }\n}\n\nasync function tryArxivHtmlFromLocations(\n locations: OALocation[],\n tempDir: string,\n ctx: AttachContext\n): Promise<{ attached: boolean; source: string }> {\n const arxivHtmlLocation = locations.find(\n (loc) => loc.source === \"arxiv\" && loc.urlType === \"html\"\n );\n if (!arxivHtmlLocation) return { attached: false, source: \"\" };\n\n const arxivId = extractArxivId(arxivHtmlLocation.url);\n if (!arxivId) return { attached: false, source: \"arxiv\" };\n\n const mdAttached = await tryDownloadArxivHtmlAndConvert(arxivId, tempDir, ctx);\n return { attached: mdAttached, source: \"arxiv\" };\n}\n\nfunction buildDownloadError(locations: OALocation[], identifier: string): FulltextFetchResult {\n const pdfLocation = locations.find((loc) => loc.urlType === \"pdf\");\n if (pdfLocation) {\n return {\n success: false,\n error: `Failed to download from ${pdfLocation.source}: download failed`,\n };\n }\n return { success: false, error: `Failed to download fulltext for ${identifier}` };\n}\n\nasync function downloadAndAttach(\n locations: OALocation[],\n pmcid: string | undefined,\n tempDir: string,\n ctx: AttachContext,\n referenceId: string,\n identifier: string\n): Promise<FulltextFetchResult> {\n const attachedFiles: string[] = [];\n let usedSource = \"\";\n\n const pdfResult = await tryDownloadPdf(locations, tempDir, ctx);\n if (pdfResult.attached) {\n attachedFiles.push(\"pdf\");\n usedSource = pdfResult.source;\n }\n\n // Try PMC XML -> Markdown\n if (pmcid) {\n const mdAttached = await tryDownloadPmcXmlAndConvert(pmcid, tempDir, ctx);\n if (mdAttached) {\n attachedFiles.push(\"markdown\");\n if (!usedSource) usedSource = \"pmc\";\n }\n }\n\n // Try arXiv HTML -> Markdown if no markdown yet\n if (!attachedFiles.includes(\"markdown\")) {\n const arxivResult = await tryArxivHtmlFromLocations(locations, tempDir, ctx);\n if (arxivResult.attached) {\n attachedFiles.push(\"markdown\");\n if (!usedSource) usedSource = arxivResult.source;\n }\n }\n\n if (attachedFiles.length > 0) {\n return { success: true, referenceId, source: usedSource, attachedFiles };\n }\n\n return buildDownloadError(locations, identifier);\n}\n","/**\n * Fulltext convert operation.\n *\n * Converts an attached PMC JATS XML file to Markdown.\n */\n\nimport { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { convertPmcXmlToMarkdown } from \"@ncukondo/academic-fulltext\";\nimport type { CslItem } from \"../../../core/csl-json/types.js\";\nimport type { ILibrary, IdentifierType } from \"../../../core/library-interface.js\";\nimport type { Attachments } from \"../../attachments/types.js\";\nimport { fulltextAttach } from \"./attach.js\";\n\nexport interface FulltextConvertOptions {\n /** Reference identifier (id or uuid) */\n identifier: string;\n /** Identifier type: 'id' (default), 'uuid', 'doi', 'pmid', or 'isbn' */\n idType?: IdentifierType | undefined;\n /** Directory for fulltext attachments */\n fulltextDirectory: string;\n}\n\nexport interface FulltextConvertResult {\n success: boolean;\n error?: string;\n /** The converted markdown filename */\n filename?: string;\n}\n\nfunction findXmlFile(item: CslItem): string | undefined {\n const attachments = item.custom?.attachments as Attachments | undefined;\n if (!attachments?.files) return undefined;\n\n const xmlFile = attachments.files.find(\n (f) => f.role === \"fulltext\" && f.filename.endsWith(\".xml\")\n );\n return xmlFile?.filename;\n}\n\nfunction getXmlPath(item: CslItem, xmlFilename: string, fulltextDirectory: string): string {\n const attachments = item.custom?.attachments as Attachments | undefined;\n const directory = attachments?.directory ?? \"\";\n return join(fulltextDirectory, directory, xmlFilename);\n}\n\nexport async function fulltextConvert(\n library: ILibrary,\n options: FulltextConvertOptions\n): Promise<FulltextConvertResult> {\n const { identifier, idType = \"id\", fulltextDirectory } = options;\n\n const item = await library.find(identifier, { idType });\n if (!item) {\n return { success: false, error: `Reference '${identifier}' not found` };\n }\n\n const xmlFilename = findXmlFile(item as CslItem);\n if (!xmlFilename) {\n return { success: false, error: `No PMC XML file attached to '${identifier}'` };\n }\n\n const xmlPath = getXmlPath(item as CslItem, xmlFilename, fulltextDirectory);\n\n // Verify file exists on disk\n try {\n await access(xmlPath);\n } catch {\n return { success: false, error: `XML file not found on disk: ${xmlPath}` };\n }\n\n // Convert to temp file then attach\n const mdPath = xmlPath.replace(/\\.xml$/, \".md\");\n const convertResult = await convertPmcXmlToMarkdown(xmlPath, mdPath);\n if (!convertResult.success) {\n return {\n success: false,\n error: `Failed to convert PMC XML to Markdown: ${convertResult.error ?? \"unknown error\"}`,\n };\n }\n\n const attachResult = await fulltextAttach(library, {\n identifier,\n idType,\n filePath: mdPath,\n type: \"markdown\",\n force: true,\n move: true,\n fulltextDirectory,\n });\n\n if (!attachResult.success) {\n return { success: false, error: attachResult.error ?? \"Attach failed\" };\n }\n\n return {\n success: true,\n filename: attachResult.filename ?? \"fulltext.md\",\n };\n}\n","import type { CslItem } from \"../../core/csl-json/types.js\";\n\n/**\n * Extract first author name with initial\n * Returns \"Family G\" or \"Family\" if no given name\n */\nfunction formatFirstAuthor(item: CslItem): string {\n if (!item.author || item.author.length === 0) {\n return \"Unknown\";\n }\n\n const firstAuthor = item.author[0];\n if (!firstAuthor) {\n return \"Unknown\";\n }\n\n const family = firstAuthor.family || \"Unknown\";\n const givenInitial = firstAuthor.given ? firstAuthor.given[0] : \"\";\n\n if (givenInitial) {\n return `${family} ${givenInitial}`;\n }\n return family;\n}\n\n/**\n * Check if item has multiple authors\n */\nfunction hasMultipleAuthors(item: CslItem): boolean {\n return (item.author?.length || 0) > 1;\n}\n\n/**\n * Extract year from CSL-JSON issued field\n */\nfunction extractYear(item: CslItem): string {\n if (item.issued?.[\"date-parts\"]?.[0]?.[0]) {\n return String(item.issued[\"date-parts\"][0][0]);\n }\n return \"n.d.\";\n}\n\n/**\n * Get journal abbreviation (prefer short title)\n */\nfunction getJournalAbbrev(item: CslItem): string {\n const containerTitleShort = item[\"container-title-short\"];\n if (containerTitleShort) {\n return containerTitleShort;\n }\n return item[\"container-title\"] || \"\";\n}\n\n/**\n * Format volume/issue/pages section\n * Returns formats like: \"10(2):123-145\", \"10:123-145\", \"10(2)\", \"10\", or \"\"\n */\nfunction formatVolumeIssuePage(item: CslItem): string {\n const volume = item.volume;\n const issue = item.issue;\n const page = item.page;\n\n if (!volume && !issue && !page) {\n return \"\";\n }\n\n let result = \"\";\n\n if (volume) {\n result += volume;\n if (issue) {\n result += `(${issue})`;\n }\n if (page) {\n result += `:${page}`;\n }\n } else if (page) {\n result += page;\n }\n\n return result;\n}\n\n/**\n * Get identifier (PMID > DOI > URL priority)\n */\nfunction getIdentifier(item: CslItem): string {\n if (item.PMID) {\n return `PMID:${item.PMID}`;\n }\n if (item.DOI) {\n return `DOI:${item.DOI}`;\n }\n if (item.URL) {\n return item.URL;\n }\n return \"\";\n}\n\n/**\n * Format a single bibliography entry\n */\nfunction formatBibliographyEntry(item: CslItem): string {\n const parts: string[] = [];\n\n // Author\n const author = formatFirstAuthor(item);\n const etAl = hasMultipleAuthors(item) ? \" et al\" : \"\";\n parts.push(`${author}${etAl}.`);\n\n // Journal\n const journal = getJournalAbbrev(item);\n if (journal) {\n parts.push(`${journal}.`);\n }\n\n // Year and volume/issue/pages\n const year = extractYear(item);\n const volumeIssuePage = formatVolumeIssuePage(item);\n\n if (volumeIssuePage) {\n parts.push(`${year};${volumeIssuePage}.`);\n } else {\n parts.push(`${year}.`);\n }\n\n // Identifier\n const identifier = getIdentifier(item);\n if (identifier) {\n parts.push(`${identifier}.`);\n }\n\n // Title\n if (item.title) {\n parts.push(`${item.title}.`);\n }\n\n return parts.join(\" \");\n}\n\n/**\n * Get first author family name only (for in-text citations)\n */\nfunction getFirstAuthorFamilyName(item: CslItem): string {\n if (!item.author || item.author.length === 0) {\n return \"Unknown\";\n }\n\n const firstAuthor = item.author[0];\n if (!firstAuthor) {\n return \"Unknown\";\n }\n\n return firstAuthor.family || \"Unknown\";\n}\n\n/**\n * Format a single in-text citation (without parentheses)\n * Returns \"Family et al, YYYY\" or \"Family, YYYY\"\n */\nfunction formatInTextEntry(item: CslItem): string {\n const author = getFirstAuthorFamilyName(item);\n const etAl = hasMultipleAuthors(item) ? \" et al\" : \"\";\n const year = extractYear(item);\n\n return `${author}${etAl}, ${year}`;\n}\n\n/**\n * Format CSL-JSON items as simplified AMA-like bibliography entries.\n *\n * Format: FirstAuthor [et al]. JournalAbbrev. YYYY;volume(issue):pages. PMID:xxxxx [or DOI:xxxxx]. Title.\n *\n * Multiple items are separated by double newlines.\n *\n * @param items - Array of CSL-JSON items\n * @returns Formatted bibliography entries separated by double newlines\n */\nexport function formatBibliography(items: CslItem[]): string {\n if (items.length === 0) {\n return \"\";\n }\n\n return items.map(formatBibliographyEntry).join(\"\\n\\n\");\n}\n\n/**\n * Format CSL-JSON items as simplified in-text citations.\n *\n * Format: (FirstAuthor et al, YYYY)\n *\n * Multiple items are separated by semicolons and enclosed in parentheses.\n *\n * @param items - Array of CSL-JSON items\n * @returns Formatted in-text citation(s) enclosed in parentheses\n */\nexport function formatInText(items: CslItem[]): string {\n if (items.length === 0) {\n return \"\";\n }\n\n const citations = items.map(formatInTextEntry).join(\"; \");\n return `(${citations})`;\n}\n","import { Cite, plugins } from \"@citation-js/core\";\nimport \"@citation-js/plugin-csl\";\nimport type { CslItem } from \"../../core/csl-json/types.js\";\nimport { formatBibliography, formatInText } from \"./citation-fallback.js\";\n\n/**\n * Options for CSL citation formatting\n */\nexport type CitationFormatOptions = {\n /**\n * CSL style name (e.g., 'apa', 'vancouver', 'chicago')\n * @default 'apa'\n */\n style?: string;\n\n /**\n * Custom CSL style XML content.\n * When provided, this XML is registered and used instead of built-in styles.\n */\n styleXml?: string;\n\n /**\n * Output format: text, html, or rtf\n * @default 'text'\n */\n format?: \"text\" | \"html\" | \"rtf\";\n\n /**\n * Locale code (e.g., 'en-US', 'en-GB')\n * @default 'en-US'\n */\n locale?: string;\n};\n\n/**\n * Register a custom CSL style with citation-js.\n * Returns the style name to use for formatting.\n * @throws Error if CSL XML is invalid or malformed\n */\nfunction registerCustomStyle(styleName: string, styleXml: string): string {\n // Basic XML validation\n if (!styleXml.includes(\"<style\") || !styleXml.includes(\"</style>\")) {\n throw new Error(\n \"Invalid CSL file: Missing <style> element. The file may be malformed or not a valid CSL style.\"\n );\n }\n\n // Check for required CSL sections\n const hasCitation = styleXml.includes(\"<citation\") || styleXml.includes(\"<citation>\");\n const hasBibliography = styleXml.includes(\"<bibliography\") || styleXml.includes(\"<bibliography>\");\n if (!hasCitation && !hasBibliography) {\n throw new Error(\n \"Invalid CSL file: Missing <citation> or <bibliography> section. \" +\n \"A valid CSL style must define at least one of these sections.\"\n );\n }\n\n try {\n const config = plugins.config.get(\"@csl\");\n config.templates.add(styleName, styleXml);\n return styleName;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to register CSL style '${styleName}': ${message}`);\n }\n}\n\n/**\n * Format CSL-JSON items as bibliography using CSL processor.\n * Falls back to simplified format if CSL processing fails.\n *\n * @param items - Array of CSL-JSON items\n * @param options - Formatting options\n * @returns Formatted bibliography entries\n */\nexport function formatBibliographyCSL(items: CslItem[], options: CitationFormatOptions): string {\n // Handle empty array\n if (items.length === 0) {\n return \"\";\n }\n\n // Set defaults\n let style = options.style || \"apa\";\n const format = options.format || \"text\";\n const locale = options.locale || \"en-US\";\n\n // Register custom style if XML is provided\n if (options.styleXml) {\n style = registerCustomStyle(style, options.styleXml);\n }\n\n try {\n // Create Cite instance with CSL-JSON data\n const cite = new Cite(items);\n\n // Format as bibliography\n const result = cite.format(\"bibliography\", {\n format,\n template: style,\n lang: locale,\n });\n\n return result;\n } catch (error) {\n // Fall back to simplified format on any error\n const errorMessage = error instanceof Error ? error.message : String(error);\n process.stderr.write(\n `Warning: CSL processing failed (style: ${style}), falling back to simplified format: ${errorMessage}\\n`\n );\n return formatBibliography(items);\n }\n}\n\n/**\n * Format CSL-JSON items as in-text citations using CSL processor.\n * Falls back to simplified format if CSL processing fails.\n *\n * @param items - Array of CSL-JSON items\n * @param options - Formatting options\n * @returns Formatted in-text citation(s)\n */\nexport function formatInTextCSL(items: CslItem[], options: CitationFormatOptions): string {\n // Handle empty array\n if (items.length === 0) {\n return \"\";\n }\n\n // Set defaults\n let style = options.style || \"apa\";\n const format = options.format || \"text\";\n const locale = options.locale || \"en-US\";\n\n // Register custom style if XML is provided\n if (options.styleXml) {\n style = registerCustomStyle(style, options.styleXml);\n }\n\n try {\n // Create Cite instance with CSL-JSON data\n const cite = new Cite(items);\n\n // Format as in-text citation\n const result = cite.format(\"citation\", {\n format,\n template: style,\n lang: locale,\n });\n\n return result;\n } catch (error) {\n // Fall back to simplified format on any error\n const errorMessage = error instanceof Error ? error.message : String(error);\n process.stderr.write(\n `Warning: CSL processing failed (style: ${style}), falling back to simplified format: ${errorMessage}\\n`\n );\n return formatInText(items);\n }\n}\n","/**\n * Reference sorter\n */\n\nimport type { CslItem } from \"../../core/csl-json/types.js\";\nimport type { SortField, SortOrder } from \"./types.js\";\n\n/**\n * Extract created_at timestamp from item, returns epoch (0) if missing\n */\nfunction getCreatedAt(item: CslItem): number {\n const createdAt = item.custom?.created_at;\n if (!createdAt) return 0;\n return new Date(createdAt).getTime();\n}\n\n/**\n * Extract updated timestamp from item, falls back to created_at\n */\nfunction getUpdatedAt(item: CslItem): number {\n const timestamp = item.custom?.timestamp;\n if (timestamp) return new Date(timestamp).getTime();\n return getCreatedAt(item);\n}\n\n/**\n * Extract published date as comparable number\n * Returns 0 (epoch) if missing\n */\nfunction getPublishedDate(item: CslItem): number {\n const dateParts = item.issued?.[\"date-parts\"]?.[0];\n if (!dateParts || dateParts.length === 0) return 0;\n\n const year = dateParts[0] ?? 0;\n const month = dateParts[1] ?? 1;\n const day = dateParts[2] ?? 1;\n\n return new Date(year, month - 1, day).getTime();\n}\n\n/**\n * Extract first author's sortable name\n * Returns \"Anonymous\" if no author\n */\nfunction getAuthorName(item: CslItem): string {\n const firstAuthor = item.author?.[0];\n if (!firstAuthor) return \"Anonymous\";\n\n return firstAuthor.family ?? firstAuthor.literal ?? \"Anonymous\";\n}\n\n/**\n * Extract title, returns empty string if missing\n */\nfunction getTitle(item: CslItem): string {\n return item.title ?? \"\";\n}\n\n/**\n * Get sort value for a given field\n */\nfunction getSortValue(item: CslItem, field: SortField): number | string {\n switch (field) {\n case \"created\":\n return getCreatedAt(item);\n case \"updated\":\n return getUpdatedAt(item);\n case \"published\":\n return getPublishedDate(item);\n case \"author\":\n return getAuthorName(item).toLowerCase();\n case \"title\":\n return getTitle(item).toLowerCase();\n }\n}\n\n/**\n * Compare function for sorting\n */\nfunction compareValues(a: number | string, b: number | string, order: SortOrder): number {\n const multiplier = order === \"desc\" ? -1 : 1;\n\n if (typeof a === \"number\" && typeof b === \"number\") {\n return (a - b) * multiplier;\n }\n\n const strA = String(a);\n const strB = String(b);\n return strA.localeCompare(strB) * multiplier;\n}\n\n/**\n * Sort references by the specified field and order.\n * Uses secondary sort: created (desc), then id (asc) for stability.\n *\n * @param items - References to sort\n * @param sort - Sort field\n * @param order - Sort order\n * @returns Sorted references (new array, does not mutate input)\n */\nexport function sortReferences(items: CslItem[], sort: SortField, order: SortOrder): CslItem[] {\n return [...items].sort((a, b) => {\n // Primary sort\n const aValue = getSortValue(a, sort);\n const bValue = getSortValue(b, sort);\n const primaryCompare = compareValues(aValue, bValue, order);\n\n if (primaryCompare !== 0) return primaryCompare;\n\n // Secondary sort: created (desc)\n const aCreated = getCreatedAt(a);\n const bCreated = getCreatedAt(b);\n const createdCompare = bCreated - aCreated; // desc\n\n if (createdCompare !== 0) return createdCompare;\n\n // Tertiary sort: id (asc) for stability\n return a.id.localeCompare(b.id);\n });\n}\n","/**\n * Pagination applier\n */\n\nexport interface PaginateOptions {\n limit?: number;\n offset?: number;\n}\n\nexport interface PaginateResult<T> {\n items: T[];\n nextOffset: number | null;\n}\n\n/**\n * Apply pagination to an array of items.\n *\n * @param items - Items to paginate\n * @param options - Pagination options (limit=0 or undefined means unlimited)\n * @returns Paginated items with nextOffset (null if no more items)\n */\nexport function paginate<T>(items: T[], options: PaginateOptions): PaginateResult<T> {\n const offset = options.offset ?? 0;\n const limit = options.limit ?? 0;\n\n // Validate inputs\n if (limit < 0) {\n throw new Error(\"limit must be non-negative\");\n }\n if (offset < 0) {\n throw new Error(\"offset must be non-negative\");\n }\n\n const isUnlimited = limit === 0;\n\n // Apply offset\n const afterOffset = items.slice(offset);\n\n // Apply limit (0 means unlimited)\n const paginatedItems = isUnlimited ? afterOffset : afterOffset.slice(0, limit);\n\n // Calculate nextOffset\n let nextOffset: number | null = null;\n if (!isUnlimited && paginatedItems.length > 0) {\n const nextPosition = offset + paginatedItems.length;\n if (nextPosition < items.length) {\n nextOffset = nextPosition;\n }\n }\n\n return {\n items: paginatedItems,\n nextOffset,\n };\n}\n","/**\n * CSL Style Management\n *\n * Handles resolution and loading of CSL (Citation Style Language) style files.\n *\n * Style Resolution Order:\n * 1. --csl-file <path> (exact file path)\n * 2. Built-in style matching --style <name>\n * 3. Search in csl_directory paths (in array order)\n * 4. Default style from config (default_style)\n * 5. \"apa\" (hardcoded default)\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\n/**\n * Built-in styles available in @citation-js/plugin-csl\n * These can be used directly without loading external files\n */\nexport const BUILTIN_STYLES = [\"apa\", \"vancouver\", \"harvard\"] as const;\n\nexport type BuiltinStyleName = (typeof BUILTIN_STYLES)[number];\n\n/**\n * Check if a style name is a built-in style\n */\nexport function isBuiltinStyle(styleName: string): styleName is BuiltinStyleName {\n return BUILTIN_STYLES.includes(styleName as BuiltinStyleName);\n}\n\nexport interface StyleResolutionOptions {\n /**\n * Exact path to CSL file (from --csl-file option)\n * Takes highest priority\n */\n cslFile?: string;\n\n /**\n * Style name to resolve (from --style option)\n */\n style?: string;\n\n /**\n * Directory or directories to search for custom CSL files\n * (from csl_directory config)\n * Can be a single string or array of strings\n */\n cslDirectory?: string | string[];\n\n /**\n * Default style to use if specified style not found\n * (from default_style config)\n */\n defaultStyle?: string;\n}\n\nexport interface StyleResolution {\n /**\n * Type of resolution: \"builtin\" for citation-js built-in styles,\n * \"custom\" for external CSL files\n */\n type: \"builtin\" | \"custom\";\n\n /**\n * The resolved style name (for built-in) or identifier (for custom)\n */\n styleName: string;\n\n /**\n * CSL XML content (only for custom styles)\n */\n styleXml?: string;\n}\n\n/**\n * Expand tilde (~) in path to home directory\n */\nfunction expandTilde(filePath: string): string {\n if (filePath.startsWith(\"~/\")) {\n const home = process.env.HOME || process.env.USERPROFILE || \"\";\n return path.join(home, filePath.slice(2));\n }\n return filePath;\n}\n\n/**\n * Load CSL style file content from the given path\n *\n * @param stylePath - Path to the CSL style file\n * @returns Content of the CSL style file (XML string)\n * @throws Error if file cannot be read\n */\nexport function loadCSLStyleFile(stylePath: string): string {\n return fs.readFileSync(stylePath, \"utf-8\");\n}\n\n/**\n * Resolve the style based on resolution options\n *\n * Resolution order:\n * 1. cslFile (exact path) - throws if doesn't exist\n * 2. Built-in style matching style name\n * 3. Search in csl_directory paths (in order)\n * 4. Default style (defaultStyle) - if built-in\n * 5. \"apa\" (hardcoded fallback)\n *\n * @param options - Style resolution options\n * @returns StyleResolution with type, styleName, and optional styleXml\n * @throws Error if cslFile is specified but doesn't exist\n */\nexport function resolveStyle(options: StyleResolutionOptions): StyleResolution {\n const { cslFile, style, cslDirectory, defaultStyle } = options;\n\n // 1. If cslFile is specified, use it (highest priority)\n if (cslFile) {\n if (!fs.existsSync(cslFile)) {\n throw new Error(`CSL file '${cslFile}' not found`);\n }\n const styleXml = loadCSLStyleFile(cslFile);\n const styleName = path.basename(cslFile, \".csl\");\n return {\n type: \"custom\",\n styleName,\n styleXml,\n };\n }\n\n // Determine which style name to try\n const styleToResolve = style || defaultStyle || \"apa\";\n\n // 2. Check if it's a built-in style\n if (isBuiltinStyle(styleToResolve)) {\n return {\n type: \"builtin\",\n styleName: styleToResolve,\n };\n }\n\n // 3. Search in csl_directory paths\n if (cslDirectory) {\n const directories = Array.isArray(cslDirectory) ? cslDirectory : [cslDirectory];\n\n for (const dir of directories) {\n const expandedDir = expandTilde(dir);\n const stylePath = path.join(expandedDir, `${styleToResolve}.csl`);\n\n if (fs.existsSync(stylePath)) {\n const styleXml = loadCSLStyleFile(stylePath);\n return {\n type: \"custom\",\n styleName: styleToResolve,\n styleXml,\n };\n }\n }\n }\n\n // 4. Fall back to default style if it's built-in\n if (defaultStyle && isBuiltinStyle(defaultStyle)) {\n return {\n type: \"builtin\",\n styleName: defaultStyle,\n };\n }\n\n // 5. Fall back to apa (hardcoded default)\n return {\n type: \"builtin\",\n styleName: \"apa\",\n };\n}\n","import { rmdir, unlink } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { CslItem } from \"../../core/csl-json/types.js\";\nimport type { ILibrary, IdentifierType } from \"../../core/library-interface.js\";\nimport type { Attachments } from \"../attachments/types.js\";\nimport type { FulltextType } from \"../fulltext/index.js\";\nimport { extensionToFormat, findFulltextFiles } from \"./fulltext-adapter/index.js\";\n\n/**\n * Options for removeReference operation\n */\nexport interface RemoveOperationOptions {\n /** Reference ID or UUID */\n identifier: string;\n /** Identifier type: 'id' (default), 'uuid', 'doi', 'pmid', or 'isbn' */\n idType?: IdentifierType;\n /** Directory containing fulltext files (required if deleteFulltext is true) */\n fulltextDirectory?: string;\n /** Whether to delete associated fulltext files */\n deleteFulltext?: boolean;\n}\n\n/**\n * Result of removeReference operation\n */\nexport interface RemoveResult {\n /** Whether the reference was removed */\n removed: boolean;\n /** The removed item (if found and removal succeeded) */\n removedItem?: CslItem;\n /** Fulltext types that were deleted (only when deleteFulltext=true) */\n deletedFulltextTypes?: FulltextType[];\n}\n\n/**\n * Get fulltext attachment types from a CSL item.\n */\nexport function getFulltextAttachmentTypes(item: CslItem): FulltextType[] {\n const types: FulltextType[] = [];\n\n // Check attachments structure\n const attachments = item.custom?.attachments as Attachments | undefined;\n const fulltextFiles = findFulltextFiles(attachments);\n for (const file of fulltextFiles) {\n const ext = file.filename.split(\".\").pop()?.toLowerCase();\n const format = ext ? extensionToFormat(ext) : undefined;\n if (format && !types.includes(format)) {\n types.push(format);\n }\n }\n\n return types;\n}\n\n/**\n * Delete fulltext files associated with an item.\n */\nasync function deleteFulltextFiles(item: CslItem, fulltextDirectory: string): Promise<void> {\n const filesToDelete: string[] = [];\n\n // Check attachments structure\n const attachments = item.custom?.attachments as Attachments | undefined;\n if (attachments?.directory) {\n const fulltextFiles = findFulltextFiles(attachments);\n for (const file of fulltextFiles) {\n filesToDelete.push(join(fulltextDirectory, attachments.directory, file.filename));\n }\n }\n\n // Delete individual files\n for (const filePath of filesToDelete) {\n try {\n await unlink(filePath);\n } catch {\n // Ignore errors (file might not exist)\n }\n }\n\n // Try to remove the attachments directory if it's now empty\n if (attachments?.directory) {\n try {\n const dirPath = join(fulltextDirectory, attachments.directory);\n await rmdir(dirPath); // Only removes if empty\n } catch {\n // Ignore - directory might not be empty or not exist\n }\n }\n}\n\n/**\n * Remove a reference from the library.\n *\n * @param library - The library to remove from\n * @param options - Remove options including identifier and lookup method\n * @returns Result indicating success and the removed item\n */\nexport async function removeReference(\n library: ILibrary,\n options: RemoveOperationOptions\n): Promise<RemoveResult> {\n const { identifier, idType = \"id\", fulltextDirectory, deleteFulltext = false } = options;\n\n const result = await library.remove(identifier, { idType });\n\n if (!result.removed || !result.removedItem) {\n return { removed: false };\n }\n\n // Delete fulltext files if requested\n let deletedFulltextTypes: FulltextType[] | undefined;\n if (deleteFulltext && fulltextDirectory) {\n deletedFulltextTypes = getFulltextAttachmentTypes(result.removedItem);\n if (deletedFulltextTypes.length > 0) {\n await deleteFulltextFiles(result.removedItem, fulltextDirectory);\n }\n }\n\n await library.save();\n\n return {\n removed: true,\n removedItem: result.removedItem,\n ...(deletedFulltextTypes && deletedFulltextTypes.length > 0 && { deletedFulltextTypes }),\n };\n}\n","/**\n * Response cache for PMID and DOI metadata\n *\n * In-memory cache with TTL to avoid redundant API calls.\n * - Per ADR-001: No persistent cache files on disk\n * - Cache is warm during interactive sessions (server mode)\n * - CLI invocations start fresh\n */\n\nimport type { CslItem } from \"../../core/csl-json/types.js\";\n\n/** Default TTL: 1 hour */\nconst DEFAULT_TTL_MS = 60 * 60 * 1000;\n\n/**\n * Cache configuration\n */\nexport interface CacheConfig {\n /** Time-to-live in milliseconds (default: 1 hour) */\n ttlMs?: number;\n}\n\n/**\n * Cache entry with timestamp and TTL\n */\ninterface CacheEntry {\n item: CslItem;\n cachedAt: number;\n ttlMs: number;\n}\n\n/** PMID cache: Map<pmid, CacheEntry> */\nconst pmidCache = new Map<string, CacheEntry>();\n\n/** DOI cache: Map<doi, CacheEntry> */\nconst doiCache = new Map<string, CacheEntry>();\n\n/** ISBN cache: Map<isbn, CacheEntry> */\nconst isbnCache = new Map<string, CacheEntry>();\n\n/**\n * Check if a cache entry is still valid\n */\nfunction isEntryValid(entry: CacheEntry): boolean {\n const now = Date.now();\n return now - entry.cachedAt < entry.ttlMs;\n}\n\n/**\n * Get item from cache if valid\n */\nfunction getFromCache(cache: Map<string, CacheEntry>, key: string): CslItem | undefined {\n const entry = cache.get(key);\n if (!entry) {\n return undefined;\n }\n if (!isEntryValid(entry)) {\n cache.delete(key);\n return undefined;\n }\n return entry.item;\n}\n\n/**\n * Store item in cache\n */\nfunction storeInCache(\n cache: Map<string, CacheEntry>,\n key: string,\n item: CslItem,\n config?: CacheConfig\n): void {\n const ttlMs = config?.ttlMs ?? DEFAULT_TTL_MS;\n cache.set(key, {\n item,\n cachedAt: Date.now(),\n ttlMs,\n });\n}\n\n/**\n * Get cached PMID result\n */\nexport function getPmidFromCache(pmid: string): CslItem | undefined {\n return getFromCache(pmidCache, pmid);\n}\n\n/**\n * Cache PMID result\n */\nexport function cachePmidResult(pmid: string, item: CslItem, config?: CacheConfig): void {\n storeInCache(pmidCache, pmid, item, config);\n}\n\n/**\n * Get cached DOI result\n */\nexport function getDoiFromCache(doi: string): CslItem | undefined {\n return getFromCache(doiCache, doi);\n}\n\n/**\n * Cache DOI result\n */\nexport function cacheDoiResult(doi: string, item: CslItem, config?: CacheConfig): void {\n storeInCache(doiCache, doi, item, config);\n}\n\n/**\n * Get cached ISBN result\n */\nexport function getIsbnFromCache(isbn: string): CslItem | undefined {\n return getFromCache(isbnCache, isbn);\n}\n\n/**\n * Cache ISBN result\n */\nexport function cacheIsbnResult(isbn: string, item: CslItem, config?: CacheConfig): void {\n storeInCache(isbnCache, isbn, item, config);\n}\n\n/**\n * Reset all caches (for test isolation)\n */\nexport function resetCache(): void {\n pmidCache.clear();\n doiCache.clear();\n isbnCache.clear();\n}\n","/**\n * DOI normalizer module\n *\n * Normalizes DOI identifiers by:\n * - Removing URL prefixes (doi.org, dx.doi.org)\n * - Trimming whitespace\n */\n\n/**\n * URL prefixes to remove from DOI\n */\nconst DOI_URL_PREFIXES = [\n \"https://doi.org/\",\n \"http://doi.org/\",\n \"https://dx.doi.org/\",\n \"http://dx.doi.org/\",\n];\n\n/**\n * Normalize a DOI identifier\n *\n * @param doi - DOI string, possibly with URL prefix\n * @returns Normalized DOI (10.xxx/xxx format)\n */\nexport function normalizeDoi(doi: string): string {\n // Trim whitespace\n const trimmed = doi.trim();\n\n if (!trimmed) {\n return \"\";\n }\n\n // Check for URL prefixes (case-insensitive)\n const lowerInput = trimmed.toLowerCase();\n\n for (const prefix of DOI_URL_PREFIXES) {\n if (lowerInput.startsWith(prefix.toLowerCase())) {\n // Remove the prefix while preserving the original case of the DOI\n return trimmed.slice(prefix.length);\n }\n }\n\n // No prefix found, return as-is\n return trimmed;\n}\n\n/**\n * Normalizes a PMID by removing the optional \"PMID:\" prefix and trimming whitespace.\n *\n * Supported formats:\n * - \"12345678\" -> \"12345678\"\n * - \"PMID:12345678\" -> \"12345678\"\n * - \"pmid:12345678\" -> \"12345678\"\n * - \"PMID: 12345678\" -> \"12345678\" (space after colon)\n *\n * @param pmid - The PMID string to normalize\n * @returns The normalized PMID (digits only) or empty string if invalid\n */\nexport function normalizePmid(pmid: string): string {\n // Trim whitespace\n const trimmed = pmid.trim();\n\n if (!trimmed) {\n return \"\";\n }\n\n // Remove \"PMID:\" prefix (case-insensitive, optional whitespace after colon)\n const normalized = trimmed.replace(/^pmid:\\s*/i, \"\");\n\n return normalized.trim();\n}\n\n/**\n * Normalizes an ISBN by removing the \"ISBN:\" prefix, hyphens, spaces, and uppercasing X.\n *\n * Supported formats:\n * - \"ISBN:978-4-00-000000-0\" -> \"9784000000000\"\n * - \"isbn:4-00-000000-0\" -> \"4000000000\"\n * - \"ISBN: 978 4 00 000000 0\" -> \"9784000000000\"\n * - \"ISBN:400000000x\" -> \"400000000X\" (uppercase X)\n *\n * @param isbn - The ISBN string to normalize\n * @returns The normalized ISBN (digits only, X uppercase at end for ISBN-10) or empty string if invalid\n */\nexport function normalizeIsbn(isbn: string): string {\n // Trim whitespace\n const trimmed = isbn.trim();\n\n if (!trimmed) {\n return \"\";\n }\n\n // Check for ISBN: prefix (case-insensitive)\n if (!/^isbn:/i.test(trimmed)) {\n return \"\";\n }\n\n // Remove \"ISBN:\" prefix (case-insensitive, optional whitespace after colon)\n let normalized = trimmed.replace(/^isbn:\\s*/i, \"\");\n\n // Remove hyphens and spaces\n normalized = normalized.replace(/[-\\s]/g, \"\");\n\n // Uppercase X (for ISBN-10 check digit)\n normalized = normalized.toUpperCase();\n\n return normalized;\n}\n","/**\n * Format detection module for multi-format import\n *\n * Detects input format based on:\n * - File extension (.json, .bib, .ris)\n * - Content patterns (JSON, BibTeX, RIS)\n * - Identifier patterns (PMID, DOI)\n * - Multiple whitespace-separated identifiers\n */\n\nimport { normalizeIsbn, normalizePmid } from \"./normalizer.js\";\n\n/**\n * Supported input formats\n */\nexport type InputFormat =\n | \"json\"\n | \"bibtex\"\n | \"ris\"\n | \"nbib\"\n | \"pmid\"\n | \"doi\"\n | \"isbn\"\n | \"identifiers\"\n | \"unknown\";\n\n/**\n * Extension to format mapping\n */\nconst EXTENSION_MAP: Record<string, InputFormat> = {\n \".json\": \"json\",\n \".bib\": \"bibtex\",\n \".ris\": \"ris\",\n \".nbib\": \"nbib\",\n};\n\n/**\n * DOI URL prefixes to strip\n */\nconst DOI_URL_PREFIXES = [\n \"https://doi.org/\",\n \"http://doi.org/\",\n \"https://dx.doi.org/\",\n \"http://dx.doi.org/\",\n];\n\n/**\n * Detect the format of the given input\n *\n * @param input - File path, identifier, or empty string for stdin\n * @param content - Optional content to analyze (for stdin or unknown extension)\n * @returns Detected format\n */\nexport function detectFormat(input: string, content?: string): InputFormat {\n // 1. Try extension-based detection first\n const extFormat = detectByExtension(input);\n if (extFormat !== \"unknown\") {\n return extFormat;\n }\n\n // 2. If content provided, try content-based detection\n if (content !== undefined) {\n const contentFormat = detectByContent(content);\n if (contentFormat !== \"unknown\") {\n return contentFormat;\n }\n }\n\n // 3. Try identifier detection on input string\n if (input.length > 0) {\n const identifierFormat = detectIdentifier(input);\n if (identifierFormat !== \"unknown\") {\n return identifierFormat;\n }\n }\n\n return \"unknown\";\n}\n\n/**\n * Detect format based on file extension\n */\nexport function detectByExtension(input: string): InputFormat {\n if (!input) return \"unknown\";\n\n // Extract extension (last dot and onwards)\n const dotIndex = input.lastIndexOf(\".\");\n if (dotIndex === -1 || dotIndex === input.length - 1) {\n return \"unknown\";\n }\n\n const ext = input.slice(dotIndex).toLowerCase();\n return EXTENSION_MAP[ext] ?? \"unknown\";\n}\n\n/**\n * Detect format based on content patterns\n */\nexport function detectByContent(content: string): InputFormat {\n const trimmed = content.trim();\n if (!trimmed) return \"unknown\";\n\n // JSON: starts with [ or {\n if (trimmed.startsWith(\"[\") || trimmed.startsWith(\"{\")) {\n return \"json\";\n }\n\n // BibTeX: starts with @\n if (trimmed.startsWith(\"@\")) {\n return \"bibtex\";\n }\n\n // RIS: starts with TY - (tag format)\n if (trimmed.startsWith(\"TY -\")) {\n return \"ris\";\n }\n\n // NBIB (PubMed MEDLINE): starts with PMID-\n if (trimmed.startsWith(\"PMID-\")) {\n return \"nbib\";\n }\n\n // Check if content is multiple identifiers\n return detectIdentifier(trimmed);\n}\n\n/**\n * Detect if input is an identifier (PMID, DOI, ISBN) or multiple identifiers\n */\nfunction detectIdentifier(input: string): InputFormat {\n // Split by whitespace\n const parts = input.split(/\\s+/).filter((p) => p.length > 0);\n\n if (parts.length === 0) {\n return \"unknown\";\n }\n\n // Check each part\n const formats: (\"pmid\" | \"doi\" | \"isbn\")[] = [];\n for (const part of parts) {\n const format = detectSingleIdentifier(part);\n if (format === \"unknown\") {\n // If any part is not a valid identifier, return unknown\n return \"unknown\";\n }\n formats.push(format);\n }\n\n // Single identifier returns its specific format\n if (formats.length === 1) {\n // formats[0] is guaranteed to exist when length === 1\n return formats[0] as \"pmid\" | \"doi\" | \"isbn\";\n }\n\n // Multiple valid identifiers\n return \"identifiers\";\n}\n\n/**\n * Detect if a single string is a PMID, DOI, or ISBN\n */\nexport function detectSingleIdentifier(input: string): \"pmid\" | \"doi\" | \"isbn\" | \"unknown\" {\n // DOI: starts with 10. or is a DOI URL\n if (isDoi(input)) {\n return \"doi\";\n }\n\n // ISBN: requires ISBN: prefix\n if (isIsbn(input)) {\n return \"isbn\";\n }\n\n // PMID: numeric only (must be after ISBN check to avoid conflicts)\n if (isPmid(input)) {\n return \"pmid\";\n }\n\n return \"unknown\";\n}\n\n/**\n * Check if string is a valid DOI\n */\nexport function isDoi(input: string): boolean {\n // Check DOI URL formats\n for (const prefix of DOI_URL_PREFIXES) {\n if (input.toLowerCase().startsWith(prefix.toLowerCase())) {\n const remainder = input.slice(prefix.length);\n return isDoiFormat(remainder);\n }\n }\n\n // Check standard DOI format (10.xxx/xxx)\n return isDoiFormat(input);\n}\n\n/**\n * Check if string is a valid DOI format (10.xxx/xxx)\n */\nfunction isDoiFormat(input: string): boolean {\n // DOI starts with 10. followed by registrant code and suffix\n // Pattern: 10.{registrant}/{suffix}\n if (!input.startsWith(\"10.\")) {\n return false;\n }\n\n // Must have content after 10.\n if (input.length <= 3) {\n return false;\n }\n\n // Must have a slash after registrant code\n const slashIndex = input.indexOf(\"/\");\n if (slashIndex === -1 || slashIndex <= 3) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Check if string is a valid PMID (numeric only)\n */\nexport function isPmid(input: string): boolean {\n if (!input || input.length === 0) {\n return false;\n }\n\n // Normalize input (removes PMID: prefix if present)\n const normalized = normalizePmid(input);\n\n if (!normalized) {\n return false;\n }\n\n // PMID is all digits\n return /^\\d+$/.test(normalized);\n}\n\n/**\n * Check if string is a valid ISBN (requires ISBN: prefix)\n *\n * ISBN must have ISBN: prefix and be either:\n * - ISBN-13: 13 digits\n * - ISBN-10: 10 digits (last may be X)\n */\nexport function isIsbn(input: string): boolean {\n if (!input || input.length === 0) {\n return false;\n }\n\n // Normalize input (removes ISBN: prefix if present, hyphens, spaces)\n const normalized = normalizeIsbn(input);\n\n if (!normalized) {\n return false;\n }\n\n // Check length: ISBN-10 (10 chars) or ISBN-13 (13 chars)\n if (normalized.length !== 10 && normalized.length !== 13) {\n return false;\n }\n\n // ISBN-10: 9 digits + (digit or X)\n if (normalized.length === 10) {\n // First 9 must be digits, last can be digit or X\n if (!/^\\d{9}[\\dX]$/.test(normalized)) {\n return false;\n }\n return true;\n }\n\n // ISBN-13: all digits\n if (!/^\\d{13}$/.test(normalized)) {\n return false;\n }\n\n return true;\n}\n","/**\n * Rate limiter module for API calls\n *\n * Uses factory + lazy initialization singleton pattern:\n * - RateLimiter class: Delay-based rate limiting with configurable requests/second\n * - getRateLimiter(api, config): Returns singleton per API type\n * - resetRateLimiters(): Clears singletons for test isolation\n */\n\n/**\n * API types supported by the rate limiter\n */\nexport type ApiType = \"pubmed\" | \"crossref\" | \"isbn\";\n\n/**\n * Configuration for rate limiter\n */\nexport interface RateLimiterConfig {\n pubmedApiKey?: string;\n}\n\n/**\n * Rate limiter interface\n */\nexport interface RateLimiter {\n readonly requestsPerSecond: number;\n readonly intervalMs: number;\n readonly lastRequestTime: number;\n acquire(): Promise<void>;\n}\n\n/**\n * Rate limit settings per API type\n */\nconst RATE_LIMITS = {\n pubmed: {\n withoutApiKey: 3, // 3 req/sec\n withApiKey: 10, // 10 req/sec\n },\n crossref: 50, // 50 req/sec\n isbn: 10, // 10 req/sec (conservative for Google Books API daily limit)\n} as const;\n\n/**\n * Internal rate limiter implementation\n */\nclass RateLimiterImpl implements RateLimiter {\n readonly requestsPerSecond: number;\n readonly intervalMs: number;\n private _lastRequestTime = 0;\n private _pending: Promise<void> = Promise.resolve();\n\n constructor(requestsPerSecond: number) {\n this.requestsPerSecond = requestsPerSecond;\n this.intervalMs = 1000 / requestsPerSecond;\n }\n\n get lastRequestTime(): number {\n return this._lastRequestTime;\n }\n\n async acquire(): Promise<void> {\n // Chain onto pending promise to ensure sequential processing\n this._pending = this._pending.then(() => this._acquireInternal());\n return this._pending;\n }\n\n private async _acquireInternal(): Promise<void> {\n const now = Date.now();\n const elapsed = now - this._lastRequestTime;\n const waitTime = Math.max(0, this.intervalMs - elapsed);\n\n if (waitTime > 0 && this._lastRequestTime > 0) {\n await this._delay(waitTime);\n }\n\n this._lastRequestTime = Date.now();\n }\n\n private _delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n\n/**\n * Singleton storage for rate limiters by API type\n */\nconst limiters = new Map<ApiType, RateLimiter>();\n\n/**\n * Create a new rate limiter instance\n */\nexport function createRateLimiter(options: {\n requestsPerSecond: number;\n}): RateLimiter {\n return new RateLimiterImpl(options.requestsPerSecond);\n}\n\n/**\n * Get singleton rate limiter for the specified API type\n *\n * Note: Configuration is only used on first call. Subsequent calls\n * return the existing singleton regardless of config changes.\n */\nexport function getRateLimiter(api: ApiType, config: RateLimiterConfig): RateLimiter {\n const existing = limiters.get(api);\n if (existing) {\n return existing;\n }\n\n const requestsPerSecond = getRequestsPerSecond(api, config);\n const limiter = createRateLimiter({ requestsPerSecond });\n limiters.set(api, limiter);\n\n return limiter;\n}\n\n/**\n * Determine requests per second based on API type and configuration\n */\nfunction getRequestsPerSecond(api: ApiType, config: RateLimiterConfig): number {\n switch (api) {\n case \"pubmed\":\n return config.pubmedApiKey ? RATE_LIMITS.pubmed.withApiKey : RATE_LIMITS.pubmed.withoutApiKey;\n case \"crossref\":\n return RATE_LIMITS.crossref;\n case \"isbn\":\n return RATE_LIMITS.isbn;\n }\n}\n\n/**\n * Reset all rate limiter singletons (for test isolation)\n */\nexport function resetRateLimiters(): void {\n limiters.clear();\n}\n","/**\n * Fetcher module for PMID and DOI metadata retrieval\n *\n * - PMID: Uses PMC Citation Exporter API (returns CSL-JSON directly)\n * - DOI: Uses citation-js plugin-doi (Cite.async)\n */\n\nimport { Cite } from \"@citation-js/core\";\nimport \"@citation-js/plugin-doi\";\nimport \"@citation-js/plugin-isbn\";\nimport { type CslItem, CslItemSchema } from \"../../core/csl-json/types.js\";\nimport { getRateLimiter } from \"./rate-limiter.js\";\n\n/** PMC Citation Exporter API base URL */\nconst PMC_API_BASE = \"https://pmc.ncbi.nlm.nih.gov/api/ctxp/v1/pubmed/\";\n\n/** Default timeout for API requests (10 seconds) */\nconst DEFAULT_TIMEOUT_MS = 10000;\n\n/** DOI pattern for validation */\nconst DOI_PATTERN = /^10\\.\\d{4,}(?:\\.\\d+)*\\/\\S+$/;\n\n/**\n * PubMed configuration for API requests\n */\nexport interface PubmedConfig {\n email?: string;\n apiKey?: string;\n}\n\n/**\n * Categorized failure reasons for JSON output\n */\nexport type FailureReason =\n | \"not_found\"\n | \"fetch_error\"\n | \"parse_error\"\n | \"validation_error\"\n | \"unknown\";\n\n/**\n * Result of fetching a single identifier\n */\nexport type FetchResult =\n | { success: true; item: CslItem }\n | { success: false; error: string; reason: FailureReason };\n\n/**\n * Result of fetching a PMID (includes pmid for tracking)\n */\nexport type PmidFetchResult =\n | { pmid: string; success: true; item: CslItem }\n | { pmid: string; success: false; error: string; reason: FailureReason };\n\n/**\n * Results of fetching multiple PMIDs\n */\nexport type FetchResults = PmidFetchResult[];\n\n/**\n * Build PMC API URL with query parameters\n */\nfunction buildPmcUrl(pmids: string[], config: PubmedConfig): string {\n const url = new URL(PMC_API_BASE);\n url.searchParams.set(\"format\", \"csl\");\n\n // Add each PMID as separate id parameter\n for (const pmid of pmids) {\n url.searchParams.append(\"id\", pmid);\n }\n\n if (config.email) {\n url.searchParams.set(\"email\", config.email);\n }\n if (config.apiKey) {\n url.searchParams.set(\"api_key\", config.apiKey);\n }\n\n return url.toString();\n}\n\n/**\n * Extract PMID from CSL-JSON item id field\n * PMC API returns id like \"pmid:12345678\"\n */\nfunction extractPmidFromId(id: string | undefined): string | undefined {\n if (!id) return undefined;\n const match = id.match(/^pmid:(\\d+)$/);\n return match?.[1];\n}\n\n/**\n * Fetch metadata for multiple PMIDs from PMC Citation Exporter API\n *\n * Uses batch API endpoint: /api/ctxp/v1/pubmed/?format=csl&id=1&id=2\n */\n\n/**\n * Parse raw API items and build maps of found items and validation errors\n */\nfunction parseRawItems(rawItems: unknown[]): {\n foundItems: Map<string, CslItem>;\n validationErrors: Map<string, string>;\n} {\n const foundItems = new Map<string, CslItem>();\n const validationErrors = new Map<string, string>();\n\n for (const rawItem of rawItems) {\n const parseResult = CslItemSchema.safeParse(rawItem);\n if (parseResult.success) {\n const pmid = extractPmidFromId(parseResult.data.id);\n if (pmid) {\n foundItems.set(pmid, parseResult.data);\n }\n } else {\n // Try to extract pmid even from invalid data for error reporting\n const maybeId = (rawItem as { id?: string })?.id;\n const pmid = extractPmidFromId(maybeId);\n if (pmid) {\n validationErrors.set(pmid, parseResult.error.message);\n }\n }\n }\n\n return { foundItems, validationErrors };\n}\n\n/**\n * Build fetch result for a single PMID\n */\nfunction buildPmidResult(\n pmid: string,\n foundItems: Map<string, CslItem>,\n validationErrors: Map<string, string>\n): PmidFetchResult {\n const item = foundItems.get(pmid);\n if (item) {\n return { pmid, success: true as const, item };\n }\n const validationError = validationErrors.get(pmid);\n if (validationError) {\n return {\n pmid,\n success: false as const,\n error: `Invalid CSL-JSON data: ${validationError}`,\n reason: \"validation_error\",\n };\n }\n return {\n pmid,\n success: false as const,\n error: `PMID ${pmid} not found`,\n reason: \"not_found\",\n };\n}\n\nexport async function fetchPmids(pmids: string[], config: PubmedConfig): Promise<FetchResults> {\n // Return empty array for empty input\n if (pmids.length === 0) {\n return [];\n }\n\n // Apply rate limiting\n const rateLimiterConfig = config.apiKey ? { pubmedApiKey: config.apiKey } : {};\n const rateLimiter = getRateLimiter(\"pubmed\", rateLimiterConfig);\n await rateLimiter.acquire();\n\n const url = buildPmcUrl(pmids, config);\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n signal: AbortSignal.timeout(DEFAULT_TIMEOUT_MS),\n });\n\n if (!response.ok) {\n // Return error for all PMIDs\n const errorMsg = `HTTP ${response.status}: ${response.statusText}`;\n return pmids.map((pmid) => ({\n pmid,\n success: false as const,\n error: errorMsg,\n reason: \"fetch_error\",\n }));\n }\n\n const data = await response.json();\n\n // Normalize response to array\n const rawItems: unknown[] = Array.isArray(data) ? data : [data];\n\n // Parse raw items and build results\n const { foundItems, validationErrors } = parseRawItems(rawItems);\n\n // Build results for each requested PMID\n return pmids.map((pmid) => buildPmidResult(pmid, foundItems, validationErrors));\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n return pmids.map((pmid) => ({\n pmid,\n success: false as const,\n error: errorMsg,\n reason: \"fetch_error\",\n }));\n }\n}\n\n/**\n * Fetch metadata for a DOI using citation-js\n *\n * Uses @citation-js/plugin-doi for content negotiation\n */\nexport async function fetchDoi(doi: string): Promise<FetchResult> {\n // Validate DOI format\n if (!DOI_PATTERN.test(doi)) {\n return {\n success: false,\n error: `Invalid DOI format: ${doi}`,\n reason: \"validation_error\",\n };\n }\n\n // Apply rate limiting (crossref)\n const rateLimiter = getRateLimiter(\"crossref\", {});\n await rateLimiter.acquire();\n\n try {\n // Use citation-js Cite.async for DOI resolution\n const cite = await Cite.async(doi);\n const rawItems = cite.get({ format: \"real\", type: \"json\" });\n\n if (!rawItems || !Array.isArray(rawItems) || rawItems.length === 0) {\n return {\n success: false,\n error: `No data returned for DOI ${doi}`,\n reason: \"not_found\",\n };\n }\n\n // Validate using zod schema\n const parseResult = CslItemSchema.safeParse(rawItems[0]);\n if (!parseResult.success) {\n return {\n success: false,\n error: `Invalid CSL-JSON data for DOI ${doi}: ${parseResult.error.message}`,\n reason: \"validation_error\",\n };\n }\n\n return { success: true, item: parseResult.data };\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n error: errorMsg,\n reason: \"fetch_error\",\n };\n }\n}\n\n/** ISBN-10 pattern: 9 digits + (digit or X) */\nconst ISBN10_PATTERN = /^\\d{9}[\\dX]$/;\n\n/** ISBN-13 pattern: 13 digits */\nconst ISBN13_PATTERN = /^\\d{13}$/;\n\n/**\n * Fetch metadata for an ISBN using Google Books API via citation-js\n *\n * @param isbn - Normalized ISBN (10 or 13 digits, no hyphens)\n * @returns FetchResult with CSL-JSON item or error\n */\nexport async function fetchIsbn(isbn: string): Promise<FetchResult> {\n // Validate ISBN format\n if (!ISBN10_PATTERN.test(isbn) && !ISBN13_PATTERN.test(isbn)) {\n return {\n success: false,\n error: `Invalid ISBN format: ${isbn}`,\n reason: \"validation_error\",\n };\n }\n\n // Apply rate limiting (google books - daily limit so we use a generic limiter)\n const rateLimiter = getRateLimiter(\"isbn\", {});\n await rateLimiter.acquire();\n\n try {\n // Use citation-js Cite.async for ISBN resolution\n const cite = await Cite.async(isbn);\n const rawItems = cite.get({ format: \"real\", type: \"json\" });\n\n if (!rawItems || !Array.isArray(rawItems) || rawItems.length === 0) {\n return {\n success: false,\n error: `No data returned for ISBN ${isbn}`,\n reason: \"not_found\",\n };\n }\n\n // Validate using zod schema\n const parseResult = CslItemSchema.safeParse(rawItems[0]);\n if (!parseResult.success) {\n return {\n success: false,\n error: `Invalid CSL-JSON data for ISBN ${isbn}: ${parseResult.error.message}`,\n reason: \"validation_error\",\n };\n }\n\n return { success: true, item: parseResult.data };\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n error: errorMsg,\n reason: \"fetch_error\",\n };\n }\n}\n","/**\n * Parser module for BibTeX and RIS formats\n *\n * Uses citation-js plugins for parsing:\n * - @citation-js/plugin-bibtex for BibTeX\n * - @citation-js/plugin-ris for RIS\n */\n\nimport { Cite } from \"@citation-js/core\";\nimport \"@citation-js/plugin-bibtex\";\nimport \"@citation-js/plugin-ris\";\nimport type { CslItem } from \"../../core/csl-json/types.js\";\n\n/**\n * Result of a parse operation\n */\nexport type ParseResult = {\n success: boolean;\n items: CslItem[];\n error?: string;\n};\n\n/**\n * Parse BibTeX content to CSL-JSON\n *\n * @param content - BibTeX content string\n * @returns Parse result with CSL-JSON items\n */\nexport function parseBibtex(content: string): ParseResult {\n return parseWithCitationJs(content, \"bibtex\");\n}\n\n/**\n * Parse RIS content to CSL-JSON\n *\n * @param content - RIS content string\n * @returns Parse result with CSL-JSON items\n */\nexport function parseRis(content: string): ParseResult {\n return parseWithCitationJs(content, \"ris\");\n}\n\n/**\n * NBIB to RIS tag mapping\n *\n * Maps PubMed MEDLINE tags to RIS equivalents\n */\nconst NBIB_TO_RIS_TAG_MAP: Record<string, string> = {\n PMID: \"AN\", // PubMed ID -> Accession Number\n TI: \"TI\", // Title -> Title\n FAU: \"AU\", // Full Author -> Author\n AU: \"AU\", // Author -> Author (short form, use FAU when available)\n JT: \"JO\", // Journal Title -> Journal Name\n TA: \"JA\", // Title Abbreviation -> Journal Abbreviation\n AB: \"AB\", // Abstract -> Abstract\n VI: \"VL\", // Volume -> Volume\n IP: \"IS\", // Issue/Part -> Issue Number\n PG: \"SP\", // Pagination -> Start Page (includes range)\n DP: \"PY\", // Date of Publication -> Publication Year\n LA: \"LA\", // Language -> Language\n MH: \"KW\", // MeSH Headings -> Keywords\n OT: \"KW\", // Other Terms -> Keywords\n AD: \"AD\", // Affiliation/Address -> Author Address\n IS: \"SN\", // ISSN -> Serial Number\n PT: \"TY\", // Publication Type -> Type of Reference\n};\n\n/**\n * Publication type mapping from NBIB to RIS\n */\nconst NBIB_PUBLICATION_TYPE_MAP: Record<string, string> = {\n \"Journal Article\": \"JOUR\",\n Review: \"JOUR\",\n Book: \"BOOK\",\n \"Book Chapter\": \"CHAP\",\n \"Conference Paper\": \"CPAPER\",\n Thesis: \"THES\",\n Report: \"RPRT\",\n};\n\n/**\n * Parse a single NBIB entry into tag-value pairs\n */\nfunction parseNbibEntry(entry: string): Array<{ tag: string; value: string }> {\n const result: Array<{ tag: string; value: string }> = [];\n const lines = entry.split(\"\\n\");\n\n let currentTag = \"\";\n let currentValue = \"\";\n\n for (const line of lines) {\n // Check if line starts with a tag (2-4 uppercase letters followed by space(s) and dash)\n const tagMatch = line.match(/^([A-Z]{2,4})\\s*-\\s*(.*)$/);\n\n if (tagMatch) {\n // Save previous tag-value pair\n if (currentTag) {\n result.push({ tag: currentTag, value: currentValue.trim() });\n }\n currentTag = tagMatch[1] ?? \"\";\n currentValue = tagMatch[2] ?? \"\";\n } else if (currentTag && line.match(/^\\s+/)) {\n // Continuation line (starts with whitespace)\n currentValue += ` ${line.trim()}`;\n }\n }\n\n // Save the last tag-value pair\n if (currentTag) {\n result.push({ tag: currentTag, value: currentValue.trim() });\n }\n\n return result;\n}\n\n/**\n * Convert a single NBIB tag-value pair to RIS line\n * @returns RIS line or null if tag should be skipped\n */\nfunction convertNbibTagToRisLine(\n tag: string,\n value: string\n): { line: string; isType?: boolean } | null {\n // Handle DOI specially (AID tag with [doi] suffix)\n if (tag === \"AID\" && value.includes(\"[doi]\")) {\n const doi = value.replace(/\\s*\\[doi\\].*$/, \"\").trim();\n return { line: `DO - ${doi}` };\n }\n\n // Handle PII specially (AID tag with [pii] suffix)\n if (tag === \"AID\" && value.includes(\"[pii]\")) {\n const pii = value.replace(/\\s*\\[pii\\].*$/, \"\").trim();\n return { line: `C1 - ${pii}` }; // C1 = Custom Field 1\n }\n\n // Get mapped RIS tag\n const risTag = NBIB_TO_RIS_TAG_MAP[tag];\n if (!risTag) {\n return null; // Skip unmapped tags\n }\n\n // Handle publication year (extract year only)\n if (risTag === \"PY\") {\n const yearMatch = value.match(/^(\\d{4})/);\n return yearMatch ? { line: `PY - ${yearMatch[1]}` } : null;\n }\n\n // Handle publication type\n if (risTag === \"TY\") {\n const risType = NBIB_PUBLICATION_TYPE_MAP[value] || \"JOUR\";\n return { line: `TY - ${risType}`, isType: true };\n }\n\n return { line: `${risTag} - ${value}` };\n}\n\n/**\n * Convert a single NBIB entry to RIS format\n */\nfunction convertSingleNbibEntryToRis(entry: string): string {\n const parsed = parseNbibEntry(entry);\n\n if (parsed.length === 0) {\n return \"\";\n }\n\n const risLines: string[] = [];\n let hasType = false;\n\n for (const { tag, value } of parsed) {\n const converted = convertNbibTagToRisLine(tag, value);\n if (!converted) {\n continue;\n }\n\n if (converted.isType) {\n risLines.unshift(converted.line); // TY must be first\n hasType = true;\n } else {\n risLines.push(converted.line);\n }\n }\n\n // Add default type if not present\n if (!hasType) {\n risLines.unshift(\"TY - JOUR\");\n }\n\n // Add end record tag\n risLines.push(\"ER -\");\n\n return risLines.join(\"\\n\");\n}\n\n/**\n * Convert NBIB (PubMed MEDLINE) format to RIS format\n *\n * @param content - NBIB content string\n * @returns RIS format string\n */\nexport function convertNbibToRis(content: string): string {\n const trimmed = content.trim();\n\n if (!trimmed) {\n return \"\";\n }\n\n // Split into entries by blank lines (PMID- starts each entry)\n const entries = trimmed.split(/\\n\\s*\\n/).filter((e) => e.trim());\n\n const risEntries = entries.map((entry) => convertSingleNbibEntryToRis(entry)).filter(Boolean);\n\n return risEntries.join(\"\\n\\n\");\n}\n\n/**\n * Parse NBIB (PubMed MEDLINE) content to CSL-JSON\n *\n * Converts NBIB to RIS format first, then parses with citation-js\n *\n * @param content - NBIB content string\n * @returns Parse result with CSL-JSON items\n */\nexport function parseNbib(content: string): ParseResult {\n const trimmed = content.trim();\n\n // Handle empty input\n if (!trimmed) {\n return { success: true, items: [] };\n }\n\n // Convert NBIB to RIS\n const risContent = convertNbibToRis(trimmed);\n\n if (!risContent) {\n return {\n success: false,\n items: [],\n error: \"Failed to convert NBIB to RIS: No valid entries found\",\n };\n }\n\n // Parse the RIS content\n return parseRis(risContent);\n}\n\n/**\n * Parse content using citation-js\n */\nfunction parseWithCitationJs(content: string, format: string): ParseResult {\n const trimmed = content.trim();\n\n // Handle empty input\n if (!trimmed) {\n return { success: true, items: [] };\n }\n\n try {\n // Parse with citation-js (auto-detection works well for bibtex/ris)\n const cite = new Cite(trimmed);\n\n // Get CSL-JSON output\n const items = cite.get({ format: \"real\", type: \"json\" }) as CslItem[];\n\n // Handle case where parsing produces no results\n if (!items || items.length === 0) {\n // Check if input looks like valid format but has no entries\n if (isEmptyFormat(trimmed, format)) {\n return { success: true, items: [] };\n }\n\n return {\n success: false,\n items: [],\n error: `No valid ${format.toUpperCase()} entries found`,\n };\n }\n\n return { success: true, items };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Check if this is truly empty content (comments only for bibtex)\n if (isEmptyFormat(trimmed, format)) {\n return { success: true, items: [] };\n }\n\n return {\n success: false,\n items: [],\n error: `Failed to parse ${format.toUpperCase()}: ${errorMessage}`,\n };\n }\n}\n\n/**\n * Check if content is \"empty\" for the given format\n * (e.g., only comments for BibTeX)\n */\nfunction isEmptyFormat(content: string, format: string): boolean {\n if (format === \"bibtex\") {\n // BibTeX comments start with %\n const lines = content.split(\"\\n\");\n return lines.every((line) => {\n const trimmed = line.trim();\n return trimmed === \"\" || trimmed.startsWith(\"%\");\n });\n }\n\n return false;\n}\n","/**\n * Importer orchestration module\n *\n * Coordinates format detection, parsing, and fetching to import references\n * from various input formats.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type { CslItem } from \"../../core/csl-json/types.js\";\nimport { CslItemSchema } from \"../../core/csl-json/types.js\";\nimport {\n cacheDoiResult,\n cacheIsbnResult,\n cachePmidResult,\n getDoiFromCache,\n getIsbnFromCache,\n getPmidFromCache,\n} from \"./cache.js\";\nimport { detectByContent, detectByExtension, isDoi, isIsbn, isPmid } from \"./detector.js\";\nimport type { InputFormat } from \"./detector.js\";\nimport { fetchDoi, fetchIsbn, fetchPmids } from \"./fetcher.js\";\nimport type { FailureReason, PubmedConfig } from \"./fetcher.js\";\nimport { normalizeDoi, normalizeIsbn, normalizePmid } from \"./normalizer.js\";\nimport { parseBibtex, parseNbib, parseRis } from \"./parser.js\";\n\n// Re-export FailureReason for external use\nexport type { FailureReason } from \"./fetcher.js\";\n\n/**\n * Result of importing a single item\n */\nexport type ImportItemResult =\n | { success: true; item: CslItem; source: string }\n | { success: false; error: string; source: string; reason: FailureReason };\n\n/**\n * Result of an import operation\n */\nexport interface ImportResult {\n results: ImportItemResult[];\n}\n\n/**\n * Options for import operations\n */\nexport interface ImportOptions {\n pubmedConfig?: PubmedConfig;\n}\n\n/**\n * Classified identifiers\n */\ninterface ClassifiedIdentifiers {\n pmids: string[];\n dois: string[];\n isbns: string[];\n unknowns: string[];\n}\n\n/**\n * Classify identifiers into PMIDs, DOIs, and unknowns\n */\nfunction classifyIdentifiers(identifiers: string[]): ClassifiedIdentifiers {\n const pmids: string[] = [];\n const dois: string[] = [];\n const isbns: string[] = [];\n const unknowns: string[] = [];\n\n for (const id of identifiers) {\n if (isPmid(id)) {\n pmids.push(normalizePmid(id));\n } else if (isDoi(id)) {\n dois.push(normalizeDoi(id));\n } else if (isIsbn(id)) {\n isbns.push(normalizeIsbn(id));\n } else {\n unknowns.push(id);\n }\n }\n\n return { pmids, dois, isbns, unknowns };\n}\n\n/**\n * Build error results for unknown identifiers\n */\nfunction buildUnknownResults(unknowns: string[]): ImportItemResult[] {\n return unknowns.map((unknown) => ({\n success: false as const,\n error: `Cannot interpret '${unknown}' as identifier (not a valid PMID or DOI)`,\n source: unknown,\n reason: \"validation_error\" as const,\n }));\n}\n\n/**\n * Clear the id from a fetched item to force regeneration using author-year format\n * Identifiers (PMID, DOI, ISBN) from APIs may have non-standard IDs that should not be used\n */\nfunction clearItemId(item: CslItem): CslItem {\n const { id: _ignored, ...rest } = item;\n return { ...rest, id: \"\" };\n}\n\n/**\n * Fetch PMIDs with cache support\n */\nasync function fetchPmidsWithCache(\n pmids: string[],\n pubmedConfig: PubmedConfig\n): Promise<ImportItemResult[]> {\n const results: ImportItemResult[] = [];\n const pmidsToFetch: string[] = [];\n\n // Check cache first\n for (const pmid of pmids) {\n const cached = getPmidFromCache(pmid);\n if (cached) {\n results.push({ success: true, item: clearItemId(cached), source: pmid });\n } else {\n pmidsToFetch.push(pmid);\n }\n }\n\n // Fetch uncached PMIDs\n if (pmidsToFetch.length > 0) {\n const fetchResults = await fetchPmids(pmidsToFetch, pubmedConfig);\n for (const fetchResult of fetchResults) {\n if (fetchResult.success) {\n cachePmidResult(fetchResult.pmid, fetchResult.item);\n results.push({\n success: true,\n item: clearItemId(fetchResult.item),\n source: fetchResult.pmid,\n });\n } else {\n results.push({\n success: false,\n error: fetchResult.error,\n source: fetchResult.pmid,\n reason: fetchResult.reason,\n });\n }\n }\n }\n\n return results;\n}\n\n/**\n * Fetch DOIs with cache support\n */\nasync function fetchDoisWithCache(dois: string[]): Promise<ImportItemResult[]> {\n const results: ImportItemResult[] = [];\n\n for (const doi of dois) {\n const cached = getDoiFromCache(doi);\n if (cached) {\n results.push({ success: true, item: clearItemId(cached), source: doi });\n continue;\n }\n\n const fetchResult = await fetchDoi(doi);\n if (fetchResult.success) {\n cacheDoiResult(doi, fetchResult.item);\n results.push({ success: true, item: clearItemId(fetchResult.item), source: doi });\n } else {\n results.push({\n success: false,\n error: fetchResult.error,\n source: doi,\n reason: fetchResult.reason,\n });\n }\n }\n\n return results;\n}\n\n/**\n * Fetch ISBNs with caching\n */\nasync function fetchIsbnsWithCache(isbns: string[]): Promise<ImportItemResult[]> {\n const results: ImportItemResult[] = [];\n\n for (const isbn of isbns) {\n const cached = getIsbnFromCache(isbn);\n if (cached) {\n results.push({ success: true, item: clearItemId(cached), source: isbn });\n continue;\n }\n\n const fetchResult = await fetchIsbn(isbn);\n if (fetchResult.success) {\n cacheIsbnResult(isbn, fetchResult.item);\n results.push({ success: true, item: clearItemId(fetchResult.item), source: isbn });\n } else {\n results.push({\n success: false,\n error: fetchResult.error,\n source: isbn,\n reason: fetchResult.reason,\n });\n }\n }\n\n return results;\n}\n\n/**\n * Parse JSON content and return import result\n */\nfunction parseJsonContent(content: string): ImportResult {\n try {\n const parsed = JSON.parse(content);\n const items: unknown[] = Array.isArray(parsed) ? parsed : [parsed];\n\n if (items.length === 0) {\n return { results: [] };\n }\n\n const results: ImportItemResult[] = [];\n for (const item of items) {\n const parseResult = CslItemSchema.safeParse(item);\n if (parseResult.success) {\n results.push({ success: true, item: parseResult.data, source: \"json\" });\n } else {\n results.push({\n success: false,\n error: `Invalid CSL-JSON: ${parseResult.error.message}`,\n source: \"json\",\n reason: \"validation_error\",\n });\n }\n }\n return { results };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n results: [\n {\n success: false,\n error: `Failed to parse JSON: ${message}`,\n source: \"json\",\n reason: \"parse_error\",\n },\n ],\n };\n }\n}\n\n/**\n * Parse BibTeX content and return import result\n */\nfunction parseBibtexContent(content: string): ImportResult {\n const parseResult = parseBibtex(content);\n\n if (!parseResult.success) {\n return {\n results: [\n {\n success: false,\n error: parseResult.error ?? \"Failed to parse BibTeX\",\n source: \"bibtex\",\n reason: \"parse_error\",\n },\n ],\n };\n }\n\n if (parseResult.items.length === 0) {\n return { results: [] };\n }\n\n return {\n results: parseResult.items.map((item) => ({\n success: true as const,\n item,\n source: \"bibtex\",\n })),\n };\n}\n\n/**\n * Parse RIS content and return import result\n */\nfunction parseRisContent(content: string): ImportResult {\n const parseResult = parseRis(content);\n\n if (!parseResult.success) {\n return {\n results: [\n {\n success: false,\n error: parseResult.error ?? \"Failed to parse RIS\",\n source: \"ris\",\n reason: \"parse_error\",\n },\n ],\n };\n }\n\n if (parseResult.items.length === 0) {\n return { results: [] };\n }\n\n return {\n results: parseResult.items.map((item) => ({\n success: true as const,\n item,\n source: \"ris\",\n })),\n };\n}\n\n/**\n * Parse NBIB content and return import result\n */\nfunction parseNbibContent(content: string): ImportResult {\n const parseResult = parseNbib(content);\n\n if (!parseResult.success) {\n return {\n results: [\n {\n success: false,\n error: parseResult.error ?? \"Failed to parse NBIB\",\n source: \"nbib\",\n reason: \"parse_error\",\n },\n ],\n };\n }\n\n if (parseResult.items.length === 0) {\n return { results: [] };\n }\n\n return {\n results: parseResult.items.map((item) => ({\n success: true as const,\n item,\n source: \"nbib\",\n })),\n };\n}\n\n/**\n * Import references from content string\n *\n * @param content - The content to parse\n * @param format - The format of the content (or \"auto\" for detection)\n * @param options - Import options\n * @returns Import result with parsed items\n */\nexport async function importFromContent(\n content: string,\n format: InputFormat | \"auto\",\n _options: ImportOptions\n): Promise<ImportResult> {\n // Determine the actual format\n let actualFormat: InputFormat;\n if (format === \"auto\") {\n actualFormat = detectByContent(content);\n if (actualFormat === \"unknown\") {\n return {\n results: [\n {\n success: false,\n error: \"Cannot detect input format. Use --format to specify explicitly.\",\n source: \"content\",\n reason: \"validation_error\",\n },\n ],\n };\n }\n } else {\n actualFormat = format;\n }\n\n // Parse based on format\n switch (actualFormat) {\n case \"json\":\n return parseJsonContent(content);\n case \"bibtex\":\n return parseBibtexContent(content);\n case \"ris\":\n return parseRisContent(content);\n case \"nbib\":\n return parseNbibContent(content);\n default:\n return {\n results: [\n {\n success: false,\n error: `Unsupported format for content parsing: ${actualFormat}`,\n source: \"content\",\n reason: \"validation_error\",\n },\n ],\n };\n }\n}\n\n/**\n * Import references from identifier strings (PMID or DOI)\n *\n * @param identifiers - Array of identifier strings\n * @param options - Import options (requires pubmedConfig for PMID fetching)\n * @returns Import result with fetched items\n */\nexport async function importFromIdentifiers(\n identifiers: string[],\n options: ImportOptions\n): Promise<ImportResult> {\n if (identifiers.length === 0) {\n return { results: [] };\n }\n\n // Classify identifiers\n const { pmids, dois, isbns, unknowns } = classifyIdentifiers(identifiers);\n\n // Collect results\n const results: ImportItemResult[] = [];\n\n // Add errors for unknown identifiers\n results.push(...buildUnknownResults(unknowns));\n\n // Fetch PMIDs with cache\n const pmidResults = await fetchPmidsWithCache(pmids, options.pubmedConfig ?? {});\n results.push(...pmidResults);\n\n // Fetch DOIs with cache\n const doiResults = await fetchDoisWithCache(dois);\n results.push(...doiResults);\n\n // Fetch ISBNs with cache\n const isbnResults = await fetchIsbnsWithCache(isbns);\n results.push(...isbnResults);\n\n return { results };\n}\n\n/**\n * Options for importFromInputs\n */\nexport interface ImportInputsOptions extends ImportOptions {\n /** Explicit format specification (default: auto) */\n format?: InputFormat | \"auto\";\n /** Content from stdin (if provided, processed before file/identifier inputs) */\n stdinContent?: string;\n}\n\n/**\n * Unified entry point for importing references from file paths or identifiers\n *\n * Classifies inputs as files or identifiers:\n * - If path exists as file → read and parse\n * - If path does not exist → interpret as identifier (PMID/DOI)\n *\n * @param inputs - Array of file paths or identifier strings\n * @param options - Import options including format specification\n * @returns Import result with all parsed/fetched items\n */\n\n/**\n * Check if input looks like a file path (has file-like extension)\n */\nfunction looksLikeFilePath(input: string): boolean {\n const fileExtensions = [\".json\", \".bib\", \".ris\", \".txt\", \".xml\", \".yaml\", \".yml\"];\n const lowerInput = input.toLowerCase();\n return fileExtensions.some((ext) => lowerInput.endsWith(ext));\n}\n\n/**\n * Process a single file input\n */\nasync function processFile(\n filePath: string,\n options: ImportInputsOptions\n): Promise<ImportItemResult[]> {\n try {\n const content = readFileSync(filePath, \"utf-8\");\n\n // Determine format\n let format: InputFormat | \"auto\";\n if (options.format && options.format !== \"auto\") {\n format = options.format;\n } else {\n // Try extension first\n const extFormat = detectByExtension(filePath);\n format = extFormat !== \"unknown\" ? extFormat : \"auto\";\n }\n\n const result = await importFromContent(content, format, options);\n\n // Update source to be the file path\n return result.results.map((r) => ({\n ...r,\n source: filePath,\n }));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return [\n {\n success: false,\n error: `Failed to read file: ${message}`,\n source: filePath,\n reason: \"fetch_error\",\n },\n ];\n }\n}\n\n/**\n * Process identifier inputs (PMID/DOI)\n */\nasync function processIdentifiers(\n inputs: string[],\n options: ImportInputsOptions\n): Promise<ImportItemResult[]> {\n const results: ImportItemResult[] = [];\n const validIdentifiers: string[] = [];\n\n // Separate valid identifiers from invalid inputs\n for (const input of inputs) {\n // Check if it's a valid identifier\n const isValidPmid = isPmid(input);\n const isValidDoi = isDoi(input);\n const isValidIsbn = isIsbn(input);\n\n if (isValidPmid || isValidDoi || isValidIsbn) {\n validIdentifiers.push(input);\n } else {\n // Not a valid identifier\n const hint = looksLikeFilePath(input)\n ? \" Hint: If this is a file path, check that the file exists.\"\n : \"\";\n results.push({\n success: false,\n error: `Cannot interpret '${input}' as identifier (not a valid PMID, DOI, or ISBN).${hint}`,\n source: input,\n reason: \"validation_error\",\n });\n }\n }\n\n // Fetch valid identifiers\n if (validIdentifiers.length > 0) {\n const fetchResult = await importFromIdentifiers(validIdentifiers, options);\n results.push(...fetchResult.results);\n }\n\n return results;\n}\n\nexport async function importFromInputs(\n inputs: string[],\n options: ImportInputsOptions\n): Promise<ImportResult> {\n const allResults: ImportItemResult[] = [];\n\n // Process stdinContent if provided\n if (options.stdinContent?.trim()) {\n const stdinResults = await processStdinContent(options.stdinContent, options);\n allResults.push(...stdinResults);\n }\n\n // Process file/identifier inputs\n if (inputs.length > 0) {\n const identifiersToFetch: string[] = [];\n\n // Process each input\n for (const input of inputs) {\n if (existsSync(input)) {\n // Input is an existing file\n const fileResults = await processFile(input, options);\n allResults.push(...fileResults);\n } else {\n // Input does not exist as file - treat as potential identifier\n identifiersToFetch.push(input);\n }\n }\n\n // Process identifiers\n if (identifiersToFetch.length > 0) {\n const identifierResults = await processIdentifiers(identifiersToFetch, options);\n allResults.push(...identifierResults);\n }\n }\n\n return { results: allResults };\n}\n\n/**\n * Process stdin content based on format detection\n * - For file formats (json/bibtex/ris): parse directly\n * - For identifier formats (pmid/doi) or auto with identifiers: split and process\n */\nasync function processStdinContent(\n content: string,\n options: ImportInputsOptions\n): Promise<ImportItemResult[]> {\n const format = options.format || \"auto\";\n\n // If explicit file format specified, parse as content\n if (format === \"json\" || format === \"bibtex\" || format === \"ris\" || format === \"nbib\") {\n const result = await importFromContent(content, format, options);\n return result.results.map((r) => ({\n ...r,\n source: r.source === \"content\" ? \"stdin\" : r.source,\n }));\n }\n\n // If explicit identifier format, split and process\n if (format === \"pmid\" || format === \"doi\" || format === \"isbn\") {\n const identifiers = content.split(/\\s+/).filter((s) => s.length > 0);\n return processIdentifiers(identifiers, options);\n }\n\n // Auto-detect format from content\n const detectedFormat = detectByContent(content);\n\n if (\n detectedFormat === \"json\" ||\n detectedFormat === \"bibtex\" ||\n detectedFormat === \"ris\" ||\n detectedFormat === \"nbib\"\n ) {\n // File format detected - parse as content\n const result = await importFromContent(content, detectedFormat, options);\n return result.results.map((r) => ({\n ...r,\n source: r.source === \"content\" ? \"stdin\" : r.source,\n }));\n }\n\n // Not a file format - treat as whitespace-separated identifiers\n const identifiers = content.split(/\\s+/).filter((s) => s.length > 0);\n if (identifiers.length === 0) {\n return [];\n }\n\n return processIdentifiers(identifiers, options);\n}\n","import type { CslItem } from \"../../core/csl-json/types.js\";\nimport { generateId } from \"../../core/identifier/generator.js\";\nimport type { ILibrary } from \"../../core/library-interface.js\";\nimport { detectDuplicate } from \"../duplicate/detector.js\";\nimport type { InputFormat } from \"../import/detector.js\";\nimport type { PubmedConfig } from \"../import/fetcher.js\";\nimport {\n type ImportInputsOptions,\n type ImportItemResult,\n importFromInputs,\n} from \"../import/importer.js\";\n\n// Re-export FailureReason for external use\nexport type { FailureReason } from \"../import/importer.js\";\n\n/**\n * Options for adding references\n */\nexport interface AddReferencesOptions {\n /** Skip duplicate detection */\n force?: boolean;\n /** Explicit input format (default: auto) */\n format?: InputFormat | \"auto\";\n /** PubMed API configuration */\n pubmedConfig?: PubmedConfig;\n /** Content from stdin (if provided, processed before file/identifier inputs) */\n stdinContent?: string;\n}\n\n/**\n * Information about a successfully added reference\n */\nexport interface AddedItem {\n source: string;\n id: string;\n uuid: string;\n title: string;\n /** True if the original ID from source file was changed due to collision */\n idChanged?: boolean;\n /** Original ID from source file before collision resolution */\n originalId?: string;\n}\n\n/**\n * Information about a failed import\n */\nexport interface FailedItem {\n source: string;\n error: string;\n reason: import(\"../import/importer.js\").FailureReason;\n}\n\n/**\n * Information about a skipped duplicate\n */\nexport interface SkippedItem {\n source: string;\n existingId: string;\n duplicateType: import(\"../duplicate/types.js\").DuplicateType;\n}\n\n/**\n * Result of addReferences operation\n */\nexport interface AddReferencesResult {\n added: AddedItem[];\n failed: FailedItem[];\n skipped: SkippedItem[];\n}\n\n/**\n * Add references to a library from various input sources.\n *\n * This function orchestrates:\n * 1. Import from inputs (files or identifiers)\n * 2. Duplicate detection (unless force=true)\n * 3. ID collision resolution\n * 4. Library save\n *\n * @param inputs - File paths or identifiers (PMID, DOI)\n * @param library - Target library\n * @param options - Add options\n * @returns Result with added, failed, and skipped items\n */\nexport async function addReferences(\n inputs: string[],\n library: ILibrary,\n options: AddReferencesOptions\n): Promise<AddReferencesResult> {\n const added: AddedItem[] = [];\n const failed: FailedItem[] = [];\n const skipped: SkippedItem[] = [];\n\n // 1. Import from inputs\n const importOptions = buildImportOptions(options);\n const importResult = await importFromInputs(inputs, importOptions);\n\n // Get existing items for duplicate/collision checks (getAll now returns CslItem[] directly)\n const existingItems = await library.getAll();\n\n // Track IDs we've added in this batch (for collision detection within batch)\n const addedIds = new Set<string>();\n\n // 2. Process each import result\n for (const result of importResult.results) {\n const processed = await processImportResult(\n result,\n existingItems,\n addedIds,\n options.force ?? false,\n library\n );\n\n if (processed.type === \"failed\") {\n failed.push(processed.item);\n } else if (processed.type === \"skipped\") {\n skipped.push(processed.item);\n } else {\n added.push(processed.item);\n }\n }\n\n // 3. Save library if any items were added\n if (added.length > 0) {\n await library.save();\n }\n\n return { added, failed, skipped };\n}\n\n/**\n * Build import options from add options\n */\nfunction buildImportOptions(options: AddReferencesOptions): ImportInputsOptions {\n const importOptions: ImportInputsOptions = {};\n if (options.format !== undefined) {\n importOptions.format = options.format;\n }\n if (options.pubmedConfig !== undefined) {\n importOptions.pubmedConfig = options.pubmedConfig;\n }\n if (options.stdinContent !== undefined) {\n importOptions.stdinContent = options.stdinContent;\n }\n return importOptions;\n}\n\ntype ProcessResult =\n | { type: \"added\"; item: AddedItem }\n | { type: \"failed\"; item: FailedItem }\n | { type: \"skipped\"; item: SkippedItem };\n\n/**\n * Process a single import result\n */\nasync function processImportResult(\n result: ImportItemResult,\n existingItems: CslItem[],\n addedIds: Set<string>,\n force: boolean,\n library: ILibrary\n): Promise<ProcessResult> {\n if (!result.success) {\n return {\n type: \"failed\",\n item: { source: result.source, error: result.error, reason: result.reason },\n };\n }\n\n const item = result.item;\n\n // Check for duplicates (unless force=true)\n if (!force) {\n const duplicateResult = detectDuplicate(item, existingItems);\n const existingMatch = duplicateResult.matches[0];\n if (existingMatch) {\n return {\n type: \"skipped\",\n item: {\n source: result.source,\n existingId: existingMatch.existing.id ?? \"\",\n duplicateType: existingMatch.type,\n },\n };\n }\n }\n\n // Resolve ID collision\n // Prioritize original ID from source file; generate ID only if not present\n const allExistingIds = new Set([...existingItems.map((i) => i.id), ...addedIds]);\n const originalId = item.id?.trim() || \"\";\n const hasOriginalId = originalId.length > 0;\n const baseId = hasOriginalId ? originalId : generateId(item);\n const { id, changed } = resolveIdCollision(baseId, allExistingIds);\n\n const finalItem: CslItem = { ...item, id };\n\n // Add to library\n const addedToLibrary = await library.add(finalItem);\n addedIds.add(id);\n\n // Build result (uuid comes from the library-added item which has ensured UUID)\n const uuid = addedToLibrary.custom?.uuid ?? \"\";\n const addedItem: AddedItem = {\n source: result.source,\n id,\n uuid,\n title: typeof finalItem.title === \"string\" ? finalItem.title : \"\",\n };\n\n // Report idChanged only when original ID from source was changed due to collision\n // Generated ID collisions are internal and not reported\n if (hasOriginalId && changed) {\n addedItem.idChanged = true;\n addedItem.originalId = originalId;\n }\n\n return { type: \"added\", item: addedItem };\n}\n\n/**\n * Generate an alphabetic suffix for ID collision resolution.\n * 0 -> 'a', 1 -> 'b', ..., 25 -> 'z', 26 -> 'aa', etc.\n */\nfunction generateSuffix(index: number): string {\n const alphabet = \"abcdefghijklmnopqrstuvwxyz\";\n let suffix = \"\";\n let n = index;\n\n do {\n suffix = alphabet[n % 26] + suffix;\n n = Math.floor(n / 26) - 1;\n } while (n >= 0);\n\n return suffix;\n}\n\n/**\n * Resolve ID collision by appending alphabetic suffix.\n */\nfunction resolveIdCollision(\n baseId: string,\n existingIds: Set<string>\n): { id: string; changed: boolean } {\n if (!existingIds.has(baseId)) {\n return { id: baseId, changed: false };\n }\n\n // Find next available suffix\n let index = 0;\n let newId: string;\n\n do {\n const suffix = generateSuffix(index);\n newId = `${baseId}${suffix}`;\n index++;\n } while (existingIds.has(newId));\n\n return { id: newId, changed: true };\n}\n","import { Hono } from \"hono\";\nimport type { Config } from \"../../config/schema.js\";\nimport type { Library } from \"../../core/library.js\";\nimport type { InputFormat } from \"../../features/import/detector.js\";\nimport type { PubmedConfig } from \"../../features/import/fetcher.js\";\nimport { type AddReferencesOptions, addReferences } from \"../../features/operations/add.js\";\n\n/**\n * Build PubmedConfig from config, filtering out undefined values\n * to satisfy exactOptionalPropertyTypes requirements.\n */\nfunction buildPubmedConfig(config: Config): PubmedConfig {\n const pubmedConfig: PubmedConfig = {};\n if (config.pubmed.email !== undefined) {\n pubmedConfig.email = config.pubmed.email;\n }\n if (config.pubmed.apiKey !== undefined) {\n pubmedConfig.apiKey = config.pubmed.apiKey;\n }\n return pubmedConfig;\n}\n\n/**\n * Create add route for importing references.\n * @param library - Library instance to use for operations\n * @param config - Configuration with PubMed settings\n * @returns Hono app with add route\n */\nexport function createAddRoute(library: Library, config: Config) {\n const route = new Hono();\n\n // POST / - Add references from inputs\n route.post(\"/\", async (c) => {\n // Parse request body\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON\" }, 400);\n }\n\n // Validate inputs\n if (!body || typeof body !== \"object\") {\n return c.json({ error: \"Request body must be an object\" }, 400);\n }\n\n const { inputs, options } = body as {\n inputs?: unknown;\n options?: { force?: boolean; format?: string };\n };\n\n if (!inputs || !Array.isArray(inputs) || inputs.length === 0) {\n return c.json({ error: \"inputs must be a non-empty array of strings\" }, 400);\n }\n\n // Ensure all inputs are strings\n if (!inputs.every((input) => typeof input === \"string\")) {\n return c.json({ error: \"All inputs must be strings\" }, 400);\n }\n\n // Build options\n const addOptions: AddReferencesOptions = {\n force: options?.force ?? false,\n pubmedConfig: buildPubmedConfig(config),\n };\n\n if (options?.format) {\n addOptions.format = options.format as InputFormat | \"auto\";\n }\n\n // Call addReferences\n const result = await addReferences(inputs as string[], library, addOptions);\n\n return c.json(result);\n });\n\n return route;\n}\n","import type { CslItem } from \"../../core/csl-json/types.js\";\nimport type { ILibrary, IdentifierType } from \"../../core/library-interface.js\";\nimport type { CheckResult } from \"../check/types.js\";\n\nexport interface CheckOperationOptions {\n identifiers?: string[];\n idType?: IdentifierType;\n all?: boolean;\n searchQuery?: string;\n skipDays?: number;\n save?: boolean;\n config?: { email?: string; pubmed?: { email?: string; apiKey?: string } };\n}\n\nexport interface CheckOperationResult {\n results: CheckResult[];\n summary: {\n total: number;\n ok: number;\n warnings: number;\n skipped: number;\n };\n}\n\n/**\n * Check references for status changes (retractions, version updates, etc.).\n *\n * @param library - The library to check references in\n * @param options - Check operation options\n * @returns Check results with summary\n */\nconst CHECK_CONCURRENCY = 5;\n\ninterface IndexedTask {\n index: number;\n item: CslItem;\n skip: boolean;\n}\n\nexport async function checkReferences(\n library: ILibrary,\n options: CheckOperationOptions\n): Promise<CheckOperationResult> {\n const { checkReference } = await import(\"../check/checker.js\");\n const save = options.save !== false;\n const skipDays = options.skipDays ?? 7;\n\n const items = await resolveItems(library, options);\n const tasks = items.map((item, index) => ({\n index,\n item,\n skip: shouldSkipRecentCheck(item, skipDays),\n }));\n\n const results: CheckResult[] = new Array(items.length);\n\n fillSkippedResults(tasks, results);\n\n const toCheck = tasks.filter((t) => !t.skip);\n await checkInParallel(toCheck, results, checkReference, options.config);\n\n if (save) {\n await saveAllResults(library, toCheck, results);\n }\n\n return { results, summary: computeSummary(results) };\n}\n\n/**\n * Fill results for items that should be skipped (recently checked).\n */\nfunction fillSkippedResults(tasks: IndexedTask[], results: CheckResult[]): void {\n for (const task of tasks) {\n if (task.skip) {\n results[task.index] = {\n id: task.item.id,\n uuid: (task.item.custom?.uuid as string) ?? \"\",\n status: \"skipped\",\n findings: [],\n checkedAt: (task.item.custom?.check as Record<string, unknown>)?.checked_at as string,\n checkedSources: [],\n };\n }\n }\n}\n\n/**\n * Check items in parallel with concurrency control.\n */\nasync function checkInParallel(\n tasks: IndexedTask[],\n results: CheckResult[],\n checkFn: (item: CslItem, config?: CheckOperationOptions[\"config\"]) => Promise<CheckResult>,\n config?: CheckOperationOptions[\"config\"]\n): Promise<void> {\n for (let i = 0; i < tasks.length; i += CHECK_CONCURRENCY) {\n const chunk = tasks.slice(i, i + CHECK_CONCURRENCY);\n const settled = await Promise.allSettled(chunk.map((task) => checkFn(task.item, config)));\n\n for (const [j, task] of chunk.entries()) {\n const outcome = settled[j];\n results[task.index] =\n outcome?.status === \"fulfilled\" ? outcome.value : buildFallbackResult(task.item);\n }\n }\n}\n\n/**\n * Build a fallback result when an API call fails.\n */\nfunction buildFallbackResult(item: CslItem): CheckResult {\n return {\n id: item.id,\n uuid: (item.custom?.uuid as string) ?? \"\",\n status: \"ok\",\n findings: [],\n checkedAt: new Date().toISOString(),\n checkedSources: [],\n };\n}\n\n/**\n * Save check results sequentially (library is not concurrent-safe).\n */\nasync function saveAllResults(\n library: ILibrary,\n tasks: IndexedTask[],\n results: CheckResult[]\n): Promise<void> {\n for (const task of tasks) {\n const result = results[task.index] as CheckResult;\n if (result.status !== \"skipped\") {\n await saveCheckResult(library, task.item, result);\n }\n }\n if (results.some((r) => r.status !== \"skipped\")) {\n await library.save();\n }\n}\n\n/**\n * Resolve target references based on options.\n */\nasync function resolveItems(library: ILibrary, options: CheckOperationOptions): Promise<CslItem[]> {\n if (options.all) {\n return library.getAll();\n }\n\n if (options.searchQuery) {\n const { searchReferences } = await import(\"./search.js\");\n const result = await searchReferences(library, { query: options.searchQuery });\n return result.items;\n }\n\n if (options.identifiers && options.identifiers.length > 0) {\n const idType = options.idType ?? \"id\";\n const items: CslItem[] = [];\n for (const identifier of options.identifiers) {\n const item = await library.find(identifier, { idType });\n if (!item) {\n throw new Error(`Reference not found: ${identifier}`);\n }\n items.push(item);\n }\n return items;\n }\n\n return [];\n}\n\n/**\n * Check if a reference was recently checked and should be skipped.\n */\nfunction shouldSkipRecentCheck(item: CslItem, skipDays: number): boolean {\n if (skipDays <= 0) return false;\n\n const check = item.custom?.check as Record<string, unknown> | undefined;\n if (!check?.checked_at) return false;\n\n const checkedAt = new Date(check.checked_at as string);\n const now = new Date();\n const daysSince = (now.getTime() - checkedAt.getTime()) / (1000 * 60 * 60 * 24);\n return daysSince < skipDays;\n}\n\n/**\n * Save check result to custom.check field of a reference.\n */\nasync function saveCheckResult(\n library: ILibrary,\n item: CslItem,\n result: CheckResult\n): Promise<void> {\n const checkData = {\n checked_at: result.checkedAt,\n status: result.status === \"warning\" ? (result.findings[0]?.type ?? \"warning\") : result.status,\n findings: result.findings.map((f) => ({\n type: f.type,\n message: f.message,\n ...(f.details ? { details: snakeCaseKeys(f.details) } : {}),\n })),\n };\n\n const existingCustom = (item.custom ?? {}) as Record<string, unknown>;\n await library.update(item.id, {\n custom: { ...existingCustom, check: checkData },\n });\n}\n\n/**\n * Convert camelCase keys to snake_case for storage.\n */\nfunction snakeCaseKeys(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const snakeKey = key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n result[snakeKey] = value;\n }\n return result;\n}\n\n/**\n * Compute summary from results.\n */\nfunction computeSummary(results: CheckResult[]): CheckOperationResult[\"summary\"] {\n return {\n total: results.length,\n ok: results.filter((r) => r.status === \"ok\").length,\n warnings: results.filter((r) => r.status === \"warning\").length,\n skipped: results.filter((r) => r.status === \"skipped\").length,\n };\n}\n","import { Hono } from \"hono\";\nimport { z } from \"zod\";\nimport type { Library } from \"../../core/library.js\";\nimport { type CheckOperationOptions, checkReferences } from \"../../features/operations/check.js\";\n\nconst CheckRequestSchema = z\n .object({\n identifiers: z.array(z.string()).optional(),\n idType: z.enum([\"id\", \"uuid\"]).optional(),\n all: z.boolean().optional(),\n searchQuery: z.string().optional(),\n skipDays: z.number().optional(),\n save: z.boolean().optional(),\n })\n .refine((data) => data.identifiers?.length || data.all || data.searchQuery, {\n message: \"Must provide identifiers, all, or searchQuery\",\n });\n\nfunction buildCheckOptions(data: z.infer<typeof CheckRequestSchema>): CheckOperationOptions {\n const options: CheckOperationOptions = {};\n if (data.identifiers?.length) options.identifiers = data.identifiers;\n if (data.idType) options.idType = data.idType;\n if (data.all) options.all = true;\n if (data.searchQuery) options.searchQuery = data.searchQuery;\n if (data.skipDays !== undefined) options.skipDays = data.skipDays;\n if (data.save !== undefined) options.save = data.save;\n return options;\n}\n\nexport function createCheckRoute(library: Library): Hono {\n const route = new Hono();\n\n route.post(\"/\", async (c) => {\n let rawBody: unknown;\n try {\n rawBody = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON\" }, 400);\n }\n\n const parseResult = CheckRequestSchema.safeParse(rawBody);\n if (!parseResult.success) {\n const errorMessage = parseResult.error.issues[0]?.message ?? \"Invalid request body\";\n return c.json({ error: errorMessage }, 400);\n }\n\n const result = await checkReferences(library, buildCheckOptions(parseResult.data));\n return c.json(result);\n });\n\n return route;\n}\n","import { isBuiltinStyle, resolveStyle } from \"../../config/csl-styles.js\";\nimport type { CslItem } from \"../../core/csl-json/types.js\";\nimport type { ILibrary, IdentifierType } from \"../../core/library-interface.js\";\nimport {\n formatBibliography,\n formatBibliographyCSL,\n formatInText,\n formatInTextCSL,\n} from \"../format/index.js\";\n\n/**\n * Options for citeReferences operation\n */\nexport interface CiteOperationOptions {\n /** Reference IDs or UUIDs to cite */\n identifiers: string[];\n /** Identifier type: 'id' (default), 'uuid', 'doi', 'pmid', or 'isbn' */\n idType?: IdentifierType;\n /** CSL style name or path to CSL file */\n style?: string;\n /** Path to custom CSL file */\n cslFile?: string;\n /** Default style from config (used when style is not specified) */\n defaultStyle?: string;\n /** Directory or directories to search for custom CSL files */\n cslDirectory?: string | string[];\n /** Locale for citation formatting (default: \"en-US\") */\n locale?: string;\n /** Output format (default: \"text\") */\n format?: \"text\" | \"html\" | \"rtf\";\n /** If true, generate in-text citation instead of bibliography */\n inText?: boolean;\n}\n\n/**\n * Result for a single citation\n */\nexport type CiteItemResult =\n | { success: true; identifier: string; citation: string }\n | { success: false; identifier: string; error: string };\n\n/**\n * Result of citeReferences operation\n */\nexport interface CiteResult {\n /** Results for each identifier */\n results: CiteItemResult[];\n}\n\ninterface FormatOptions {\n style?: string | undefined;\n styleXml?: string | undefined;\n locale?: string | undefined;\n format?: \"text\" | \"html\" | \"rtf\" | undefined;\n}\n\n/**\n * Check if fallback formatter should be used.\n */\nfunction shouldUseFallback(style: string | undefined, hasCustomXml: boolean): boolean {\n if (hasCustomXml) {\n return false;\n }\n if (style && !isBuiltinStyle(style)) {\n return true;\n }\n return false;\n}\n\n/**\n * Format a single item as citation.\n */\nfunction formatCitation(item: CslItem, inText: boolean, options: FormatOptions): string {\n const useFallback = shouldUseFallback(options.style, !!options.styleXml);\n const style = options.style ?? \"apa\";\n const locale = options.locale ?? \"en-US\";\n const format = options.format ?? \"text\";\n const styleXml = options.styleXml;\n\n if (useFallback) {\n return inText ? formatInText([item]) : formatBibliography([item]);\n }\n\n const formatOptions = { style, locale, format, ...(styleXml && { styleXml }) };\n return inText\n ? formatInTextCSL([item], formatOptions)\n : formatBibliographyCSL([item], formatOptions);\n}\n\n/**\n * Generate citation for a single identifier.\n */\nasync function generateCitationForIdentifier(\n library: ILibrary,\n identifier: string,\n idType: IdentifierType,\n inText: boolean,\n options: FormatOptions\n): Promise<CiteItemResult> {\n const item = await library.find(identifier, { idType });\n\n if (!item) {\n const lookupType = idType === \"uuid\" ? \"UUID\" : idType.toUpperCase();\n return {\n success: false,\n identifier,\n error: `Reference with ${lookupType} '${identifier}' not found`,\n };\n }\n\n const citation = formatCitation(item, inText, options);\n\n return {\n success: true,\n identifier,\n citation,\n };\n}\n\n/**\n * Generate citations for references.\n *\n * @param library - The library to cite from\n * @param options - Citation options including identifiers and style settings\n * @returns Results array with citation or error for each identifier\n */\nexport async function citeReferences(\n library: ILibrary,\n options: CiteOperationOptions\n): Promise<CiteResult> {\n const {\n identifiers,\n idType = \"id\",\n inText = false,\n style,\n cslFile,\n defaultStyle,\n cslDirectory,\n locale,\n format,\n } = options;\n const results: CiteItemResult[] = [];\n\n // Resolve style using the full resolution chain:\n // 1. cslFile (exact path)\n // 2. style (if built-in)\n // 3. Search in cslDirectory\n // 4. defaultStyle (if built-in or found in cslDirectory)\n // 5. Fallback to 'apa'\n const resolution = resolveStyle({\n ...(cslFile !== undefined && { cslFile }),\n ...(style !== undefined && { style }),\n ...(defaultStyle !== undefined && { defaultStyle }),\n ...(cslDirectory !== undefined && { cslDirectory }),\n });\n\n for (const identifier of identifiers) {\n const result = await generateCitationForIdentifier(library, identifier, idType, inText, {\n style: resolution.styleName,\n styleXml: resolution.styleXml,\n locale,\n format,\n });\n results.push(result);\n }\n\n return { results };\n}\n","import { Hono } from \"hono\";\nimport { z } from \"zod\";\nimport type { Library } from \"../../core/library.js\";\nimport {\n type CiteOperationOptions,\n type CiteResult,\n citeReferences,\n} from \"../../features/operations/cite.js\";\n\n/**\n * Zod schema for cite request body\n */\nconst CiteRequestSchema = z.object({\n identifiers: z.array(z.string()).min(1, \"identifiers must be a non-empty array\"),\n idType: z.enum([\"id\", \"uuid\", \"doi\", \"pmid\", \"isbn\"]).optional(),\n inText: z.boolean().optional(),\n style: z.string().optional(),\n cslFile: z.string().optional(),\n locale: z.string().optional(),\n format: z.enum([\"text\", \"html\"]).optional(),\n});\n\ntype CiteRequestBody = z.infer<typeof CiteRequestSchema>;\n\n/**\n * Build cite operation options from validated request body.\n */\nfunction buildCiteOptions(body: CiteRequestBody): CiteOperationOptions {\n return {\n identifiers: body.identifiers,\n ...(body.idType !== undefined && { idType: body.idType }),\n ...(body.inText !== undefined && { inText: body.inText }),\n ...(body.style !== undefined && { style: body.style }),\n ...(body.cslFile !== undefined && { cslFile: body.cslFile }),\n ...(body.locale !== undefined && { locale: body.locale }),\n ...(body.format !== undefined && { format: body.format }),\n };\n}\n\n/**\n * Create cite route for generating citations.\n * @param library - Library instance to use for operations\n * @returns Hono app with cite route\n */\nexport function createCiteRoute(library: Library) {\n const route = new Hono();\n\n // POST / - Generate citations for identifiers\n route.post(\"/\", async (c) => {\n // Parse request body\n let rawBody: unknown;\n try {\n rawBody = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON\" }, 400);\n }\n\n // Validate with zod schema\n const parseResult = CiteRequestSchema.safeParse(rawBody);\n if (!parseResult.success) {\n const errorMessage = parseResult.error.issues[0]?.message ?? \"Invalid request body\";\n return c.json({ error: errorMessage }, 400);\n }\n\n // Call citeReferences operation\n const result: CiteResult = await citeReferences(library, buildCiteOptions(parseResult.data));\n\n return c.json(result);\n });\n\n return route;\n}\n","import { Hono } from \"hono\";\n\n/**\n * Health check route.\n * Returns a simple status to verify the server is running.\n */\nexport const healthRoute = new Hono();\n\nhealthRoute.get(\"/\", (c) => {\n return c.json({ status: \"ok\" });\n});\n","import type { CslItem } from \"../../core/csl-json/types.js\";\nimport type { ILibrary } from \"../../core/library-interface.js\";\nimport {\n type PaginationOptions,\n type SortField,\n type SortOptions,\n type SortOrder,\n paginate,\n sortReferences,\n} from \"../pagination/index.js\";\n\n/**\n * Options for listReferences operation\n */\nexport interface ListOptions extends PaginationOptions, SortOptions {}\n\n/**\n * Result of listReferences operation\n */\nexport interface ListResult {\n /** Raw CslItem array */\n items: CslItem[];\n /** Total count before pagination */\n total: number;\n /** Applied limit (0 if unlimited) */\n limit: number;\n /** Applied offset */\n offset: number;\n /** Next page offset, null if no more results */\n nextOffset: number | null;\n}\n\n/**\n * List all references from the library.\n *\n * @param library - The library to list references from\n * @param options - Pagination and sorting options\n * @returns Raw CslItem[] with pagination metadata\n */\nexport async function listReferences(library: ILibrary, options: ListOptions): Promise<ListResult> {\n const sort: SortField = options.sort ?? \"updated\";\n const order: SortOrder = options.order ?? \"desc\";\n const limit = options.limit ?? 0;\n const offset = options.offset ?? 0;\n\n // Get all items\n const allItems = await library.getAll();\n const total = allItems.length;\n\n // Sort\n const sorted = sortReferences(allItems, sort, order);\n\n // Paginate\n const { items: paginatedItems, nextOffset } = paginate(sorted, { limit, offset });\n\n return {\n items: paginatedItems,\n total,\n limit,\n offset,\n nextOffset,\n };\n}\n","import { Hono } from \"hono\";\nimport { z } from \"zod\";\nimport type { Library } from \"../../core/library.js\";\nimport { type ListOptions, listReferences } from \"../../features/operations/list.js\";\nimport { sortFieldSchema, sortOrderSchema } from \"../../features/pagination/index.js\";\nimport { pickDefined } from \"../../utils/object.js\";\n\n/**\n * Request body schema for list endpoint\n */\nconst listRequestBodySchema = z.object({\n sort: sortFieldSchema.optional(),\n order: sortOrderSchema.optional(),\n limit: z.number().int().min(0).optional(),\n offset: z.number().int().min(0).optional(),\n});\n\n/**\n * Request body type for list endpoint\n */\nexport type ListRequestBody = z.infer<typeof listRequestBodySchema>;\n\n/**\n * Creates list route for HTTP server\n */\nexport function createListRoute(library: Library) {\n const route = new Hono();\n\n // POST / - List all references\n route.post(\"/\", async (c) => {\n // Parse request body\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON\" }, 400);\n }\n\n // Validate body with zod\n const parseResult = listRequestBodySchema.safeParse(body);\n if (!parseResult.success) {\n const errorMessage = parseResult.error.issues[0]?.message ?? \"Invalid request body\";\n return c.json({ error: errorMessage }, 400);\n }\n\n const requestBody = parseResult.data;\n\n // Build options for listReferences\n const options: ListOptions = pickDefined(requestBody, [\n \"sort\",\n \"order\",\n \"limit\",\n \"offset\",\n ] as const);\n\n // Call listReferences operation - always returns raw CslItem[]\n const result = await listReferences(library, options);\n\n return c.json(result);\n });\n\n return route;\n}\n","import type { CslItem } from \"../../core/csl-json/types.js\";\nimport type { ILibrary, IdentifierType } from \"../../core/library-interface.js\";\n\n/**\n * Options for updateReference operation\n */\nexport interface UpdateOperationOptions {\n /** Reference ID or UUID */\n identifier: string;\n /** Identifier type: 'id' (default), 'uuid', 'doi', 'pmid', or 'isbn' */\n idType?: IdentifierType;\n /** Partial updates to apply to the reference */\n updates: Partial<CslItem>;\n /** How to handle ID collision: 'fail' (default) or 'suffix' */\n onIdCollision?: \"fail\" | \"suffix\";\n}\n\n/**\n * Result of updateReference operation\n */\nexport interface UpdateOperationResult {\n /** Whether the update was successful */\n updated: boolean;\n /** The updated item (if successful) */\n item?: CslItem;\n /** The original item before update (when item is available) */\n oldItem?: CslItem;\n /** Error type when update failed (only when updated=false) */\n errorType?: \"not_found\" | \"id_collision\";\n /** True if the ID was changed due to collision resolution */\n idChanged?: boolean;\n /** The new ID after collision resolution (only when idChanged=true) */\n newId?: string;\n}\n\n/**\n * Update a reference in the library.\n *\n * @param library - The library to update\n * @param options - Update options including identifier, updates, and collision handling\n * @returns Result indicating success and the updated item\n */\nexport async function updateReference(\n library: ILibrary,\n options: UpdateOperationOptions\n): Promise<UpdateOperationResult> {\n const { identifier, idType = \"id\", updates, onIdCollision = \"fail\" } = options;\n\n // Update the reference using unified update() method\n const updateResult = await library.update(identifier, updates, { idType, onIdCollision });\n\n if (!updateResult.updated) {\n const result: UpdateOperationResult = { updated: false };\n if (updateResult.errorType) {\n result.errorType = updateResult.errorType;\n }\n if (updateResult.item) {\n result.item = updateResult.item;\n }\n if (updateResult.idChanged && updateResult.newId) {\n result.idChanged = true;\n result.newId = updateResult.newId;\n }\n return result;\n }\n\n // Save the library\n await library.save();\n\n // Build result from UpdateResult (item is now included)\n const result: UpdateOperationResult = { updated: true };\n\n if (updateResult.item) {\n result.item = updateResult.item;\n }\n\n if (updateResult.oldItem) {\n result.oldItem = updateResult.oldItem;\n }\n\n if (updateResult.idChanged && updateResult.newId) {\n result.idChanged = true;\n result.newId = updateResult.newId;\n }\n\n return result;\n}\n","import { Hono } from \"hono\";\nimport type { Config, FulltextSource } from \"../../config/schema.js\";\nimport type { Library } from \"../../core/library.js\";\nimport {\n fulltextConvert,\n fulltextDiscover,\n fulltextFetch,\n} from \"../../features/operations/fulltext/index.js\";\nimport { removeReference } from \"../../features/operations/remove.js\";\nimport { updateReference } from \"../../features/operations/update.js\";\n\n/**\n * Create references CRUD route with the given library.\n * @param library - Library instance to use for operations\n * @param config - Configuration for fulltext operations\n * @returns Hono app with references routes\n */\nexport function createReferencesRoute(library: Library, config?: Config) {\n const route = new Hono();\n\n // GET / - Get all references (getAll now returns Promise<CslItem[]>)\n route.get(\"/\", async (c) => {\n const items = await library.getAll();\n return c.json(items);\n });\n\n // GET /uuid/:uuid - Get reference by UUID\n route.get(\"/uuid/:uuid\", async (c) => {\n const uuid = c.req.param(\"uuid\");\n const item = await library.find(uuid, { idType: \"uuid\" });\n\n if (!item) {\n return c.json({ error: \"Reference not found\" }, 404);\n }\n\n return c.json(item);\n });\n\n // GET /id/:id - Get reference by citation ID\n route.get(\"/id/:id\", async (c) => {\n const id = c.req.param(\"id\");\n const item = await library.find(id);\n\n if (!item) {\n return c.json({ error: \"Reference not found\" }, 404);\n }\n\n return c.json(item);\n });\n\n // POST / - Create new reference\n route.post(\"/\", async (c) => {\n try {\n const body = await c.req.json();\n\n // Create and add reference (library.add handles validation and returns the added item)\n const addedItem = await library.add(body);\n\n return c.json(addedItem, 201);\n } catch (error) {\n return c.json(\n {\n error: \"Invalid request body\",\n details: error instanceof Error ? error.message : String(error),\n },\n 400\n );\n }\n });\n\n // PUT /uuid/:uuid - Update reference by UUID\n // Request body: { updates: Partial<CslItem>, onIdCollision?: \"fail\" | \"suffix\" }\n route.put(\"/uuid/:uuid\", async (c) => {\n const uuid = c.req.param(\"uuid\");\n\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON\" }, 400);\n }\n\n if (!body || typeof body !== \"object\") {\n return c.json({ error: \"Request body must be an object\" }, 400);\n }\n\n const { updates, onIdCollision } = body as {\n updates?: Partial<import(\"../../core/csl-json/types.js\").CslItem>;\n onIdCollision?: \"fail\" | \"suffix\";\n };\n\n if (!updates || typeof updates !== \"object\") {\n return c.json({ error: \"Request body must contain 'updates' object\" }, 400);\n }\n\n // Use updateReference operation\n const result = await updateReference(library, {\n identifier: uuid,\n idType: \"uuid\",\n updates,\n onIdCollision: onIdCollision ?? \"suffix\",\n });\n\n // Return operation result with appropriate status code\n if (!result.updated) {\n const status = result.errorType === \"id_collision\" ? 409 : 404;\n return c.json(result, status);\n }\n\n return c.json(result);\n });\n\n // PUT /id/:id - Update reference by citation ID\n // Request body: { updates: Partial<CslItem>, onIdCollision?: \"fail\" | \"suffix\" }\n route.put(\"/id/:id\", async (c) => {\n const id = c.req.param(\"id\");\n\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON\" }, 400);\n }\n\n if (!body || typeof body !== \"object\") {\n return c.json({ error: \"Request body must be an object\" }, 400);\n }\n\n const { updates, onIdCollision } = body as {\n updates?: Partial<import(\"../../core/csl-json/types.js\").CslItem>;\n onIdCollision?: \"fail\" | \"suffix\";\n };\n\n if (!updates || typeof updates !== \"object\") {\n return c.json({ error: \"Request body must contain 'updates' object\" }, 400);\n }\n\n // Use updateReference operation with idType: 'id'\n const result = await updateReference(library, {\n identifier: id,\n updates,\n onIdCollision: onIdCollision ?? \"suffix\",\n });\n\n // Return operation result with appropriate status code\n if (!result.updated) {\n const status = result.errorType === \"id_collision\" ? 409 : 404;\n return c.json(result, status);\n }\n\n return c.json(result);\n });\n\n // DELETE /uuid/:uuid - Delete reference by UUID\n route.delete(\"/uuid/:uuid\", async (c) => {\n const uuid = c.req.param(\"uuid\");\n\n // Use removeReference operation\n const result = await removeReference(library, {\n identifier: uuid,\n idType: \"uuid\",\n });\n\n // Return operation result with appropriate status code\n if (!result.removed) {\n return c.json(result, 404);\n }\n\n return c.json(result);\n });\n\n // DELETE /id/:id - Delete reference by citation ID\n route.delete(\"/id/:id\", async (c) => {\n const id = c.req.param(\"id\");\n\n // Use removeReference operation\n const result = await removeReference(library, {\n identifier: id,\n });\n\n // Return operation result with appropriate status code\n if (!result.removed) {\n return c.json(result, 404);\n }\n\n return c.json(result);\n });\n\n // Fulltext retrieval routes (require config)\n if (config) {\n // GET /uuid/:uuid/fulltext/discover\n route.get(\"/uuid/:uuid/fulltext/discover\", async (c) => {\n const uuid = c.req.param(\"uuid\");\n const result = await fulltextDiscover(library, {\n identifier: uuid,\n idType: \"uuid\",\n fulltextConfig: config.fulltext,\n });\n\n if (!result.success) {\n return c.json({ error: result.error }, 400);\n }\n\n return c.json(result);\n });\n\n // POST /uuid/:uuid/fulltext/fetch\n route.post(\"/uuid/:uuid/fulltext/fetch\", async (c) => {\n const uuid = c.req.param(\"uuid\");\n let body: { source?: string; force?: boolean } = {};\n try {\n body = await c.req.json();\n } catch {\n // No body is OK - use defaults\n }\n\n const result = await fulltextFetch(library, {\n identifier: uuid,\n idType: \"uuid\",\n fulltextConfig: config.fulltext,\n fulltextDirectory: config.attachments.directory,\n source: body.source as FulltextSource | undefined,\n force: body.force,\n });\n\n if (!result.success) {\n return c.json({ error: result.error }, 400);\n }\n\n return c.json(result);\n });\n\n // POST /uuid/:uuid/fulltext/convert\n route.post(\"/uuid/:uuid/fulltext/convert\", async (c) => {\n const uuid = c.req.param(\"uuid\");\n const result = await fulltextConvert(library, {\n identifier: uuid,\n idType: \"uuid\",\n fulltextDirectory: config.attachments.directory,\n });\n\n if (!result.success) {\n return c.json({ error: result.error }, 400);\n }\n\n return c.json(result);\n });\n }\n\n return route;\n}\n","import type { CslItem } from \"../../core/csl-json/types.js\";\nimport type { ILibrary } from \"../../core/library-interface.js\";\nimport {\n type PaginationOptions,\n type SearchSortField,\n type SortField,\n type SortOrder,\n paginate,\n sortReferences,\n} from \"../pagination/index.js\";\nimport { search } from \"../search/matcher.js\";\nimport { sortResults as sortByRelevance } from \"../search/sorter.js\";\nimport { tokenize } from \"../search/tokenizer.js\";\n\n/**\n * Sort options for search (includes relevance)\n */\nexport interface SearchSortOptions {\n sort?: SearchSortField;\n order?: SortOrder;\n}\n\n/**\n * Options for searchReferences operation\n */\nexport interface SearchOperationOptions extends PaginationOptions, SearchSortOptions {\n /** Search query string */\n query: string;\n}\n\n/**\n * Result of searchReferences operation\n */\nexport interface SearchResult {\n /** Raw CslItem array */\n items: CslItem[];\n /** Total count before pagination */\n total: number;\n /** Applied limit (0 if unlimited) */\n limit: number;\n /** Applied offset */\n offset: number;\n /** Next page offset, null if no more results */\n nextOffset: number | null;\n}\n\n/**\n * Search references in the library and return raw CslItem[] results.\n *\n * @param library - The library to search in\n * @param options - Search query and pagination options\n * @returns Raw CslItem[] with pagination metadata\n */\nexport async function searchReferences(\n library: ILibrary,\n options: SearchOperationOptions\n): Promise<SearchResult> {\n const query = options.query;\n const sort: SearchSortField = options.sort ?? \"updated\";\n const order: SortOrder = options.order ?? \"desc\";\n const limit = options.limit ?? 0;\n const offset = options.offset ?? 0;\n\n // Get all references\n const allItems = await library.getAll();\n\n // Search and get matched items\n let matchedItems: CslItem[];\n if (!query.trim()) {\n matchedItems = allItems;\n } else {\n // Tokenize and search\n const tokens = tokenize(query).tokens;\n const results = search(allItems, tokens);\n\n // If sorting by relevance, use the search sorter\n if (sort === \"relevance\") {\n const sorted = sortByRelevance(results);\n matchedItems =\n order === \"desc\"\n ? sorted.map((r) => r.reference)\n : sorted.map((r) => r.reference).reverse();\n } else {\n matchedItems = results.map((r) => r.reference);\n }\n }\n\n const total = matchedItems.length;\n\n // Sort (unless already sorted by relevance)\n let sorted: CslItem[];\n if (sort === \"relevance\") {\n sorted = matchedItems;\n } else {\n sorted = sortReferences(matchedItems, sort as SortField, order);\n }\n\n // Paginate\n const { items: paginatedItems, nextOffset } = paginate(sorted, { limit, offset });\n\n return {\n items: paginatedItems,\n total,\n limit,\n offset,\n nextOffset,\n };\n}\n","import { Hono } from \"hono\";\nimport { z } from \"zod\";\nimport type { Library } from \"../../core/library.js\";\nimport { type SearchOperationOptions, searchReferences } from \"../../features/operations/search.js\";\nimport { searchSortFieldSchema, sortOrderSchema } from \"../../features/pagination/index.js\";\nimport { pickDefined } from \"../../utils/object.js\";\n\n/**\n * Request body schema for search endpoint\n */\nconst searchRequestBodySchema = z.object({\n query: z.string(),\n sort: searchSortFieldSchema.optional(),\n order: sortOrderSchema.optional(),\n limit: z.number().int().min(0).optional(),\n offset: z.number().int().min(0).optional(),\n});\n\n/**\n * Request body type for search endpoint\n */\nexport type SearchRequestBody = z.infer<typeof searchRequestBodySchema>;\n\n/**\n * Creates search route for HTTP server\n */\nexport function createSearchRoute(library: Library) {\n const route = new Hono();\n\n // POST / - Search references\n route.post(\"/\", async (c) => {\n // Parse request body\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n return c.json({ error: \"Invalid JSON\" }, 400);\n }\n\n // Validate body with zod\n const parseResult = searchRequestBodySchema.safeParse(body);\n if (!parseResult.success) {\n const errorMessage = parseResult.error.issues[0]?.message ?? \"Invalid request body\";\n return c.json({ error: errorMessage }, 400);\n }\n\n const requestBody = parseResult.data;\n\n // Build options for searchReferences\n const options: SearchOperationOptions = {\n query: requestBody.query,\n ...pickDefined(requestBody, [\"sort\", \"order\", \"limit\", \"offset\"] as const),\n };\n\n // Call searchReferences operation - always returns raw CslItem[]\n const result = await searchReferences(library, options);\n\n return c.json(result);\n });\n\n return route;\n}\n","import { Hono } from \"hono\";\nimport type { Config } from \"../config/schema.js\";\nimport { Library } from \"../core/library.js\";\nimport { FileWatcher } from \"../features/file-watcher/file-watcher.js\";\nimport { createAddRoute } from \"./routes/add.js\";\nimport { createCheckRoute } from \"./routes/check.js\";\nimport { createCiteRoute } from \"./routes/cite.js\";\nimport { healthRoute } from \"./routes/health.js\";\nimport { createListRoute } from \"./routes/list.js\";\nimport { createReferencesRoute } from \"./routes/references.js\";\nimport { createSearchRoute } from \"./routes/search.js\";\n\n/**\n * Result of starting a server with file watcher.\n */\nexport interface ServerWithFileWatcherResult {\n /** The Hono application */\n app: Hono;\n /** The library instance */\n library: Library;\n /** The file watcher instance */\n fileWatcher: FileWatcher;\n /** Dispose function to clean up resources */\n dispose: () => Promise<void>;\n}\n\n/**\n * Create the main Hono server application.\n * @param library - Library instance for the references API\n * @param config - Configuration for the server\n * @returns Hono application\n */\nexport function createServer(library: Library, config: Config) {\n const app = new Hono();\n\n // Health check route\n app.route(\"/health\", healthRoute);\n\n // References API routes\n const referencesRoute = createReferencesRoute(library, config);\n app.route(\"/api/references\", referencesRoute);\n\n // Add references route\n const addRoute = createAddRoute(library, config);\n app.route(\"/api/add\", addRoute);\n\n // Cite route\n const citeRoute = createCiteRoute(library);\n app.route(\"/api/cite\", citeRoute);\n\n // List route\n const listRoute = createListRoute(library);\n app.route(\"/api/list\", listRoute);\n\n // Search route\n const searchRoute = createSearchRoute(library);\n app.route(\"/api/search\", searchRoute);\n\n // Check route\n const checkRoute = createCheckRoute(library);\n app.route(\"/api/check\", checkRoute);\n\n return app;\n}\n\n/**\n * Start a server with file watcher for automatic library reload.\n * Uses the same pattern as MCP server file monitoring.\n * @param libraryPath - Path to the library file\n * @param config - Configuration for the server\n * @returns Server with file watcher result\n */\nexport async function startServerWithFileWatcher(\n libraryPath: string,\n config: Config\n): Promise<ServerWithFileWatcherResult> {\n // Load library\n const library = await Library.load(libraryPath);\n\n // Create the Hono app\n const app = createServer(library, config);\n\n // Create and start file watcher\n const fileWatcher = new FileWatcher(libraryPath, {\n debounceMs: config.watch.debounceMs,\n maxRetries: config.watch.maxRetries,\n retryDelayMs: config.watch.retryIntervalMs,\n pollIntervalMs: config.watch.pollIntervalMs,\n });\n\n // Listen for file changes\n // Library.reload() handles self-write detection via hash comparison\n fileWatcher.on(\"change\", () => {\n library.reload().catch((error) => {\n // Log error but don't crash - library continues with previous state\n console.error(\"Failed to reload library:\", error);\n });\n });\n\n await fileWatcher.start();\n\n // Create dispose function\n const dispose = async (): Promise<void> => {\n fileWatcher.close();\n };\n\n return {\n app,\n library,\n fileWatcher,\n dispose,\n };\n}\n"],"names":["path","fs","type","normalizeArxivId","extractPmcidFromLocations","USER_AGENT","text","exports","global","object","key","encode","string","decode","html","he","this","node","require$$0","NodeType","ElementType","d","b","Node","DataNode","Text","Comment","ProcessingInstruction","NodeWithChildren","CDATA","Document","Element","require$$1","DomHandler","parser","_a","require$$2","CharCodes","BinTrieFlags","EntityDecoderState","DecodingMode","EntityDecoder","EntityLevel","EncodingMode","lib","attributes","stringify","getChildren","DocumentPosition","href","fetch","require$$3","require$$4","require$$5","require$$6","require$$7","SelectorType","AttributeAction","parse","subselects","isTraversal","escapeRegex","parse_1","skipWhitespace","compile_1","compile","elem","defaultOptions","voidTag","el","tagEndPos","tagStartPos","valid_1","valid","parseHtml","parseParagraph","parseList","parseBlockContent","parseSection","parseAuthors","parseAbstract","parseAcknowledgments","METADATA_SYMBOL","comment","xmlNode","result","jTitle","back","formatCitation","convertResult","cite","sort","DOI_URL_PREFIXES","identifiers","searchReferences","check","search","sorted","sortByRelevance"],"mappings":"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MAAe,QAAO,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAO,OAAM,KAAO,OAAM,KAAS,MAAK,KAAS,QAAO,MAAe,OAAM,MAAe,QAAO,KAAS,QAAO,MAAe,OAAM,MAAe,QAAO,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAO,SAAQ,KAAO,SAAQ,KAAS,UAAS,KAAS,UAAS,KAAO,QAAO,KAAO,QAAO,KAAS,QAAO,KAAS,QAAO,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAS,QAAO,KAAS,SAAQ,KAAS,UAAS,KAAS,UAAS,KAAS,SAAQ,MAAK,SAAQ,KAAS,SAAQ,KAAS,QAAO,KAAS,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,SAAQ,KAAS,SAAQ,KAAS,QAAO,KAAS,QAAO,KAAS,UAAS,MAAe,OAAM,KAAS,WAAU,MAAe,QAAO,MAAe,QAAO,KAAS,QAAO,KAAS,OAAM,KAAS,QAAO,KAAS,SAAQ,KAAS,SAAQ,KAAS,QAAO,KAAS,UAAS,KAAS,UAAS,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAS,MAAK,MAAe,QAAO,KAAS,QAAO,KAAS,MAAK,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAO,SAAQ,KAAO,SAAQ,KAAO,QAAO,KAAO,QAAO,KAAS,UAAS,KAAS,UAAS,KAAS,QAAO,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,KAAS,UAAS,KAAS,UAAS,MAAe,OAAM,MAAe,QAAO,KAAS,OAAM,MAAe,QAAO,KAAS,QAAO,MAAe,OAAM,MAAe,QAAO,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAS,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,KAAS,QAAO,MAAe,QAAO,MAAe,OAAM,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAO,UAAS,KAAO,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,OAAM,KAAS,OAAM,MAAe,QAAO,MAAe,OAAM,KAAS,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAO,QAAO,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAO,SAAQ,KAAO,SAAQ,KAAO,QAAO,KAAO,QAAO,KAAS,UAAS,KAAS,UAAS,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,KAAS,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,KAAS,QAAO,KAAS,UAAS,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,KAAS,QAAO,KAAS,MAAK,KAAS,QAAO,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAS,MAAK,KAAS,UAAS,KAAS,UAAS,KAAS,SAAQ,KAAS,SAAQ,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAO,SAAQ,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,SAAQ,KAAS,UAAS,KAAS,UAAS,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAO,UAAS,KAAS,UAAS,KAAS,UAAS,KAAO,SAAQ,KAAO,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAO,QAAO,KAAO,QAAO,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,KAAS,SAAQ,KAAS,SAAQ,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,MAAe,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAO,UAAS,KAAO,UAAS,KAAS,SAAQ,KAAS,SAAQ,KAAO,QAAO,KAAS,QAAO,MAAe,QAAO,MAAe,OAAM,MAAe,QAAO,KAAS,OAAM,KAAS,QAAO,MAAe,QAAO,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,UAAS,KAAS,QAAO,KAAS,QAAO,KAAS,SAAQ,KAAO,SAAQ,KAAO,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,QAAO,KAAS,QAAO,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,SAAQ,KAAS,QAAO,KAAS,SAAQ,KAAS,WAAU,KAAS,UAAS,KAAS,UAAS,KAAS,QAAO,KAAS,QAAO,KAAS,OAAM,KAAS,OAAM,KAAS,SAAQ,KAAS,UAAS,KAAS,SAAQ,KAAS,QAAO,KAAS,QAAO,KAAS,SAAQ,KAAS,UAAS,KAAS,SAAQ,KAAS,UAAS,KAAS,UAAS,KAAS,MAAK,KAAO,SAAQ,KAAS,MAAK,KAAS,MAAK,KAAS,MAAK,KAAS,MAAK,KAAS,MAAK,KAAS,WAAU,KAAS,WAAU,KAAS,MAAK,KAAS,OAAM,KAAS,MAAK,KAAS,OAAM,KAAS,QAAO,KAAS,OAAM,KAAS,SAAQ,KAAS,SAAQ,KAAS,UAAS,KAAS,OAAM,KAAS,OAAM,KAAS,QAAO,KAAS,WAAU,KAAS,QAAO,KAAS,OAAM,KAAS,QAAO,KAAS,OAAM,KAAS,OAAM,KAAS,OAAM,KAAS,OAAM,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AC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CA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G,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,uBAAuB,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,G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GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,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AC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAE,GAAG,CAAC,MAAM,SAAS,GA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","x_google_ignoreList":[9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81]}