@finbheara/names 0.9.1 → 0.10.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 (40) hide show
  1. package/README.md +38 -1
  2. package/dist/chunks/{index-b2k3er3h.js → index-7sppf1vh.js} +90 -8
  3. package/dist/chunks/{index-b2k3er3h.js.map → index-7sppf1vh.js.map} +5 -3
  4. package/dist/chunks/{index-0qptxnwh.js → index-7vvt5hhy.js} +13 -2
  5. package/dist/chunks/{index-0qptxnwh.js.map → index-7vvt5hhy.js.map} +2 -2
  6. package/dist/chunks/index-ebebeamh.js +446 -0
  7. package/dist/chunks/index-ebebeamh.js.map +10 -0
  8. package/dist/chunks/{index-fzzq5txh.js → index-khxa4qjy.js} +2 -2
  9. package/dist/chunks/{index-2fsdvhaf.js → index-kw6gbrnq.js} +2 -2
  10. package/dist/chunks/{index-d4wr471g.js → index-pncn9y2r.js} +2 -2
  11. package/dist/chunks/index-qsznkk4s.js +3 -0
  12. package/dist/chunks/index-qsznkk4s.js.map +9 -0
  13. package/dist/chunks/{index-852w8w1s.js → index-r5fp3znj.js} +3 -3
  14. package/dist/chunks/{index-0vg56t5v.js → index-yq8hsd1f.js} +3 -3
  15. package/dist/chunks/phrase-672g18kw.js +11 -0
  16. package/dist/classifier/index.js +3 -3
  17. package/dist/cli/census.js +4 -4
  18. package/dist/index.js +25 -8
  19. package/dist/index.js.map +1 -1
  20. package/dist/lexicon/index.js +1 -1
  21. package/dist/measure/index.js +4 -4
  22. package/dist/normalize/index.js +17 -5
  23. package/dist/normalize/index.js.map +1 -1
  24. package/dist/phonetic/index.js +10 -0
  25. package/dist/phonetic/index.js.map +9 -0
  26. package/dist/types/index.d.ts +2 -0
  27. package/dist/types/normalize/block-keys.d.ts +53 -0
  28. package/dist/types/normalize/index.d.ts +2 -0
  29. package/dist/types/normalize/name-columns.d.ts +51 -0
  30. package/dist/types/phonetic/double-metaphone.d.ts +25 -0
  31. package/dist/types/phonetic/index.d.ts +11 -0
  32. package/names.txt +11 -0
  33. package/package.json +8 -2
  34. package/dist/chunks/phrase-dczgr4vs.js +0 -11
  35. /package/dist/chunks/{index-fzzq5txh.js.map → index-khxa4qjy.js.map} +0 -0
  36. /package/dist/chunks/{index-2fsdvhaf.js.map → index-kw6gbrnq.js.map} +0 -0
  37. /package/dist/chunks/{index-d4wr471g.js.map → index-pncn9y2r.js.map} +0 -0
  38. /package/dist/chunks/{index-852w8w1s.js.map → index-r5fp3znj.js.map} +0 -0
  39. /package/dist/chunks/{index-0vg56t5v.js.map → index-yq8hsd1f.js.map} +0 -0
  40. /package/dist/chunks/{phrase-dczgr4vs.js.map → phrase-672g18kw.js.map} +0 -0
@@ -12,7 +12,7 @@
12
12
  "/**\n * The committed `names.txt`, baked into the module graph as a string.\n *\n * A JS module rather than a file read, so the package needs no filesystem and no\n * path resolution at runtime (browsers, bundlers and Node all load it alike),\n * and so a cache keyed on the import closure sees the lexicon move. Bun reads\n * the text import from source; the build inlines it into `dist/`.\n */\nimport text from \"../../names.txt\" with { type: \"text\" };\n\nexport const NAMES_TXT: string = text;\n",
13
13
  "/**\n * `names.txt` — its own format parsed. THE ONE PARSER: every reader of the file,\n * here and downstream, goes through `parseEntries`.\n *\n * THE FORMAT IS THE FILE'S OWN HEADER'S: `Name:FLAGS`, one per line, `#` a\n * comment, a flagless line legal (and read as `F`, see `./flags.ts`). Nothing\n * here interprets a flag; `FLAGS` is handed back as the file spells it.\n *\n * THE SPLIT IS ON THE FIRST COLON. A name never contains a colon and a flag\n * string never does either, so on a well-formed line first and last agree; on a\n * malformed one (`A:B:C`) the first-colon read keeps the name intact and puts the\n * garbage in the flags, where `./flags.ts` ignores the letters it does not issue\n * and the CLI's `set` warns. A last-colon read would instead invent a name.\n *\n * BOTH SIDES ARE TRIMMED, so trailing whitespace or a CRLF checkout cannot turn\n * `L` into `L\\r` and silently fail every flag test.\n */\n\n/** One line of the file: what it spells, what it claims, and where it is. */\nexport interface NameEntry {\n\t/** the spelling, verbatim */\n\treadonly name: string;\n\t/** the flag letters and digits after the colon, verbatim; `\"\"` where the line carries none */\n\treadonly flags: string;\n\t/** 1-based line number, so a report addresses `names.txt:<line>` */\n\treadonly line: number;\n}\n\n/**\n * Every entry in the file's text, in file order.\n *\n * A comment and a blank line are skipped and NOT counted as entries, but the\n * line number is the real one: a caller's report has to address the file a\n * person opens.\n */\nexport function parseEntries(text: string): NameEntry[] {\n\tconst out: NameEntry[] = [];\n\tfor (const [i, raw] of text.split(\"\\n\").entries()) {\n\t\tif (raw.startsWith(\"#\") || raw.trim() === \"\") continue;\n\t\tconst at = raw.indexOf(\":\");\n\t\tconst name = (at === -1 ? raw : raw.slice(0, at)).trim();\n\t\tif (name === \"\") continue;\n\t\tout.push({ name, flags: at === -1 ? \"\" : raw.slice(at + 1).trim(), line: i + 1 });\n\t}\n\treturn out;\n}\n"
14
14
  ],
15
- "mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChJD,IAAM,aAAoB;;;ACyB1B,SAAS,aAAY,CAAC,MAA2B;AAAA,EACvD,MAAM,MAA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",
16
- "debugId": "701A828D343F805E64756E2164756E21",
15
+ "mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChJD,IAAM,aAAoB;;;ACyB1B,SAAS,aAAY,CAAC,MAA2B;AAAA,EAC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",
16
+ "debugId": "FFD647DD2BA7CB3E64756E2164756E21",
17
17
  "names": []
18
18
  }
@@ -0,0 +1,446 @@
1
+ // src/phonetic/double-metaphone.ts
2
+ function isVowel(c) {
3
+ return c !== "" && "AEIOUY".includes(c);
4
+ }
5
+ function isSlavoGermanic(w) {
6
+ return /W|K|CZ|WITZ/.test(w);
7
+ }
8
+ function doubleMetaphone2(word) {
9
+ const w = (word ?? "").toUpperCase();
10
+ const length = w.length;
11
+ const last = length - 1;
12
+ const slavo = isSlavoGermanic(w);
13
+ let primary = "";
14
+ let secondary = "";
15
+ const at = (i) => w.charAt(i);
16
+ const stringAt = (start, len, list) => {
17
+ if (start < 0 || start >= length)
18
+ return false;
19
+ return list.includes(w.substring(start, start + len));
20
+ };
21
+ const add = (p, s) => {
22
+ primary += p;
23
+ secondary += s === undefined ? p : s;
24
+ };
25
+ let n = 0;
26
+ if (stringAt(0, 2, ["GN", "KN", "PN", "WR", "PS"]))
27
+ n = 1;
28
+ if (at(0) === "X") {
29
+ add("S");
30
+ n = 1;
31
+ }
32
+ while (n < length && (primary.length < 4 || secondary.length < 4)) {
33
+ const c = at(n);
34
+ switch (c) {
35
+ case "A":
36
+ case "E":
37
+ case "I":
38
+ case "O":
39
+ case "U":
40
+ case "Y":
41
+ if (n === 0)
42
+ add("A");
43
+ n += 1;
44
+ break;
45
+ case "B":
46
+ add("P");
47
+ n += at(n + 1) === "B" ? 2 : 1;
48
+ break;
49
+ case "C":
50
+ if (n > 1 && !isVowel(at(n - 2)) && stringAt(n - 1, 3, ["ACH"]) && at(n + 2) !== "I" && (at(n + 2) !== "E" || stringAt(n - 2, 6, ["BACHER", "MACHER"]))) {
51
+ add("K");
52
+ n += 2;
53
+ break;
54
+ }
55
+ if (n === 0 && stringAt(0, 6, ["CAESAR"])) {
56
+ add("S");
57
+ n += 2;
58
+ break;
59
+ }
60
+ if (stringAt(n, 4, ["CHIA"])) {
61
+ add("K");
62
+ n += 2;
63
+ break;
64
+ }
65
+ if (stringAt(n, 2, ["CH"])) {
66
+ if (n > 0 && stringAt(n, 4, ["CHAE"])) {
67
+ add("K", "X");
68
+ n += 2;
69
+ break;
70
+ }
71
+ if (n === 0 && (stringAt(n + 1, 5, ["HARAC", "HARIS"]) || stringAt(n + 1, 3, ["HOR", "HYM", "HIA", "HEM"])) && !stringAt(0, 5, ["CHORE"])) {
72
+ add("K");
73
+ n += 2;
74
+ break;
75
+ }
76
+ if (stringAt(0, 4, ["VAN ", "VON "]) || stringAt(0, 3, ["SCH"]) || stringAt(n - 2, 6, ["ORCHES", "ARCHIT", "ORCHID"]) || stringAt(n + 2, 1, ["T", "S"]) || (stringAt(n - 1, 1, ["A", "O", "U", "E"]) || n === 0) && stringAt(n + 2, 1, ["L", "R", "N", "M", "B", "H", "F", "V", "W", " "])) {
77
+ add("K");
78
+ } else if (n > 0) {
79
+ if (stringAt(0, 2, ["MC"]))
80
+ add("K");
81
+ else
82
+ add("X", "K");
83
+ } else {
84
+ add("X");
85
+ }
86
+ n += 2;
87
+ break;
88
+ }
89
+ if (stringAt(n, 2, ["CZ"]) && !stringAt(n - 2, 4, ["WICZ"])) {
90
+ add("S", "X");
91
+ n += 2;
92
+ break;
93
+ }
94
+ if (stringAt(n + 1, 3, ["CIA"])) {
95
+ add("X");
96
+ n += 3;
97
+ break;
98
+ }
99
+ if (stringAt(n, 2, ["CC"]) && !(n === 1 && at(0) === "M")) {
100
+ if (stringAt(n + 2, 1, ["I", "E", "H"]) && !stringAt(n + 2, 2, ["HU"])) {
101
+ if (n === 1 && at(n - 1) === "A" || stringAt(n - 1, 5, ["UCCEE", "UCCES"])) {
102
+ add("KS");
103
+ } else {
104
+ add("X");
105
+ }
106
+ n += 3;
107
+ break;
108
+ }
109
+ add("K");
110
+ n += 2;
111
+ break;
112
+ }
113
+ if (stringAt(n, 2, ["CK", "CG", "CQ"])) {
114
+ add("K");
115
+ n += 2;
116
+ break;
117
+ }
118
+ if (stringAt(n, 2, ["CI", "CE", "CY"])) {
119
+ if (stringAt(n, 3, ["CIO", "CIE", "CIA"]))
120
+ add("S", "X");
121
+ else
122
+ add("S");
123
+ n += 2;
124
+ break;
125
+ }
126
+ add("K");
127
+ if (stringAt(n + 1, 2, [" C", " Q", " G"]))
128
+ n += 3;
129
+ else if (stringAt(n + 1, 1, ["C", "K", "Q"]) && !stringAt(n + 1, 2, ["CE", "CI"]))
130
+ n += 2;
131
+ else
132
+ n += 1;
133
+ break;
134
+ case "D":
135
+ if (stringAt(n, 2, ["DG"])) {
136
+ if (stringAt(n + 2, 1, ["I", "E", "Y"])) {
137
+ add("J");
138
+ n += 3;
139
+ } else {
140
+ add("TK");
141
+ n += 2;
142
+ }
143
+ break;
144
+ }
145
+ if (stringAt(n, 2, ["DT", "DD"])) {
146
+ add("T");
147
+ n += 2;
148
+ break;
149
+ }
150
+ add("T");
151
+ n += 1;
152
+ break;
153
+ case "F":
154
+ add("F");
155
+ n += at(n + 1) === "F" ? 2 : 1;
156
+ break;
157
+ case "G":
158
+ if (at(n + 1) === "H") {
159
+ if (n > 0 && !isVowel(at(n - 1))) {
160
+ add("K");
161
+ n += 2;
162
+ break;
163
+ }
164
+ if (n === 0) {
165
+ if (at(n + 2) === "I")
166
+ add("J");
167
+ else
168
+ add("K");
169
+ n += 2;
170
+ break;
171
+ }
172
+ if (n > 1 && stringAt(n - 2, 1, ["B", "H", "D"]) || n > 2 && stringAt(n - 3, 1, ["B", "H", "D"]) || n > 3 && stringAt(n - 4, 1, ["B", "H"])) {
173
+ n += 2;
174
+ break;
175
+ }
176
+ if (n > 2 && at(n - 1) === "U" && stringAt(n - 3, 1, ["C", "G", "L", "R", "T"])) {
177
+ add("F");
178
+ } else if (n > 0 && at(n - 1) !== "I") {
179
+ add("K");
180
+ }
181
+ n += 2;
182
+ break;
183
+ }
184
+ if (at(n + 1) === "N") {
185
+ if (n === 1 && isVowel(at(0)) && !slavo) {
186
+ add("KN", "N");
187
+ } else if (!stringAt(n + 2, 2, ["EY"]) && at(n + 1) !== "Y" && !slavo) {
188
+ add("N", "KN");
189
+ } else {
190
+ add("KN");
191
+ }
192
+ n += 2;
193
+ break;
194
+ }
195
+ if (stringAt(n + 1, 2, ["LI"]) && !slavo) {
196
+ add("KL", "L");
197
+ n += 2;
198
+ break;
199
+ }
200
+ if (n === 0 && (at(n + 1) === "Y" || stringAt(n + 1, 2, ["ES", "EP", "EB", "EL", "EY", "IB", "IL", "IN", "IE", "EI", "ER"]))) {
201
+ add("K", "J");
202
+ n += 2;
203
+ break;
204
+ }
205
+ if ((stringAt(n + 1, 2, ["ER"]) || at(n + 1) === "Y") && !stringAt(0, 6, ["DANGER", "RANGER", "MANGER"]) && !stringAt(n - 1, 1, ["E", "I"]) && !stringAt(n - 1, 3, ["RGY", "OGY"])) {
206
+ add("K", "J");
207
+ n += 2;
208
+ break;
209
+ }
210
+ if (stringAt(n + 1, 1, ["E", "I", "Y"]) || stringAt(n - 1, 4, ["AGGI", "OGGI"])) {
211
+ if (stringAt(0, 4, ["VAN ", "VON "]) || stringAt(0, 3, ["SCH"]) || stringAt(n + 1, 2, ["ET"])) {
212
+ add("K");
213
+ } else if (stringAt(n + 1, 4, ["IER "])) {
214
+ add("J");
215
+ } else {
216
+ add("J", "K");
217
+ }
218
+ n += 2;
219
+ break;
220
+ }
221
+ add("K");
222
+ n += at(n + 1) === "G" ? 2 : 1;
223
+ break;
224
+ case "H":
225
+ if ((n === 0 || isVowel(at(n - 1))) && isVowel(at(n + 1))) {
226
+ add("H");
227
+ n += 2;
228
+ } else {
229
+ n += 1;
230
+ }
231
+ break;
232
+ case "J":
233
+ if (stringAt(n, 4, ["JOSE"]) || stringAt(0, 4, ["SAN "])) {
234
+ if (n === 0 && at(n + 4) === " " || stringAt(0, 4, ["SAN "])) {
235
+ add("H");
236
+ } else {
237
+ add("J", "H");
238
+ }
239
+ n += 1;
240
+ break;
241
+ }
242
+ if (n === 0) {
243
+ add("J", "A");
244
+ } else if (isVowel(at(n - 1)) && !slavo && (at(n + 1) === "A" || at(n + 1) === "O")) {
245
+ add("J", "H");
246
+ } else if (n === last) {
247
+ add("J", "");
248
+ } else if (!stringAt(n + 1, 1, ["L", "T", "K", "S", "N", "M", "B", "Z"]) && !stringAt(n - 1, 1, ["S", "K", "L"])) {
249
+ add("J");
250
+ }
251
+ n += at(n + 1) === "J" ? 2 : 1;
252
+ break;
253
+ case "K":
254
+ add("K");
255
+ n += at(n + 1) === "K" ? 2 : 1;
256
+ break;
257
+ case "L":
258
+ if (at(n + 1) === "L") {
259
+ if (n === length - 3 && stringAt(n - 1, 4, ["ILLO", "ILLA", "ALLE"]) || (stringAt(last - 1, 2, ["AS", "OS"]) || stringAt(last, 1, ["A", "O"])) && stringAt(n - 1, 4, ["ALLE"])) {
260
+ add("L", "");
261
+ n += 2;
262
+ break;
263
+ }
264
+ n += 2;
265
+ } else {
266
+ n += 1;
267
+ }
268
+ add("L");
269
+ break;
270
+ case "M":
271
+ add("M");
272
+ if (at(n + 1) === "M" || at(n - 1) === "U" && at(n + 1) === "B" && (n + 1 === last || stringAt(n + 2, 2, ["ER"]))) {
273
+ n += 2;
274
+ } else {
275
+ n += 1;
276
+ }
277
+ break;
278
+ case "N":
279
+ add("N");
280
+ n += at(n + 1) === "N" ? 2 : 1;
281
+ break;
282
+ case "P":
283
+ if (at(n + 1) === "H") {
284
+ add("F");
285
+ n += 2;
286
+ break;
287
+ }
288
+ add("P");
289
+ n += stringAt(n + 1, 1, ["P", "B"]) ? 2 : 1;
290
+ break;
291
+ case "Q":
292
+ add("K");
293
+ n += at(n + 1) === "Q" ? 2 : 1;
294
+ break;
295
+ case "R":
296
+ if (n === last && !slavo && stringAt(n - 2, 2, ["IE"]) && !stringAt(n - 4, 2, ["ME", "MA"])) {
297
+ add("", "R");
298
+ } else {
299
+ add("R");
300
+ }
301
+ n += at(n + 1) === "R" ? 2 : 1;
302
+ break;
303
+ case "S":
304
+ if (stringAt(n - 1, 3, ["ISL", "YSL"])) {
305
+ n += 1;
306
+ break;
307
+ }
308
+ if (n === 0 && stringAt(0, 5, ["SUGAR"])) {
309
+ add("X", "S");
310
+ n += 1;
311
+ break;
312
+ }
313
+ if (stringAt(n, 2, ["SH"])) {
314
+ if (stringAt(n + 1, 4, ["HEIM", "HOEK", "HOLM", "HOLZ"]))
315
+ add("S");
316
+ else
317
+ add("X");
318
+ n += 2;
319
+ break;
320
+ }
321
+ if (stringAt(n, 3, ["SIO", "SIA"]) || stringAt(n, 4, ["SIAN"])) {
322
+ if (!slavo)
323
+ add("S", "X");
324
+ else
325
+ add("S");
326
+ n += 3;
327
+ break;
328
+ }
329
+ if (n === 0 && stringAt(n + 1, 1, ["M", "N", "L", "W"]) || at(n + 1) === "Z") {
330
+ add("S", "X");
331
+ n += at(n + 1) === "Z" ? 2 : 1;
332
+ break;
333
+ }
334
+ if (stringAt(n, 2, ["SC"])) {
335
+ if (at(n + 2) === "H") {
336
+ if (stringAt(n + 3, 2, ["OO", "ER", "EN", "UY", "ED", "EM"])) {
337
+ if (stringAt(n + 3, 2, ["ER", "EN"]))
338
+ add("X", "SK");
339
+ else
340
+ add("SK");
341
+ } else if (n === 0 && !isVowel(at(3)) && at(3) !== "W") {
342
+ add("X", "S");
343
+ } else {
344
+ add("X");
345
+ }
346
+ n += 3;
347
+ break;
348
+ }
349
+ if (stringAt(n + 2, 1, ["I", "E", "Y"])) {
350
+ add("S");
351
+ n += 3;
352
+ break;
353
+ }
354
+ add("SK");
355
+ n += 3;
356
+ break;
357
+ }
358
+ if (n === last && stringAt(n - 2, 2, ["AI", "OI"])) {
359
+ add("", "S");
360
+ } else {
361
+ add("S");
362
+ }
363
+ n += stringAt(n + 1, 1, ["S", "Z"]) ? 2 : 1;
364
+ break;
365
+ case "T":
366
+ if (stringAt(n, 4, ["TION"])) {
367
+ add("X");
368
+ n += 3;
369
+ break;
370
+ }
371
+ if (stringAt(n, 3, ["TIA", "TCH"])) {
372
+ add("X");
373
+ n += 3;
374
+ break;
375
+ }
376
+ if (stringAt(n, 2, ["TH"]) || stringAt(n, 3, ["TTH"])) {
377
+ if (stringAt(n + 2, 2, ["OM", "AM"]) || stringAt(0, 4, ["VAN ", "VON "]) || stringAt(0, 3, ["SCH"])) {
378
+ add("T");
379
+ } else {
380
+ add("0", "T");
381
+ }
382
+ n += 2;
383
+ break;
384
+ }
385
+ add("T");
386
+ n += stringAt(n + 1, 1, ["T", "D"]) ? 2 : 1;
387
+ break;
388
+ case "V":
389
+ add("F");
390
+ n += at(n + 1) === "V" ? 2 : 1;
391
+ break;
392
+ case "W":
393
+ if (stringAt(n, 2, ["WR"])) {
394
+ add("R");
395
+ n += 2;
396
+ break;
397
+ }
398
+ if (n === 0 && (isVowel(at(n + 1)) || stringAt(n, 2, ["WH"]))) {
399
+ if (isVowel(at(n + 1)))
400
+ add("A", "F");
401
+ else
402
+ add("A");
403
+ }
404
+ if (n === last && isVowel(at(n - 1)) || stringAt(n - 1, 5, ["EWSKI", "EWSKY", "OWSKI", "OWSKY"]) || stringAt(0, 3, ["SCH"])) {
405
+ add("", "F");
406
+ n += 1;
407
+ break;
408
+ }
409
+ if (stringAt(n, 4, ["WICZ", "WITZ"])) {
410
+ add("TS", "FX");
411
+ n += 4;
412
+ break;
413
+ }
414
+ n += 1;
415
+ break;
416
+ case "X":
417
+ if (!(n === last && (stringAt(n - 3, 3, ["IAU", "EAU"]) || stringAt(n - 2, 2, ["AU", "OU"])))) {
418
+ add("KS");
419
+ }
420
+ n += stringAt(n + 1, 1, ["C", "X"]) ? 2 : 1;
421
+ break;
422
+ case "Z":
423
+ if (at(n + 1) === "H") {
424
+ add("J");
425
+ n += 2;
426
+ break;
427
+ }
428
+ if (stringAt(n + 1, 2, ["ZO", "ZI", "ZA"]) || slavo && n > 0 && at(n - 1) !== "T") {
429
+ add("S", "TS");
430
+ } else {
431
+ add("S");
432
+ }
433
+ n += at(n + 1) === "Z" ? 2 : 1;
434
+ break;
435
+ default:
436
+ n += 1;
437
+ break;
438
+ }
439
+ }
440
+ return [primary.slice(0, 4), secondary.slice(0, 4)];
441
+ }
442
+
443
+ export { doubleMetaphone2 };
444
+
445
+ //# debugId=48794DFF0F1B895264756E2164756E21
446
+ //# sourceMappingURL=index-ebebeamh.js.map