@budiauktioner/buildi-primitives 0.1.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 (107) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/LICENSE +21 -0
  3. package/README.md +253 -0
  4. package/THIRD_PARTY_NOTICES.md +52 -0
  5. package/dist/banking/index.cjs +6491 -0
  6. package/dist/banking/index.cjs.map +1 -0
  7. package/dist/banking/index.d.cts +58 -0
  8. package/dist/banking/index.d.ts +58 -0
  9. package/dist/banking/index.js +6464 -0
  10. package/dist/banking/index.js.map +1 -0
  11. package/dist/contact/index.cjs +6678 -0
  12. package/dist/contact/index.cjs.map +1 -0
  13. package/dist/contact/index.d.cts +709 -0
  14. package/dist/contact/index.d.ts +709 -0
  15. package/dist/contact/index.js +6586 -0
  16. package/dist/contact/index.js.map +1 -0
  17. package/dist/country-BhD51LDL.d.cts +433 -0
  18. package/dist/country-p0n0EVQ9.d.ts +433 -0
  19. package/dist/finance/index.cjs +3592 -0
  20. package/dist/finance/index.cjs.map +1 -0
  21. package/dist/finance/index.d.cts +83 -0
  22. package/dist/finance/index.d.ts +83 -0
  23. package/dist/finance/index.js +3584 -0
  24. package/dist/finance/index.js.map +1 -0
  25. package/dist/geography/index.cjs +4227 -0
  26. package/dist/geography/index.cjs.map +1 -0
  27. package/dist/geography/index.d.cts +34 -0
  28. package/dist/geography/index.d.ts +34 -0
  29. package/dist/geography/index.js +4202 -0
  30. package/dist/geography/index.js.map +1 -0
  31. package/dist/index.cjs +14087 -0
  32. package/dist/index.cjs.map +1 -0
  33. package/dist/index.d.cts +75 -0
  34. package/dist/index.d.ts +75 -0
  35. package/dist/index.js +13868 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/isin-EeVPpNWu.d.ts +39 -0
  38. package/dist/isin-ZlQLBVm8.d.cts +39 -0
  39. package/dist/organization/index.cjs +2376 -0
  40. package/dist/organization/index.cjs.map +1 -0
  41. package/dist/organization/index.d.cts +117 -0
  42. package/dist/organization/index.d.ts +117 -0
  43. package/dist/organization/index.js +2346 -0
  44. package/dist/organization/index.js.map +1 -0
  45. package/dist/person/index.cjs +1144 -0
  46. package/dist/person/index.cjs.map +1 -0
  47. package/dist/person/index.d.cts +60 -0
  48. package/dist/person/index.d.ts +60 -0
  49. package/dist/person/index.js +1125 -0
  50. package/dist/person/index.js.map +1 -0
  51. package/dist/person-full-name-Cmc9Ynuc.d.cts +82 -0
  52. package/dist/person-full-name-D6Hbsab6.d.ts +82 -0
  53. package/dist/phone-number-C24--ggy.d.ts +139 -0
  54. package/dist/phone-number-DZ-YxCQQ.d.cts +139 -0
  55. package/dist/property/index.cjs +487 -0
  56. package/dist/property/index.cjs.map +1 -0
  57. package/dist/property/index.d.cts +56 -0
  58. package/dist/property/index.d.ts +56 -0
  59. package/dist/property/index.js +480 -0
  60. package/dist/property/index.js.map +1 -0
  61. package/dist/sample-data/index.cjs +12310 -0
  62. package/dist/sample-data/index.cjs.map +1 -0
  63. package/dist/sample-data/index.d.cts +260 -0
  64. package/dist/sample-data/index.d.ts +260 -0
  65. package/dist/sample-data/index.js +12302 -0
  66. package/dist/sample-data/index.js.map +1 -0
  67. package/dist/swedish-address-DNC3ftRF.d.cts +297 -0
  68. package/dist/swedish-address-GMzjqgxb.d.ts +297 -0
  69. package/dist/swedish-bank-account-holder-name-BFJ8h1aO.d.cts +45 -0
  70. package/dist/swedish-bank-account-holder-name-CAAru07F.d.ts +45 -0
  71. package/dist/swedish-municipality-DlUS7g7h.d.cts +87 -0
  72. package/dist/swedish-municipality-nDRHYRAd.d.ts +87 -0
  73. package/dist/swedish-organization-name-D7NvERxA.d.cts +33 -0
  74. package/dist/swedish-organization-name-rR0Q836C.d.ts +33 -0
  75. package/dist/swedish-organization-number-Bcj7V_lh.d.cts +130 -0
  76. package/dist/swedish-organization-number-DM8dpXwR.d.ts +130 -0
  77. package/dist/swedish-organization-type-CZOdETwG.d.cts +29 -0
  78. package/dist/swedish-organization-type-CZOdETwG.d.ts +29 -0
  79. package/dist/swedish-personal-identity-number-BiIg4io3.d.ts +149 -0
  80. package/dist/swedish-personal-identity-number-Cp9Coz55.d.cts +149 -0
  81. package/dist/swedish-property-designation-BM-gdd9x.d.ts +46 -0
  82. package/dist/swedish-property-designation-BaHXufqV.d.cts +46 -0
  83. package/dist/swedish-sni-code-Ccsswpni.d.ts +53 -0
  84. package/dist/swedish-sni-code-CuJFyM6l.d.cts +53 -0
  85. package/dist/swedish-swish-number-CL6Gx_h3.d.cts +397 -0
  86. package/dist/swedish-swish-number-DDG3mNDg.d.ts +397 -0
  87. package/dist/text-candidate-qg2bD9PY.d.cts +110 -0
  88. package/dist/text-candidate-qg2bD9PY.d.ts +110 -0
  89. package/dist/text-scanning/index.cjs +10414 -0
  90. package/dist/text-scanning/index.cjs.map +1 -0
  91. package/dist/text-scanning/index.d.cts +153 -0
  92. package/dist/text-scanning/index.d.ts +153 -0
  93. package/dist/text-scanning/index.js +10406 -0
  94. package/dist/text-scanning/index.js.map +1 -0
  95. package/dist/validation/index.cjs +83 -0
  96. package/dist/validation/index.cjs.map +1 -0
  97. package/dist/validation/index.d.cts +63 -0
  98. package/dist/validation/index.d.ts +63 -0
  99. package/dist/validation/index.js +79 -0
  100. package/dist/validation/index.js.map +1 -0
  101. package/dist/web/index.cjs +3994 -0
  102. package/dist/web/index.cjs.map +1 -0
  103. package/dist/web/index.d.cts +203 -0
  104. package/dist/web/index.d.ts +203 -0
  105. package/dist/web/index.js +3987 -0
  106. package/dist/web/index.js.map +1 -0
  107. package/package.json +211 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/primitives-defaults.ts","../../src/geography/continent.ts","../../src/geography/country-capital.ts","../../src/internal/input-sanitization.ts","../../src/geography/geo-coordinate.ts","../../src/geography/language.ts","../../src/text-scanning/text-candidate-category.ts","../../src/text-scanning/text-candidate.ts","../../src/text-scanning/text-match-confidence.ts","../../src/finance/currency.ts","../../src/geography/country-data.ts","../../src/geography/country-coordinates.ts","../../src/geography/country-capitals.ts","../../src/geography/country-metadata.ts","../../src/geography/country.ts","../../src/contact/address-city.ts","../../src/contact/address-street.ts","../../src/contact/address-zip-code.ts","../../src/contact/country-address-registry.ts","../../src/contact/address.ts","../../src/contact/country-address.ts","../../src/contact/country-address-factory.ts","../../src/contact/country-zip-code-factory.ts","../../src/contact/country-zip-codes.ts","../../src/contact/country-addresses.ts","../../src/contact/swedish-address-zip-code.ts","../../src/contact/swedish-address.ts","../../src/contact/register-default-country-addresses.ts","../../src/organization/organization-validation-utils.ts","../../src/organization/swedish-organization-name.ts","../../src/person/person-name-normalization.ts","../../src/person/person-given-name.ts","../../src/person/person-family-name.ts","../../src/person/person-full-name.ts","../../src/contact/contact-address.ts","../../src/contact/phone-calling-code.ts","../../src/contact/phone-number.ts","../../src/contact/phone-number-test-data.ts","../../src/contact/contact-masking.ts","../../src/contact/contact-external-links.ts","../../src/contact/contact-lookup.ts","../../src/contact/index.ts"],"names":["MAX_INPUT_LENGTH","BY_KEY","BY_NAME","capitalizeWord","collapseWhitespace","capitalizeEachWord","capitalizeHyphenated","ALL","SCAN"],"mappings":"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AI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK,CAAA;AAAA,EACV,EAAA,EAAI,CAAC,KAAK;AACZ,CAAU,CAAA;AAGH,IAAM,iBAAA,GAAiE,OAAO,MAAA,CAAO;AAAA,EAC1F,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,EAC3B,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,EAC3B,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAI,CAAA;AAAA,EACT,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI;AACjB,CAAU,CAAA;AAGH,IAAM,eAAA,GAAoD,OAAO,MAAA,CAAO;AAAA,EAC7E,GAAA,EAAK,IAAA;AAAA,EACL,EAAA,EAAI,IAAA;AAAA,EACJ,OAAA,EAAS,IAAA;AAAA,EACT,gBAAA,EAAkB,IAAA;AAAA,EAClB,aAAA,EAAe,IAAA;AAAA,EACf,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,IAAA;AAAA,EACX,MAAA,EAAQ,IAAA;AAAA,EACR,eAAA,EAAiB,IAAA;AAAA,EACjB,OAAA,EAAS,IAAA;AAAA,EACT,GAAA,EAAK,IAAA;AAAA,EACL,aAAA,EAAe,IAAA;AAAA,EACf,aAAA,EAAe,IAAA;AAAA,EACf,qBAAA,EAAuB,IAAA;AAAA,EACvB,MAAA,EAAQ,IAAA;AAAA,EACR,QAAA,EAAU,IAAA;AAAA,EACV,QAAA,EAAU,IAAA;AAAA,EACV,KAAA,EAAO,IAAA;AAAA,EACP,WAAA,EAAa;AACf,CAAC,CAAA;AAOM,IAAM,uBAAA,GAA4D,OAAO,MAAA,CAAO;AAAA,EACrF,GAAA,EAAK,IAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,GAAA,EAAK;AACP,CAAC,CAAA;;;AC3kBD,IAAMD,iBAAAA,GAAmB,GAAA;AAelB,IAAM,OAAA,GAAN,MAAM,QAAA,CAAQ;AAAA,EACnB,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,SAAA;AAAA,IACb,aAAA,EAAe,MAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,iDAAA;AAAA,MACA,0CAAA;AAAA,MACA,sCAAA;AAAA,MACA,sCAAA;AAAA,MACA,6CAAA;AAAA,MACA,4CAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EAED,YAAY,GAAA,EAAiB;AACnC,IAAA,IAAA,CAAK,aAAa,GAAA,CAAI,MAAA;AACtB,IAAA,IAAA,CAAK,aAAa,GAAA,CAAI,MAAA;AACtB,IAAA,IAAA,CAAK,cAAc,GAAA,CAAI,OAAA;AACvB,IAAA,IAAA,CAAK,cAAc,GAAA,CAAI,EAAA;AACvB,IAAA,IAAA,CAAK,gBAAgB,GAAA,CAAI,EAAA;AACzB,IAAA,IAAA,CAAK,aAAa,GAAA,CAAI,MAAA;AACtB,IAAA,IAAA,CAAK,cAAc,GAAA,CAAI,WAAA;AACvB,IAAA,IAAA,CAAK,iBAAiB,GAAA,CAAI,GAAA;AAC1B,IAAA,IAAA,CAAK,YAAY,GAAA,CAAI,SAAA;AACrB,IAAA,IAAA,CAAK,aAAA,GAAgB,kBAAA,CAAmB,GAAA,CAAI,MAAM,KAAK,EAAC;AACxD,IAAA,IAAA,CAAK,aAAA,GAAgB,iBAAA,CAAkB,GAAA,CAAI,MAAM,KAAK,EAAC;AAAA,EACzD;AAAA;AAAA,EAGA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,kBAAA,CAAmB,wBAAA,GAA2B,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,WAAA;AAAA,EACjF;AAAA;AAAA,EAGA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,UAAA,GAA4B;AAC9B,IAAA,MAAM,CAAA,GAAI,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AAC7C,IAAA,IAAI,CAAC,GAAG,MAAM,IAAI,MAAM,CAAA,0BAAA,EAA6B,IAAA,CAAK,UAAU,CAAA,CAAA,CAAG,CAAA;AACvE,IAAA,OAAO,cAAc,MAAA,CAAO,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EACxC;AAAA;AAAA,EAGA,IAAI,QAAA,GAAmB;AACrB,IAAA,OAAO,KAAK,UAAA,CAAW,QAAA;AAAA,EACzB;AAAA;AAAA,EAGA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,KAAK,UAAA,CAAW,SAAA;AAAA,EACzB;AAAA;AAAA,EAGA,IAAI,OAAA,GAAiC;AACnC,IAAA,OAAO,iBAAA,CAAkB,KAAK,UAAU,CAAA;AAAA,EAC1C;AAAA,EAEA,IAAI,iBAAA,GAA6B;AAC/B,IAAA,OAAO,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,UAAU,CAAA;AAAA,EACzC;AAAA,EACA,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,aAAA,CAAc,GAAA,CAAI,IAAA,CAAK,UAAU,CAAA;AAAA,EAC1C;AAAA,EACA,IAAI,YAAA,GAAwB;AAC1B,IAAA,OAAO,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,UAAU,CAAA;AAAA,EAC/C;AAAA,EACA,IAAI,WAAA,GAAuB;AACzB,IAAA,OAAO,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,UAAU,CAAA;AAAA,EAC7C;AAAA,EACA,IAAI,QAAA,GAAoB;AACtB,IAAA,OAAO,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,UAAU,CAAA;AAAA,EAC3C;AAAA;AAAA,EAGA,IAAI,QAAA,GAAoB;AACtB,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,KAAK,CAAA;AAAA,EAC1C;AAAA;AAAA,EAGA,IAAI,YAAA,GAA8B;AAChC,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,CAAC,CAAA,IAAK,IAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAA,GAA4B;AAC9B,IAAA,MAAM,OAAO,IAAA,CAAK,YAAA;AAClB,IAAA,OAAO,IAAA,IAAQ,IAAA,GAAO,IAAA,GAAO,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,EACrD;AAAA;AAAA,EAGA,IAAI,UAAA,GAAkC;AACpC,IAAA,OAAO,MAAA,CAAO,MAAA;AAAA,MACZ,IAAA,CAAK,aAAA,CACF,GAAA,CAAI,CAAC,SAAS,QAAA,CAAS,QAAA,CAAS,IAAI,CAAC,CAAA,CACrC,MAAA,CAAO,CAAC,CAAA,KAAqB,MAAM,IAAI;AAAA,KAC5C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,eAAA,GAAmC;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,CAAc,CAAC,CAAA;AACjC,IAAA,OAAO,IAAA,IAAQ,IAAA,GAAO,IAAA,GAAO,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,EACrD;AAAA;AAAA,EAGA,IAAI,iBAAA,GAAyC;AAC3C,IAAA,OAAO,MAAA,CAAO,MAAA;AAAA,MACZ,IAAA,CAAK,aAAA,CACF,GAAA,CAAI,CAAC,SAAS,QAAA,CAAS,QAAA,CAAS,IAAI,CAAC,CAAA,CACrC,MAAA,CAAO,CAAC,CAAA,KAAqB,MAAM,IAAI;AAAA,KAC5C;AAAA,EACF;AAAA,EAEA,OAAO,SAAS,KAAA,EAAkD;AAChE,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAC1B,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAK,CAAA,CAAE,IAAA,EAAK;AAC5C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAASA,mBAAkB,OAAO,IAAA;AAE1E,IAAA,MAAM,MAAA,GAAS,SAAS,SAAS,CAAA;AACjC,IAAA,IAAI,QAAQ,OAAO,MAAA;AAEnB,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,WAAA,EAAY,KAAM,MAAA,EAAQ;AAC1E,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AACjC,MAAA,MAAM,QAAA,GAAW,SAAS,OAAO,CAAA;AACjC,MAAA,IAAI,UAAU,OAAO,QAAA;AAAA,IACvB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,KAAA,EAAwB;AACnC,IAAA,MAAM,CAAA,GAAI,QAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAChC,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAClD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,QAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EACrC;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,QAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAChC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,WAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,QAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAChC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,UAAA;AAChB,IAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,MAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,IAAA;AAAA,IACxC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,QAAA,CAAQ,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EACvD;AAAA;AAAA,EAGA,OAAO,qBAAqB,WAAA,EAAwD;AAClF,IAAA,IAAI,WAAA,IAAe,MAAM,OAAO,IAAA;AAChC,IAAA,MAAM,OAAA,GAAU,YAAY,IAAA,EAAK;AACjC,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACjC,IAAA,OAAO,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA,IAAK,IAAA;AAAA,EACzC;AAAA;AAAA,EAGA,WAAW,GAAA,GAA0B;AACnC,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,QAAA,EAA8C;AAC1D,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,YAAY,CAAA,EAAG;AAC/C,MAAA,MAAM,IAAI,WAAW,4CAA4C,CAAA;AAAA,IACnE;AACA,IAAA,OAAO,QAAA,CAAQ,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,IAAI,CAAA;AAAA,EAC1F;AAAA;AAAA,EAGA,OAAO,aAAA,CAAc,UAAA,EAA2B,QAAA,EAA8C;AAC5F,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,YAAY,CAAA,EAAG;AAC/C,MAAA,MAAM,IAAI,WAAW,4CAA4C,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,MAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,KAAK,aAAA,EAAe;AAC7B,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,kBAAA,CAAmB,UAAA,EAAY,EAAE,UAAU,CAAA;AACtE,MAAA,IAAI,IAAA,IAAQ,UAAU,GAAA,CAAI,IAAA,CAAK,EAAE,OAAA,EAAS,CAAA,EAAG,kBAAA,EAAoB,IAAA,EAAM,CAAA;AAAA,IACzE;AACA,IAAA,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,kBAAA,GAAqB,EAAE,kBAAkB,CAAA;AAC9D,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,qBAAqB,IAAA,EAAiD;AAC3E,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,IAAA,MAAM,MAAgC,EAAC;AACvC,IAAA,YAAA,CAAa,SAAA,GAAY,CAAA;AACzB,IAAA,IAAI,CAAA;AACJ,IAAA,OAAA,CAAQ,CAAA,GAAI,YAAA,CAAa,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAC7C,MAAA,MAAM,OAAA,GAAU,QAAA,CAAQ,QAAA,CAAS,CAAA,CAAE,CAAC,CAAC,CAAA;AACrC,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,GAAA,CAAI,IAAA;AAAA,QACF,IAAI,aAAA,CAAuB;AAAA,UACzB,YAAY,CAAA,CAAE,KAAA;AAAA,UACd,MAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,UACb,YAAA,EAAc,EAAE,CAAC,CAAA;AAAA,UACjB,QAAA,EAAU,SAAA;AAAA,UACV,UAAU,qBAAA,CAAsB,SAAA;AAAA,UAChC,cAAA,EAAgB,QAAQ,kBAAA,EAAmB;AAAA,UAC3C,aAAA,EAAe,QAAQ,QAAA,EAAS;AAAA,UAChC,YAAY,OAAA,CAAQ,aAAA;AAAA,UACpB,YAAY,mBAAA,CAAoB,GAAA;AAAA,UAChC,KAAA,EAAO;AAAA,SACR;AAAA,OACH;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EACA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EACA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EACA,cAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAA4C;AACjD,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,UAAA,KAAe,KAAA,CAAM,UAAA;AAAA,EACpD;AAAA,EACA,UAAU,KAAA,EAA2C;AACnD,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,aAAa,KAAA,CAAM,UAAA,GAAa,KAAK,IAAA,CAAK,UAAA,GAAa,KAAA,CAAM,UAAA,GAAa,CAAA,GAAI,CAAA;AAAA,EAC5F;AAAA,EAEA,WAAW,MAAA,GAAkB;AAC3B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,MAAA,GAAkB;AAC3B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,MAAA,GAAkB;AAC3B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,SAAA,GAAqB;AAC9B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,MAAA,GAAkB;AAC3B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,QAAA,GAAoB;AAC7B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,aAAA,GAAyB;AAClC,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,KAAA,GAAiB;AAC1B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,WAAA,GAAuB;AAChC,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,MAAA,GAAkB;AAC3B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,KAAA,GAAiB;AAC1B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,QAAA,GAAoB;AAC7B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,QAAA,GAAoB;AAC7B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,MAAA,GAAkB;AAC3B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,QAAA,GAAoB;AAC7B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,aAAA,GAAyB;AAClC,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,MAAA,GAAkB;AAC3B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,WAAA,GAAuB;AAChC,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,OAAA,GAAmB;AAC5B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,UAAA,GAAsB;AAC/B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,KAAA,GAAiB;AAC1B,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA,EACA,WAAW,aAAA,GAAyB;AAClC,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB;AAAA;AAAA,EAGA,OAAO,SAAS,GAAA,EAA0B;AACxC,IAAA,OAAO,IAAI,SAAQ,GAAG,CAAA;AAAA,EACxB;AACF,CAAA;AAEA,IAAM,aAAA,GAAoC,aAAa,GAAA,CAAI,CAAC,MAAM,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAC,CAAA;AAErF,IAAM,SAAA,uBAAgB,GAAA,EAAqB;AAC3C,IAAME,QAAAA,uBAAc,GAAA,EAAqB;AACzC,IAAM,eAAA,uBAAsB,GAAA,EAAqB;AAEjD,KAAA,MAAW,KAAK,aAAA,EAAe;AAC7B,EAAA,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,UAAA,CAAW,WAAA,IAAe,CAAC,CAAA;AAC3C,EAAAA,SAAQ,GAAA,CAAI,CAAA,CAAE,UAAA,CAAW,WAAA,IAAe,CAAC,CAAA;AACzC,EAAAA,SAAQ,GAAA,CAAI,CAAA,CAAE,UAAA,CAAW,WAAA,IAAe,CAAC,CAAA;AACzC,EAAAA,SAAQ,GAAA,CAAI,CAAA,CAAE,WAAA,CAAY,WAAA,IAAe,CAAC,CAAA;AAC1C,EAAA,IAAI,CAACA,QAAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,cAAc,WAAA,EAAa,CAAA,EAAGA,SAAQ,GAAA,CAAI,CAAA,CAAE,aAAA,CAAc,WAAA,IAAe,CAAC,CAAA;AAC7F,EAAA,IACE,CAAA,CAAE,UAAA,CAAW,WAAA,EAAY,KAAM,EAAE,WAAA,CAAY,WAAA,EAAY,IACzD,CAACA,SAAQ,GAAA,CAAI,CAAA,CAAE,UAAA,CAAW,WAAA,EAAa,CAAA,EACvC;AACA,IAAAA,SAAQ,GAAA,CAAI,CAAA,CAAE,UAAA,CAAW,WAAA,IAAe,CAAC,CAAA;AAAA,EAC3C;AACA,EAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,CAAI,CAAA,CAAE,WAAW,GAAG,eAAA,CAAgB,GAAA,CAAI,CAAA,CAAE,WAAA,EAAa,CAAC,CAAA;AAC/E;AAEA,KAAA,MAAW,CAAC,WAAA,EAAa,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG;AACnE,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,aAAa,CAAA;AACjD,EAAA,IAAI,QAAQA,QAAAA,CAAQ,IAAI,WAAA,CAAY,WAAA,IAAe,MAAM,CAAA;AAC3D;AAEA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,uBAAuB,CAAA,EAAG;AACpE,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,aAAa,CAAA;AACjD,EAAA,IAAI,MAAA,EAAQ,eAAA,CAAgB,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AAC9C;AAEA,IAAM,gBAAwB,MAAM;AAClC,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAGA,QAAAA,CAAQ,IAAA,EAAM,CAAA,CAC7B,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,IAAU,CAAC,CAAA,CAC3B,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAM,CAAA,CAClC,GAAA,CAAI,WAAW,CAAA;AAClB,EAAA,OAAO,IAAI,OAAO,CAAA,uBAAA,EAA0B,KAAA,CAAM,KAAK,GAAG,CAAC,wBAAwB,KAAK,CAAA;AAC1F,CAAA,GAAG;AAEH,SAAS,YAAY,IAAA,EAAuB;AAC1C,EAAA,MAAM,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,aAAa,CAAA;AAC1C,EAAA,IAAI,CAAC,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAA,CAAG,CAAA;AACvD,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,SAAS,KAAA,EAA+B;AAC/C,EAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,EAAY;AAChC,EAAA,MAAM,EAAA,GAAK,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA;AAC9B,EAAA,IAAI,IAAI,OAAO,EAAA;AACf,EAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,EAAY;AAChC,EAAA,OAAOA,SAAQ,GAAA,CAAI,KAAK,KAAKA,QAAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,IAAK,IAAA;AACrD;AAEA,SAAS,YAAY,CAAA,EAAmB;AACtC,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AAChD;;;ACpeA,IAAMF,iBAAAA,GAAmB,GAAA;AAEzB,IAAM,YAAA,GACJ,gFAAA;AAMK,IAAM,WAAA,GAAN,MAAM,YAAA,CAAY;AAAA,EACvB,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,MAAA;AAAA,IACb,aAAA,EAAe,SAAA;AAAA,IACf,KAAA,EAAO,iBAAA;AAAA,IACP,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,CAAC,0BAA0B,CAAC;AAAA,GACpD,CAAA;AAAA,EAEQ,KAAA;AAAA,EAED,YAAY,KAAA,EAAe;AACjC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,OAAO,SAAS,KAAA,EAAsD;AACpE,IAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACjD,IAAA,MAAM,OAAA,GAAU,mBAAmB,KAAK,CAAA;AACxC,IAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,IAAK,OAAA,CAAQ,MAAA,GAASA,mBAAkB,OAAO,IAAA;AACtE,IAAA,MAAM,WAAA,GAAc,mBAAmB,OAAO,CAAA;AAC9C,IAAA,IAAI,CAAC,GAAG,WAAW,EAAE,IAAA,CAAK,YAAY,GAAG,OAAO,IAAA;AAChD,IAAA,IAAI,CAAC,YAAA,CAAa,IAAA,CAAK,WAAW,GAAG,OAAO,IAAA;AAC5C,IAAA,OAAO,IAAI,aAAY,WAAW,CAAA;AAAA,EACpC;AAAA,EAEA,OAAO,MAAM,KAAA,EAA4B;AACvC,IAAA,MAAM,CAAA,GAAI,YAAA,CAAY,QAAA,CAAS,KAAK,CAAA;AACpC,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACpD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,YAAA,CAAY,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EACzC;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,YAAA,CAAY,QAAA,CAAS,KAAK,CAAA;AACpC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,OAAO,YAAA,CAAY,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EAC1C;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,YAAA,CAAY,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAC3D;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAAgD;AACrD,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAA+C;AACvD,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF;AAEA,SAAS,mBAAmB,KAAA,EAAuB;AACjD,EAAA,OAAO,KAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,MAAM,oBAAA,CAAqB,CAAC,CAAC,CAAA,CAClC,KAAK,GAAG,CAAA;AACb;AAEA,SAAS,qBAAqB,IAAA,EAAsB;AAClD,EAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,IAAI,cAAc,CAAA,CAAE,KAAK,GAAG,CAAA;AACrD;AAEA,SAAS,eAAe,IAAA,EAAsB;AAC5C,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,UAAU,kBAAA,CAAmB,OAAA;AACnC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC9C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAE,CAAA,EAAG;AAC9B,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,IAAI,OAAA,CAAQ,CAAC,CAAA,CAAG,iBAAA,CAAkB,OAAO,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,IAC3F;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,aAAa,CAAA,EAAoB;AACxC,EAAA,OAAO,mCAAA,CAAoC,KAAK,CAAC,CAAA;AACnD;;;AC5GA,IAAMA,iBAAAA,GAAmB,GAAA;AAEzB,IAAM,eAAA,GAAkB,wBAAA;AACxB,IAAM,OAAA,GAAU,gBAAA;AAChB,IAAM,SAAA,GAAY,mDAAA;AAClB,IAAM,GAAA,GAAM,uCAAA;AACZ,IAAM,aAAA,GAAgB,2BAAA;AAMf,IAAM,aAAA,GAAN,MAAM,cAAA,CAAc;AAAA,EACzB,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,gBAAA;AAAA,IACb,aAAA,EAAe,YAAA;AAAA,IACf,KAAA,EAAO,iBAAA;AAAA,IACP,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,CAAC,8BAA8B,CAAC;AAAA,GACxD,CAAA;AAAA,EAEQ,MAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EAED,YACN,MAAA,EACA,UAAA,EACA,YAAA,EACA,eAAA,EACA,QACA,OAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,KAAK,OAAA,KAAY,IAAA;AAAA,EAC1B;AAAA,EAEA,OAAO,QAAA,CACL,KAAA,EACA,OAAA,EACsB;AACtB,IAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AAEjD,IAAA,IAAI,IAAA,GAAO,mBAAmB,KAAK,CAAA;AACnC,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,MAAA,GAASA,mBAAkB,OAAO,IAAA;AAEhE,IAAA,IAAI,MAAA,GAAwB,IAAA;AAC5B,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC7B,IAAA,IAAI,EAAA,EAAI;AACN,MAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,CAAC,EAAE,MAAM,CAAA;AACrC,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAC/B,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAK,EAAE,IAAA,EAAK;AACpC,QAAA,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAC,EAAE,IAAA,EAAK;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,MAAM,IAAA,EAAK;AACpB,QAAA,IAAA,GAAO,EAAA;AAAA,MACT;AACA,MAAA,IAAI,MAAA,CAAO,IAAA,EAAK,KAAM,EAAA,EAAI,MAAA,GAAS,IAAA;AAAA,IACrC;AAEA,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,EAAI;AACtB,MAAA,MAAM,UAAU,kBAAA,CAAmB,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA;AAC1D,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAClC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,QAAA,OAAO,IAAI,eAAc,CAAA,IAAA,EAAO,OAAO,IAAI,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AAAA,MAC9E;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,EAAI;AACtB,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,OAAO,IAAI,eAAc,CAAA,IAAA,EAAO,MAAM,IAAI,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,MAC1E;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAChC,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,SAAA,GAAY,IAAI,CAAC,CAAA;AACjB,MAAA,IAAA,GAAO,KAAK,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,KAAM,EAAE,IAAA,EAAK;AAAA,IACxC;AAEA,IAAA,MAAM,UAAA,GAAa,gBAAgB,IAAA,EAAM,OAAA,EAAS,QAAQ,IAAA,EAAM,OAAA,EAAS,WAAW,IAAI,CAAA;AACxF,IAAA,IAAI,CAAC,cAAA,CAAe,UAAU,CAAA,EAAG,OAAO,IAAA;AAExC,IAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,IAAA,IAAI,YAAA,GAA8B,IAAA;AAClC,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,CAAM,aAAa,CAAA;AAC1C,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,UAAA,GAAa,IAAI,CAAC,CAAA;AAClB,MAAA,YAAA,GAAe,IAAI,CAAC,CAAA;AAAA,IACtB;AAEA,IAAA,OAAO,IAAI,cAAA,CAAc,UAAA,EAAY,YAAY,YAAA,EAAc,SAAA,EAAW,QAAQ,IAAI,CAAA;AAAA,EACxF;AAAA,EAEA,OAAO,MAAM,KAAA,EAA8B;AACzC,IAAA,MAAM,CAAA,GAAI,cAAA,CAAc,QAAA,CAAS,KAAK,CAAA;AACtC,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,yBAAyB,CAAA;AACzD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,cAAA,CAAc,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EAC3C;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,cAAA,CAAc,QAAA,CAAS,KAAK,CAAA;AACtC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,MAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,OAAO,cAAA,CAAc,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EAC5C;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,cAAA,CAAc,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAC7D;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAAkD;AACvD,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA;AAAA,EAChD;AAAA,EACA,UAAU,KAAA,EAAiD;AACzD,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA,GAAS,KAAK,IAAA,CAAK,MAAA,GAAS,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,CAAA;AAAA,EAC5E;AACF;AAEA,SAAS,eAAA,CAAgB,KAAA,EAAe,IAAA,EAAqB,GAAA,EAA4B;AACvF,EAAA,IAAI,OAAA,GAAU,mBAAmB,KAAK,CAAA;AACtC,EAAA,IAAI,OAAA,KAAY,IAAI,OAAO,EAAA;AAC3B,EAAA,OAAA,GAAU,kBAAA,CAAmB,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA;AACvD,EAAA,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,sBAAA,EAAwB,OAAO,CAAA;AACzD,EAAA,OAAA,GAAU,mBAAmB,OAAO,CAAA;AACpC,EAAA,IAAI,QAAA,GAAW,wBAAA,CAAyB,OAAA,EAAS,IAAA,EAAM,GAAG,CAAA;AAC1D,EAAA,IAAI,kBAAA,CAAmB,QAAQ,CAAA,EAAG,QAAA,GAAW,eAAe,QAAQ,CAAA;AACpE,EAAA,QAAA,GAAW,6BAA6B,QAAQ,CAAA;AAChD,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,eAAe,IAAA,EAAuB;AAC7C,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AACxC,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,KAAA;AACnC,EAAA,IAAI,IAAA,KAAS,IAAA,CAAK,IAAA,EAAK,EAAG,OAAO,KAAA;AACjC,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,KAAA;AAChC,EAAA,IAAI,KAAK,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,MAAA,GAAS,IAAI,OAAO,KAAA;AAChD,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,KAAA;AACnC,EAAA,OAAO,eAAA,CAAgB,KAAK,IAAI,CAAA;AAClC;AAEA,SAAS,mBAAmB,KAAA,EAAwB;AAClD,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAC,CAAA;AACzD,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AACjC,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,KAAM,MAAM,CAAA,CAAE,iBAAA,CAAkB,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAC3F,EAAA,IAAI,gBAAA,GAAmB,EAAA;AACvB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAE,CAAA,EAAG;AAC5B,MAAA,gBAAA,GAAmB,CAAA;AACnB,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,gBAAA,KAAqB,IAAI,OAAO,QAAA;AACpC,EAAA,MAAM,eAAA,GACJ,MAAM,gBAAgB,CAAA,KACtB,MAAM,gBAAgB,CAAA,CAAG,iBAAA,CAAkB,kBAAA,CAAmB,OAAO,CAAA;AACvE,EAAA,OAAO,YAAY,CAAC,eAAA;AACtB;AAEA,SAAS,eAAe,KAAA,EAAuB;AAC7C,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,EAAA;AAC1C,EAAA,MAAM,UAAU,kBAAA,CAAmB,OAAA;AACnC,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,iBAAA,CAAkB,OAAO,CAAA;AAC/C,EAAA,IAAI,GAAA,GAAM,OAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAE,CAAA,EAAG;AAC9B,MAAA,GAAA,GAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,IAAI,OAAA,CAAQ,CAAC,CAAA,CAAG,iBAAA,CAAkB,OAAO,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA;AACxF,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,6BAA6B,GAAG,CAAA;AACzC;AAEA,SAAS,6BAA6B,KAAA,EAAuB;AAC3D,EAAA,OAAO,KAAA,CAAM,OAAA;AAAA,IACX,iCAAA;AAAA,IACA,CAAC,GAAG,CAAA,EAAW,CAAA,KAAc,IAAI,CAAA,CAAE,iBAAA,CAAkB,mBAAmB,OAAO;AAAA,GACjF;AACF;AAEA,SAAS,wBAAA,CAAyB,MAAA,EAAgB,IAAA,EAAqB,GAAA,EAA4B;AACjG,EAAA,MAAM,QAAA,GAAW,IAAA,IAAQ,IAAA,GAAO,EAAA,GAAK,mBAAmB,IAAI,CAAA;AAC5D,EAAA,MAAM,OAAA,GAAU,GAAA,IAAO,IAAA,GAAO,EAAA,GAAK,mBAAmB,GAAG,CAAA;AACzD,EAAA,MAAM,KAAA,GAAQ,SAAS,WAAA,EAAY;AACnC,EAAA,MAAM,IAAA,GAAO,QAAQ,WAAA,EAAY;AACjC,EAAA,MAAM,cAAc,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,EAAE,EAAE,WAAA,EAAY;AAC1D,EAAA,MAAM,OAAO,kBAAA,CAAmB,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA;AACzD,EAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,EAAY;AAE/B,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAc,CAAA,CAAE,MAAA,GAAS,CAAA;AACtC,EAAA,MAAM,aAAa,CAAC,CAAA,EAAW,IAAA,KAC7B,IAAA,IAAQ,KAAK,IAAA,GAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,mBAAmB,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,GAAS,IAAI,CAAC,CAAA;AAEnF,EAAA,IAAI,GAAA,CAAI,KAAK,CAAA,IAAK,GAAA,CAAI,IAAI,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAC/D,IAAA,OAAO,UAAA,CAAW,IAAA,EAAA,CAAO,IAAA,GAAO,GAAA,GAAM,OAAO,MAAM,CAAA;AACrD,EAAA,IAAI,GAAA,CAAI,KAAK,CAAA,IAAK,GAAA,CAAI,WAAW,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAC7E,IAAA,OAAO,UAAA,CAAW,IAAA,EAAA,CAAO,WAAA,GAAc,GAAA,GAAM,OAAO,MAAM,CAAA;AAC5D,EAAA,IAAI,GAAA,CAAI,KAAK,CAAA,IAAK,GAAA,CAAI,IAAI,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAC/D,IAAA,OAAO,UAAA,CAAW,IAAA,EAAA,CAAO,KAAA,GAAQ,GAAA,GAAM,MAAM,MAAM,CAAA;AACrD,EAAA,IAAI,GAAA,CAAI,KAAK,CAAA,IAAK,GAAA,CAAI,WAAW,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AAC7E,IAAA,OAAO,UAAA,CAAW,IAAA,EAAA,CAAO,KAAA,GAAQ,GAAA,GAAM,aAAa,MAAM,CAAA;AAC5D,EAAA,IAAI,GAAA,CAAI,KAAK,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA,EAAG,OAAO,UAAA,CAAW,IAAA,EAAM,MAAM,MAAM,CAAA;AACnF,EAAA,IAAI,GAAA,CAAI,IAAI,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,EAAG,OAAO,UAAA,CAAW,IAAA,EAAM,KAAK,MAAM,CAAA;AAChF,EAAA,IAAI,IAAI,WAAW,CAAA,IAAK,MAAM,QAAA,CAAS,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AACtD,IAAA,OAAO,UAAA,CAAW,IAAA,EAAM,WAAA,CAAY,MAAM,CAAA;AAC5C,EAAA,OAAO,IAAA;AACT;;;ACjPA,IAAMA,iBAAAA,GAAmB,EAAA;AAEzB,IAAM,cAAA,GAAiB,SAAA;AACvB,IAAM,aAAA,GACJ,wRAAA;AAEF,IAAM,IAAA,GAAO,6BAAA;AAON,IAAM,cAAA,GAAN,MAAM,eAAA,CAAe;AAAA,EAC1B,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,UAAA;AAAA,IACb,aAAA,EAAe,YAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,0BAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,KAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EAED,WAAA,CAAY,KAAA,EAAe,SAAA,EAAmB,OAAA,EAAyB;AAC7E,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,SAAS,UAAA,KAAe,IAAA;AAAA,EACtC;AAAA,EAEA,OAAO,QAAA,CACL,KAAA,EACA,OAAA,EACuB;AACvB,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAC1B,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAK,CAAA,CAAE,IAAA,EAAK;AAC5C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAASA,mBAAkB,OAAO,IAAA;AAE1E,IAAA,MAAM,OAAA,GAAU,SAAS,OAAA,IAAW,IAAA;AACpC,IAAA,MAAM,gBAAA,GAAmB,OAAA,EAAS,UAAA,IAAc,kBAAA,CAAmB,iBAAA;AAEnE,IAAA,IAAI,SAAS,UAAA,KAAe,IAAA,EAAM,OAAO,eAAA,CAAe,gBAAgB,SAAS,CAAA;AAEjF,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,IAAA,GAAO,eAAA,CAAe,qBAAA,CAAsB,SAAA,EAAW,OAAO,CAAA;AACpE,MAAA,IAAI,MAAM,OAAO,IAAA;AACjB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,qBAAqB,IAAA,EAAM;AAC7B,MAAA,OACE,gBAAe,eAAA,CAAgB,SAAS,CAAA,IAAK,eAAA,CAAe,sBAAsB,SAAS,CAAA;AAAA,IAE/F;AACA,IAAA,OACE,gBAAe,qBAAA,CAAsB,SAAS,CAAA,IAAK,eAAA,CAAe,gBAAgB,SAAS,CAAA;AAAA,EAE/F;AAAA,EAEA,OAAO,KAAA,CAAM,KAAA,EAAe,OAAA,EAAwD;AAClF,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAChD,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,mBAAmB,CAAA;AACnD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,OAAA,CACL,KAAA,EACA,OAAA,EACS;AACT,IAAA,OAAO,eAAA,CAAe,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA,KAAM,IAAA;AAAA,EACrD;AAAA;AAAA,EAGA,OAAO,gBAAgB,KAAA,EAAyD;AAC9E,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAC1B,IAAA,IAAI,OAAA,GAAU,MAAM,QAAA,EAAS;AAC7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAE,CAAA,EAAG;AAC9B,QAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,OAAA,EAAQ;AACtC,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACjC,IAAA,MAAM,MAAA,GAAS,WAAW,OAAO,CAAA;AACjC,IAAA,IAAI,CAAC,cAAA,CAAe,IAAA,CAAK,MAAM,GAAG,OAAO,IAAA;AACzC,IAAA,MAAM,SAAA,GAAY,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAC1D,IAAA,OAAO,IAAI,eAAA,CAAe,MAAA,EAAQ,SAAA,EAAW,QAAQ,MAAM,CAAA;AAAA,EAC7D;AAAA;AAAA,EAGA,OAAO,qBAAA,CACL,KAAA,EACA,OAAA,GAA0B,IAAA,EACH;AACvB,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,EAAS;AAC/B,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACjC,IAAA,IAAI,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,IAAA;AACtC,IAAA,IAAI,CAAC,CAAC,GAAG,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM,eAAA,CAAgB,IAAA,CAAK,CAAC,KAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,KAAM,GAAG,CAAA,EAAG;AACpF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,UAAA,GAAa,uBAAuB,OAAO,CAAA;AACjD,IAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AACxB,IAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,UAAU,GAAG,OAAO,IAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,OAAA,IAAW,sBAAA,CAAuB,UAAU,CAAA;AAC7D,IAAA,OAAO,IAAI,eAAA,CAAe,UAAA,EAAY,UAAA,EAAY,QAAQ,CAAA;AAAA,EAC5D;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAChD,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,SAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAChD,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,MAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,IAAA;AAAA,IACxC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,eAAA,CAAe,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAC9D;AAAA,EAEA,OAAO,qBAAqB,IAAA,EAAwD;AAClF,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,IAAA,MAAM,MAAuC,EAAC;AAC9C,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,IAAA,IAAI,CAAA;AACJ,IAAA,OAAA,CAAQ,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AACrC,MAAA,MAAM,GAAA,GAAM,eAAA,CAAe,eAAA,CAAgB,CAAA,CAAE,CAAC,CAAC,CAAA;AAC/C,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,GAAA,CAAI,IAAA;AAAA,QACF,IAAI,aAAA,CAA8B;AAAA,UAChC,YAAY,CAAA,CAAE,KAAA;AAAA,UACd,MAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,UACb,YAAA,EAAc,EAAE,CAAC,CAAA;AAAA,UACjB,QAAA,EAAU,gBAAA;AAAA,UACV,UAAU,qBAAA,CAAsB,OAAA;AAAA,UAChC,cAAA,EAAgB,IAAI,kBAAA,EAAmB;AAAA,UACvC,aAAA,EAAe,IAAI,QAAA,EAAS;AAAA,UAC5B,UAAA,EAAY,QAAQ,GAAG,CAAA;AAAA,UACvB,YAAY,mBAAA,CAAoB,GAAA;AAAA,UAChC,KAAA,EAAO;AAAA,SACR;AAAA,OACH;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAAmD;AACxD,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAAkD;AAC1D,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF;AAEA,SAAS,uBAAuB,KAAA,EAAuB;AACrD,EAAA,IAAI,OAAA,GAAU,MAAM,IAAA,EAAK,CAAE,aAAY,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,WAAW,OAAO,CAAA;AACjC,EAAA,IAAI,OAAA,CAAQ,WAAW,IAAI,CAAA,IAAK,OAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA;AACxE,EAAA,IAAI,OAAA,CAAQ,WAAW,IAAI,CAAA,IAAK,OAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA;AACxE,EAAA,IAAI,OAAA,CAAQ,WAAW,IAAI,CAAA,IAAK,OAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA;AACxE,EAAA,IAAI,OAAA,CAAQ,WAAW,IAAI,CAAA,IAAK,OAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA;AACvE,EAAA,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AAC3C,EAAA,IAAI,WAAA,CAAY,KAAK,OAAO,CAAA,SAAU,OAAA,CAAQ,OAAA,CAAQ,MAAM,EAAE,CAAA;AAC9D,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,uBAAuB,UAAA,EAAoC;AAClE,EAAA,IAAI,UAAA,CAAW,UAAA,CAAW,KAAK,CAAA,SAAU,OAAA,CAAQ,OAAA;AACjD,EAAA,IAAI,UAAA,CAAW,UAAA,CAAW,KAAK,CAAA,SAAU,OAAA,CAAQ,MAAA;AACjD,EAAA,IAAI,WAAW,UAAA,CAAW,KAAK,GAAG,OAAO,OAAA,CAAQ,SAAS,IAAI,CAAA;AAC9D,EAAA,IAAI,UAAA,CAAW,UAAA,CAAW,IAAI,CAAA,IAAK,UAAA,CAAW,MAAA,KAAW,CAAA,IAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AAC/F,IAAA,OAAO,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,QAAQ,GAAA,EAA6B;AACnD,EAAA,MAAM,IAAI,GAAA,CAAI,SAAA;AACd,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAC7B;;;ACrMA,IAAM,QAAA,uBAAe,GAAA,EAAwC;AAGtD,SAAS,uBAAuB,YAAA,EAAgD;AACrF,EAAA,QAAA,CAAS,IAAI,YAAA,CAAa,OAAA,CAAQ,UAAA,CAAW,WAAA,IAAe,YAAY,CAAA;AAC1E;AAEO,SAAS,8BACd,UAAA,EACmC;AACnC,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,UAAA,CAAW,WAAA,EAAa,CAAA,IAAK,IAAA;AACnD;AAEO,SAAS,oCAAA,GAA2D;AACzE,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,QAAA,CAAS,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AACnE;;;ACvBA,IAAMA,iBAAAA,GAAmB,GAAA;AAGlB,IAAM,OAAA,GAAN,MAAM,QAAA,CAAQ;AAAA,EACnB,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,SAAA;AAAA,IACb,aAAA,EAAe,QAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,0BAAA;AAAA,MACA,8BAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,MAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EAET,YACE,MAAA,EACA,OAAA,GAAiC,MACjC,IAAA,GAA2B,IAAA,EAC3B,UAA0B,IAAA,EAC1B;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,IAAI,MAAA,GAAwB;AAC1B,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACrB;AAAA,EACA,IAAI,eAAA,GAAiC;AACnC,IAAA,OAAO,KAAK,MAAA,CAAO,eAAA;AAAA,EACrB;AAAA,EACA,IAAI,OAAA,GAAyB;AAC3B,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,EACrB;AAAA,EACA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,KAAK,MAAA,CAAO,SAAA;AAAA,EACrB;AAAA,EACA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,KAAK,kBAAA,EAAmB;AAAA,EACjC;AAAA,EACA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,KAAK,QAAA,EAAS;AAAA,EACvB;AAAA,EASA,OAAO,SAAS,GAAA,EAA8B;AAC5C,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,EAAM;AAC3C,MAAA,MAAM,CAAA,GAAI,GAAA;AAMV,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,IAAQ,IAAA,IAAQ,CAAA,CAAE,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,GAAK,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,IAAI,CAAA,GAAI,IAAA;AACtF,MAAA,MAAM,IAAA,GACJ,CAAA,CAAE,OAAA,IAAW,IAAA,IAAQ,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAK,KAAM,EAAA,GAAK,cAAA,CAAe,QAAA,CAAS,CAAA,CAAE,OAAO,CAAA,GAAI,IAAA;AACtF,MAAA,MAAM,QAAA,GACJ,CAAA,CAAE,OAAA,IAAW,IAAA,IAAQ,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAK,KAAM,EAAA,GAAK,OAAA,CAAQ,QAAA,CAAS,CAAA,CAAE,OAAO,CAAA,GAAI,IAAA;AAC/E,MAAA,IAAI,CAAA,CAAE,OAAA,IAAW,IAAA,IAAQ,CAAA,CAAE,OAAA,CAAQ,MAAK,KAAM,EAAA,IAAM,IAAA,KAAS,IAAA,EAAM,OAAO,IAAA;AAC1E,MAAA,IAAI,CAAA,CAAE,IAAA,IAAQ,IAAA,IAAQ,CAAA,CAAE,IAAA,CAAK,MAAK,KAAM,EAAA,IAAM,KAAA,KAAU,IAAA,EAAM,OAAO,IAAA;AACrE,MAAA,IAAI,CAAA,CAAE,OAAA,IAAW,IAAA,IAAQ,CAAA,CAAE,OAAA,CAAQ,MAAK,KAAM,EAAA,IAAM,QAAA,KAAa,IAAA,EAAM,OAAO,IAAA;AAC9E,MAAA,MAAM,OAAA,GAAU,aAAA,CAAc,QAAA,CAAS,CAAA,CAAE,MAAA,EAAQ;AAAA,QAC/C,IAAA,EAAM,OAAO,KAAA,IAAS,IAAA;AAAA,QACtB,OAAA,EAAS,IAAA,EAAM,SAAA,IAAa,IAAA,EAAM,KAAA,IAAS;AAAA,OAC5C,CAAA;AACD,MAAA,IAAI,OAAA,KAAY,MAAM,OAAO,IAAA;AAC7B,MAAA,OAAO,IAAI,QAAA,CAAQ,OAAA,EAAS,IAAA,EAAM,OAAO,QAAQ,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,KAAA,GAAQ,GAAA;AACd,IAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACjD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,IAAI,OAAA,CAAQ,MAAA,GAASA,iBAAAA,EAAkB,OAAO,IAAA;AAE9C,IAAA,MAAM,QAAA,GAAW,cAAc,OAAO,CAAA;AACtC,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAElC,IAAA,IAAI,OAAA,GAA0B,IAAA;AAC9B,IAAA,OAAA,GAAU,cAAA,CAAe,UAAU,OAAO,CAAA;AAE1C,IAAA,IAAI,OAAA,GAAiC,IAAA;AACrC,IAAA,IAAI,IAAA,GAA2B,IAAA;AAC/B,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,MAAM,CAAA,GAAI,kBAAkB,QAAQ,CAAA;AACpC,MAAA,IAAI,CAAA,EAAG;AACL,QAAA,OAAA,GAAU,CAAA,CAAE,OAAA;AACZ,QAAA,IAAA,GAAO,CAAA,CAAE,IAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,GAAa,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACnC,IAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,IAAA,KAAS,IAAA,EAAM;AACrC,MAAA,MAAM,GAAA,GAAM,uBAAuB,UAAU,CAAA;AAC7C,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,UAAA,GAAa,GAAA,CAAI,MAAA;AACjB,QAAA,OAAA,GAAU,WAAW,GAAA,CAAI,OAAA;AACzB,QAAA,IAAA,GAAO,QAAQ,GAAA,CAAI,IAAA;AAAA,MACrB;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,CAAW,IAAA,EAAK,KAAM,EAAA,EAAI,OAAO,IAAA;AACrC,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,QAAA,CAAS,UAAA,EAAY;AAAA,MAChD,IAAA,EAAM,MAAM,KAAA,IAAS,IAAA;AAAA,MACrB,OAAA,EAAS,OAAA,EAAS,SAAA,IAAa,OAAA,EAAS,KAAA,IAAS;AAAA,KAClD,CAAA;AACD,IAAA,IAAI,MAAA,KAAW,MAAM,OAAO,IAAA;AAC5B,IAAA,OAAO,IAAI,QAAA,CAAQ,MAAA,EAAQ,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,EACnD;AAAA,EAEA,OAAO,MAAM,KAAA,EAAwB;AACnC,IAAA,MAAM,CAAA,GAAI,QAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAChC,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAClD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,QAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EACrC;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,QAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAChC,IAAA,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,QAAA,EAAS;AACzB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,QAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAChC,IAAA,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,kBAAA,EAAmB;AACnC,IAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,MAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,MAAA,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,IAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,QAAA,CAAQ,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,qBAAqB,IAAA,EAAiD;AAC3E,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAC/B,IAAA,MAAM,UAAoC,EAAC;AAC3C,IAAA,MAAM,UAAmC,EAAC;AAE1C,IAAA,qBAAA;AAAA,MACE,IAAA;AAAA,MACA,yBAAA;AAAA,MACA,mBAAA,CAAoB,MAAA;AAAA,MACpB,OAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,qBAAA;AAAA,MACE,IAAA;AAAA,MACA,wBAAA;AAAA,MACA,mBAAA,CAAoB,GAAA;AAAA,MACpB,OAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,OAAA,CAAQ,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,UAAA,GAAa,EAAE,UAAU,CAAA;AAAA,EAC3D;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,MAAM,KAAA,GAAkB,CAAC,IAAA,CAAK,eAAA,EAAiB,CAAA;AAC/C,IAAA,IAAI,KAAK,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,KAAK,CAAA;AAC/C,IAAA,IAAI,KAAK,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AACzC,IAAA,IAAI,KAAK,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,UAAU,CAAA;AACpD,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,iBAAA,GAA4B;AAC1B,IAAA,MAAM,UAAA,GAAa,CAAC,kBAAA,CAAmB,wBAAA;AACvC,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,KAAK,iBAAA,EAAkB;AACxC,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,IAAA,IAAI,KAAK,OAAA,KAAY,CAAC,SAAS,IAAA,CAAK,OAAO,KAAK,UAAA,CAAA,EAAa;AAC3D,MAAA,KAAA,CAAM,KAAK,UAAA,GAAa,IAAA,CAAK,QAAQ,WAAA,GAAc,IAAA,CAAK,QAAQ,WAAW,CAAA;AAAA,IAC7E;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,CAAC,kBAAA,CAAmB,wBAAwB,CAAA;AAAA,EAC1E;AAAA,EACA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,EAClC;AAAA,EACA,cAAA,GAAyB;AACvB,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,KAAK,iBAAA,EAAkB;AACxC,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,CAAC,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AAC/E,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,OAAO,KAAK,eAAA,EAAgB;AAAA,EAC9B;AAAA,EAEA,gBAAA,GAA2B;AACzB,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,KAAK,yBAAA,EAA0B;AAChD,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,yBAAA,GAAoC;AAClC,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,KAAK,yBAAA,EAA0B;AAChD,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAA,GAA2C;AACzC,IAAA,IAAI,IAAA,CAAK,OAAA,KAAY,IAAA,EAAM,OAAO,IAAA;AAClC,IAAA,OAAO,8BAA8B,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,IAAK,IAAA;AAAA,EAClF;AAAA;AAAA,EAGA,WAAW,4BAAA,GAAmD;AAC5D,IAAA,OAAO,oCAAA,EAAqC;AAAA,EAC9C;AAAA,EAEQ,eAAA,GAA0B;AAChC,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA;AACrC,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEQ,mBAAA,GAA8B;AACpC,IAAA,IAAI,IAAA,CAAK,iBAAiB,OAAO,CAAA,EAAG,KAAK,MAAA,CAAO,MAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,eAAe,CAAA,CAAA;AAClF,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACrB;AAAA,EAEQ,iBAAA,GAAmC;AACzC,IAAA,IAAI,CAAA,GAAI,EAAA;AACR,IAAA,IAAI,IAAA,CAAK,OAAA,EAAS,CAAA,IAAK,IAAA,CAAK,OAAA,CAAQ,SAAA;AACpC,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAI,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAA;AACvB,MAAA,CAAA,IAAK,KAAK,IAAA,CAAK,KAAA;AAAA,IACjB;AACA,IAAA,OAAO,CAAA,CAAE,MAAA,KAAW,CAAA,GAAI,IAAA,GAAO,CAAA;AAAA,EACjC;AAAA,EAEQ,yBAAA,GAA2C;AACjD,IAAA,IAAI,IAAI,IAAA,CAAK,mBAAA,EAAoB,IAAK,IAAA,CAAK,SAAS,SAAA,IAAa,EAAA;AACjE,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAI,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAA;AACvB,MAAA,CAAA,IAAK,KAAK,IAAA,CAAK,KAAA;AAAA,IACjB;AACA,IAAA,OAAO,CAAA,CAAE,MAAA,KAAW,CAAA,GAAI,IAAA,GAAO,CAAA;AAAA,EACjC;AAAA,EAEQ,mBAAA,GAAqC;AAC3C,IAAA,IAAI,KAAK,OAAA,KAAY,IAAA,IAAQ,IAAA,CAAK,OAAA,KAAY,MAAM,OAAO,IAAA;AAC3D,IAAA,OACE,6BAAA,CAA8B,KAAK,OAAA,CAAQ,UAAU,GAAG,SAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,IAAK,IAAA;AAAA,EAE7F;AAAA,EAEQ,gBAAgB,UAAA,EAA6B;AACnD,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,KAAK,iBAAA,EAAkB;AACxC,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACjC,IAAA,IAAI,KAAK,OAAA,KAAY,CAAC,SAAS,IAAA,CAAK,OAAO,KAAK,UAAA,CAAA,EAAa;AAC3D,MAAA,KAAA,CAAM,KAAK,UAAA,GAAa,IAAA,CAAK,QAAQ,WAAA,GAAc,IAAA,CAAK,QAAQ,WAAW,CAAA;AAAA,IAC7E;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AACF;AAEA,SAAS,SAAS,CAAA,EAAqB;AACrC,EAAA,OAAO,CAAA,CAAE,UAAA,CAAW,WAAA,EAAY,KAAM,IAAA;AACxC;AAEA,IAAM,wBAAwB,MAAA,CAAO,GAAA,CAAA,qLAAA,CAAA;AAErC,IAAM,mBAAA,GACJ,OAAO,GAAA,CAAA,8DAAA,CAAA,GACP,qBAAA;AAEF,IAAM,4BAA4B,IAAI,MAAA;AAAA,EACpC,MAAA,CAAO,GAAA,CAAA,8CAAA,CAAA,GACL,mBAAA,GACA,MAAA,CAAO,GAAA,CAAA,kIAAA,CAAA;AAAA,EACT;AACF,CAAA;AAEA,IAAM,2BAA2B,IAAI,MAAA;AAAA,EACnC,MAAA,CAAO,GAAA,CAAA,aAAA,CAAA,GAAqB,mBAAA,GAAsB,MAAA,CAAO,GAAA,CAAA,mBAAA,CAAA;AAAA,EACzD;AACF,CAAA;AAEA,SAAS,qBAAA,CACP,IAAA,EACA,OAAA,EACA,UAAA,EACA,SACA,OAAA,EACM;AACN,EAAA,OAAA,CAAQ,SAAA,GAAY,CAAA;AACpB,EAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG;AAC1C,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,MAAA,EAAQ,SAAA,IAAa,MAAM,CAAC,CAAA;AACxD,IAAA,MAAM,UAAA,GAAa,MAAM,KAAA,IAAS,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,aAAa,aAAA,CAAc,MAAA;AAC5C,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,KAAA,EAAO,GAAG,CAAA,KAAM,UAAA,GAAa,GAAA,IAAO,KAAA,GAAQ,QAAQ,CAAA,EAAG;AAE1E,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,QAAA,CAAS,aAAa,CAAA;AAC5C,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AACnC,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,IAAI,aAAA,CAAc;AAAA,QAChB,UAAA;AAAA,QACA,QAAQ,aAAA,CAAc,MAAA;AAAA,QACtB,YAAA,EAAc,aAAA;AAAA,QACd,QAAA,EAAU,SAAA;AAAA,QACV,UAAU,qBAAA,CAAsB,OAAA;AAAA,QAChC,cAAA,EAAgB,MAAM,kBAAA,EAAmB;AAAA,QACzC,aAAA,EAAe,MAAM,QAAA,EAAS;AAAA,QAC9B,UAAA,EAAY,mBAAmB,KAAK,CAAA;AAAA,QACpC,UAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,OAAA,EAA0B;AACpD,EAAA,OAAO,OAAA,CAAQ,QAAA,EAAS,CAAE,OAAA,CAAQ,OAAO,GAAG,CAAA;AAC9C;AAEA,SAAS,cAAc,KAAA,EAAyB;AAC9C,EAAA,OAAO,MACJ,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAA,CACnB,KAAA,CAAM,OAAO,CAAA,CACb,GAAA,CAAI,CAAC,CAAA,KAAM,kBAAA,CAAmB,CAAC,CAAC,CAAA,CAChC,OAAO,CAAC,CAAA,KAAM,MAAM,EAAE,CAAA;AAC3B;AAEA,SAAS,cAAA,CAAe,UAAoB,OAAA,EAAyC;AACnF,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,OAAA,KAAY,MAAM,OAAO,OAAA;AACtD,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACzC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AACpC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,QAAA,CAAS,GAAA,EAAI;AACb,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,KAAK,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA;AACrD,EAAA,KAAA,IAAS,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,MAAM,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AACpD,IAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACvD,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA;AACtC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,CAAA,EAAG,OAAO,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC1D,IAAA,IAAI,MAAA,CAAO,IAAA,EAAK,KAAM,EAAA,WAAa,GAAA,EAAI;AAAA,SAClC,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA;AACrC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBACP,QAAA,EACuD;AACvD,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAClC,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACzC,EAAA,MAAM,CAAA,GAAI,gBAAgB,IAAI,CAAA;AAC9B,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,QAAA,CAAS,GAAA,EAAI;AACb,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,gBAAgB,KAAA,EAAsE;AAC7F,EAAA,MAAM,UAAA,GAAa,mBAAmB,KAAK,CAAA;AAC3C,EAAA,IAAI,UAAA,KAAe,IAAI,OAAO,IAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,WAAW,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA;AAC3D,EAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAE9B,EAAA,KAAA,IAAS,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AACxD,IAAA,MAAM,MAAM,MAAA,CAAO,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACvC,IAAA,MAAM,OAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACrC,IAAA,MAAM,CAAA,GAAI,cAAA,CAAe,QAAA,CAAS,GAAG,CAAA;AACrC,IAAA,MAAM,CAAA,GAAI,WAAA,CAAY,QAAA,CAAS,IAAI,CAAA;AACnC,IAAA,IAAI,KAAK,CAAA,EAAG,OAAO,EAAE,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,EAAE;AAAA,EAC3C;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AACxD,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,OAAO,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACzD,IAAA,MAAM,IAAA,GAAO,OAAO,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACrD,IAAA,MAAM,CAAA,GAAI,cAAA,CAAe,QAAA,CAAS,IAAI,CAAA;AACtC,IAAA,MAAM,CAAA,GAAI,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA;AACpC,IAAA,IAAI,KAAK,CAAA,EAAG,OAAO,EAAE,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,EAAE;AAAA,EAC3C;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,uBACP,KAAA,EACuE;AACvE,EAAA,MAAM,UAAA,GAAa,mBAAmB,KAAK,CAAA;AAC3C,EAAA,IAAI,UAAA,KAAe,IAAI,OAAO,IAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,WAAW,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA;AAC3D,EAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAC9B,EAAA,KAAA,IAAS,WAAW,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,QAAA,IAAY,GAAG,QAAA,EAAA,EAAY;AAChE,IAAA,KAAA,IAAS,QAAA,GAAW,CAAA,EAAG,QAAA,IAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,MAAA,GAAS,QAAA,GAAW,CAAC,CAAA,EAAG,QAAA,EAAA,EAAY;AACxF,MAAA,MAAM,GAAA,GAAM,OAAO,KAAA,CAAM,QAAA,EAAU,WAAW,QAAQ,CAAA,CAAE,KAAK,GAAG,CAAA;AAChE,MAAA,MAAM,OAAO,MAAA,CAAO,KAAA,CAAM,WAAW,QAAQ,CAAA,CAAE,KAAK,GAAG,CAAA;AACvD,MAAA,MAAM,SAAS,MAAA,CAAO,KAAA,CAAM,GAAG,QAAQ,CAAA,CAAE,KAAK,GAAG,CAAA;AACjD,MAAA,MAAM,CAAA,GAAI,cAAA,CAAe,QAAA,CAAS,GAAG,CAAA;AACrC,MAAA,IAAI,CAAC,CAAA,EAAG;AACR,MAAA,MAAM,CAAA,GAAI,WAAA,CAAY,QAAA,CAAS,IAAI,CAAA;AACnC,MAAA,IAAI,CAAC,CAAA,EAAG;AACR,MAAA,IAAI,MAAA,CAAO,IAAA,EAAK,KAAM,EAAA,EAAI;AAC1B,MAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,EAAE;AAAA,IACvC;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;AC9bO,IAAe,4BAAf,MAA2E;AAAA,EACvE,KAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EAIC,WAAA,CAAY,KAAA,EAAe,SAAA,EAAmB,OAAA,EAAyB;AAC/E,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AACF;AAGO,IAAe,qBAAf,MAA6D;AAAA,EACzD,MAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EAIT,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,KAAK,OAAA,CAAQ,OAAA;AAAA,EACtB;AAAA,EACA,IAAI,MAAA,GAAwB;AAC1B,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACrB;AAAA,EACA,IAAI,OAAA,GAAyB;AAC3B,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,EACrB;AAAA,EACA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,KAAK,MAAA,CAAO,SAAA;AAAA,EACrB;AAAA,EACA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,KAAK,kBAAA,EAAmB;AAAA,EACjC;AAAA,EACA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,KAAK,QAAA,EAAS;AAAA,EACvB;AAAA,EAEU,WAAA,CAAY,MAAA,EAAuB,IAAA,EAAmB,OAAA,EAAkB;AAChF,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,QAAQ,kBAAA,EAAmB;AAAA,EACzC;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAC7B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AAChE,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,iBAAA,GAA4B;AAC1B,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAC7B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AAChE,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AACF;AAMO,SAAS,qBAAA,CACd,OAAA,EACA,MAAA,EACA,cAAA,EACA,aACA,OAAA,EACc;AACd,EAAA,IAAI,OAAA,CAAQ,WAAW,OAAA,CAAQ,OAAA,CAAQ,WAAW,WAAA,EAAY,KAAM,MAAA,CAAO,WAAA,EAAY,EAAG;AACxF,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAQ,OAAA,KAAY,IAAA,IAAQ,OAAA,CAAQ,IAAA,KAAS,MAAM,OAAO,IAAA;AAC9D,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA;AAC7C,EAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,IAAA;AACzB,EAAA,MAAM,WAAA,GACJ,OAAA,CAAQ,OAAA,KAAY,IAAA,GAChB,OAAA,GACA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,MAAM,cAAc,CAAA;AAC/E,EAAA,OAAO,QAAQ,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK,OAAA,CAAQ,MAAM,WAAW,CAAA;AAC/D;;;AC5GA,IAAM,cAAA,GAAN,cAAkE,kBAAA,CAAmB;AAAA,EAC1E,OAAA;AAAA,EACT,WAAA,CAAY,MAAA,EAAuB,OAAA,EAAe,IAAA,EAAmB,OAAA,EAAkB;AACrF,IAAA,KAAA,CAAM,MAAA,EAAQ,MAAM,OAAO,CAAA;AAC3B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EACA,IAAa,cAAA,GAAyC;AACpD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AACF,CAAA;AA6BO,SAAS,qBACd,MAAA,EAC4B;AAC5B,EAAA,MAAM,QAAA,GAA8B,OAAO,MAAA,CAAO;AAAA,IAChD,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,MAAA,CAAO,OAAO,CAAC;AAAA,GAC3C,CAAA;AAED,EAAA,MAAM,OAAA,GAAU,CAAC,OAAA,KACf,qBAAA;AAAA,IACE,OAAA;AAAA,IACA,OAAO,OAAA,CAAQ,UAAA;AAAA,IACf,MAAA,CAAO,OAAA;AAAA,IACP,CAAC,CAAA,KAAM,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,IAChC,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,KAAM,IAAI,cAAA,CAAqB,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC;AAAA,GACrD;AAEF,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAkE;AAClF,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAChC,IAAA,IAAI,CAAA,KAAM,MAAM,OAAO,IAAA;AACvB,IAAA,OAAO,QAAQ,CAAC,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,IAAA,GAAmC;AAAA,IACvC,QAAA;AAAA,IACA,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,aAAa,MAAA,CAAO,OAAA;AAAA,IACpB,OAAA;AAAA,IACA,QAAA;AAAA,IACA,mBAAmB,KAAA,EAAO;AACxB,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAChC,MAAA,IAAI,CAAA,KAAM,MAAM,OAAO,IAAA;AACvB,MAAA,OAAO,QAAQ,CAAC,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,MAAM,KAAA,EAAO;AACX,MAAA,MAAM,CAAA,GAAI,SAAS,KAAK,CAAA;AACxB,MAAA,IAAI,MAAM,IAAA,EAAM,MAAM,IAAI,KAAA,CAAM,OAAO,cAAc,CAAA;AACrD,MAAA,OAAO,CAAA;AAAA,IACT,CAAA;AAAA,IACA,QAAQ,KAAA,EAAO;AACb,MAAA,OAAO,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,IAC7B,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,MAAM,CAAA,GAAI,SAAS,KAAK,CAAA;AACxB,MAAA,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,QAAA,EAAS;AACzB,MAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,QAAA,OAAO,MAAM,IAAA,EAAK;AAAA,MACpB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,SAAA,CAAU,OAAO,OAAA,EAAS;AACxB,MAAA,MAAM,CAAA,GAAI,SAAS,KAAK,CAAA;AACxB,MAAA,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,kBAAA,EAAmB;AACnC,MAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,QAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,QAAA,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,IAAA;AAAA,MAC5B;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,aAAa,KAAA,EAAO;AAClB,MAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,IACpD;AAAA,GACF;AACA,EAAA,OAAO,IAAA;AACT;;;AC/FA,IAAM,cAAA,GAAN,cAA6B,yBAAA,CAA0B;AAAA,EAC5C,QAAA;AAAA,EACT,WAAA,CAAY,KAAA,EAAe,SAAA,EAAmB,OAAA,EAAyB,OAAA,EAAkB;AACvF,IAAA,KAAA,CAAM,KAAA,EAAO,WAAW,OAAO,CAAA;AAC/B,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAAA,EAClB;AAAA,EACA,IAAa,OAAA,GAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AACF,CAAA;AAMO,SAAS,qBAAqB,MAAA,EAGnC;AACA,EAAA,MAAM,QAAA,GAA8B,OAAO,MAAA,CAAO;AAAA,IAChD,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,MAAA,CAAO,OAAO,CAAC;AAAA,GAC3C,CAAA;AAED,EAAA,SAAS,SAAS,KAAA,EAAyD;AACzE,IAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACjD,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA;AAC/B,IAAA,IAAI,CAAA,KAAM,MAAM,OAAO,IAAA;AACvB,IAAA,MAAM,KAAK,cAAA,CAAe,qBAAA,CAAsB,CAAA,CAAE,SAAA,EAAW,OAAO,OAAO,CAAA;AAC3E,IAAA,IAAI,EAAA,KAAO,MAAM,OAAO,IAAA;AACxB,IAAA,OAAO,IAAI,eAAe,CAAA,CAAE,KAAA,EAAO,EAAE,SAAA,EAAW,EAAA,EAAI,OAAO,OAAO,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,IAAA,GAA6C;AAAA,IACjD,QAAA;AAAA,IACA,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAA;AAAA,IACA,MAAM,KAAA,EAA+B;AACnC,MAAA,MAAM,CAAA,GAAI,SAAS,KAAK,CAAA;AACxB,MAAA,IAAI,MAAM,IAAA,EAAM,MAAM,IAAI,KAAA,CAAM,OAAO,cAAc,CAAA;AACrD,MAAA,OAAO,CAAA;AAAA,IACT,CAAA;AAAA,IACA,QAAQ,KAAA,EAAO;AACb,MAAA,OAAO,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,IAC7B,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,OAAA,EAAS;AACrB,MAAA,MAAM,CAAA,GAAI,SAAS,KAAK,CAAA;AACxB,MAAA,IAAI,CAAA,SAAU,CAAA,CAAE,SAAA;AAChB,MAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,QAAA,OAAO,MAAM,IAAA,EAAK;AAAA,MACpB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,SAAA,CAAU,OAAO,OAAA,EAAS;AACxB,MAAA,MAAM,CAAA,GAAI,SAAS,KAAK,CAAA;AACxB,MAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,MAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,QAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,QAAA,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,IAAA;AAAA,MAC5B;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,aAAa,KAAA,EAAO;AAClB,MAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,IACpD;AAAA,GACF;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,cAAA,EAAgB,MAAA,EAAQ,IAAA,EAAK;AAC/C;AAEA,IAAM,aAAa,CAAC,CAAA,KAAsB,CAAC,GAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,KAAK,GAAA,IAAO,CAAA,IAAK,GAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AAGrF,SAAS,YAAY,MAAA,EAAgB;AAC1C,EAAA,OAAO,CAAC,KAAA,KAA+D;AACrE,IAAA,MAAM,CAAA,GAAI,WAAW,KAAK,CAAA;AAC1B,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,MAAA,EAAQ,OAAO,IAAA;AAChC,IAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,CAAA,EAAE;AAAA,EAClC,CAAA;AACF;AAGO,SAAS,mBAAA,CAAoB,MAAA,EAAgB,OAAA,EAAiB,GAAA,EAAa;AAChF,EAAA,OAAO,CAAC,KAAA,KAA+D;AACrE,IAAA,MAAM,CAAA,GAAI,WAAW,KAAK,CAAA;AAC1B,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,MAAA,EAAQ,OAAO,IAAA;AAChC,IAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,GAAI,GAAA,GAAM,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA,EAAE;AAAA,EAC7E,CAAA;AACF;AAGO,SAAS,eAAA,CAAgB,QAAgB,OAAA,EAAiB;AAC/D,EAAA,OAAO,mBAAA,CAAoB,MAAA,EAAQ,OAAA,EAAS,GAAG,CAAA;AACjD;AAGO,SAAS,gBAAA,CAAiB,QAAgB,MAAA,EAAgB;AAC/D,EAAA,OAAO,CAAC,KAAA,KAA+D;AACrE,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,WAAA,EAAY,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC5E,IAAA,MAAM,CAAA,GAAI,WAAW,OAAO,CAAA;AAC5B,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,MAAA,EAAQ,OAAO,IAAA;AAChC,IAAA,OAAO,EAAE,OAAO,CAAA,EAAG,SAAA,EAAW,GAAG,MAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAG;AAAA,EAChD,CAAA;AACF;;;AC9HA,IAAM,KAAA,GAAQ,CAAC,KAAA,KAA+D;AAC5E,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,WAAA,EAAY,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AACtE,EAAA,MAAM,CAAA,GAAI,8BAAA,CAA+B,IAAA,CAAK,OAAO,CAAA;AACrD,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,OAAO,EAAE,OAAO,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,EAAE,CAAC,CAAC,IAAI,SAAA,EAAW,CAAA,EAAG,EAAE,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,EAAG;AACjE,CAAA;AAEA,IAAM,OAAA,GAAU,CAAC,KAAA,KAA+D;AAC9E,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,EAAY,CAAE,MAAK,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAA,GAAI,sCAAA,CAAuC,IAAA,CAAK,OAAO,CAAA;AAC7D,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,EAAG;AACxD,CAAA;AAEA,IAAM,KAAA,GAAQ,CAAC,KAAA,KAA+D;AAC5E,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,EAAY,CAAE,MAAK,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAA,GAAI,4BAAA,CAA6B,IAAA,CAAK,OAAO,CAAA;AACnD,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,EAAG;AACxD,CAAA;AAEA,IAAM,OAAA,GAAU,CAAC,KAAA,KAA+D;AAC9E,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,EAAY,CAAE,MAAK,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAA,GAAI,qBAAA,CAAsB,IAAA,CAAK,OAAO,CAAA;AAC5C,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,EAAG;AACxD,CAAA;AAEA,IAAM,UAAA,GAAa,CAAC,KAAA,KAA+D;AACjF,EAAA,MAAM,CAAA,GAAI,WAAW,KAAK,CAAA;AAC1B,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC3B,EAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAG;AACjE,CAAA;AAEA,IAAM,qBAAA,GAAwB,CAC5B,WAAA,EACA,aAAA,EACA,OACA,OAAA,EACA,OAAA,EACA,cAAA,EACA,QAAA,KAEA,oBAAA,CAAqB;AAAA,EACnB,WAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEI,IAAM,uBAAA,GAA0B,qBAAA;AAAA,EACrC,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,0BAA0B,sDAAsD,CAAA;AAAA,EACjF,OAAA,CAAQ,MAAA;AAAA,EACR,6DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,qBAAA,GAAwB,qBAAA;AAAA,EACnC,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,yBAAyB,uDAAuD,CAAA;AAAA,EACjF,OAAA,CAAQ,OAAA;AAAA,EACR,4DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,oBAAA,GAAuB,qBAAA;AAAA,EAClC,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,4BAA4B,uDAAuD,CAAA;AAAA,EACpF,OAAA,CAAQ,OAAA;AAAA,EACR,0DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,oBAAA,GAAuB,qBAAA;AAAA,EAClC,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,gCAAgC,uDAAuD,CAAA;AAAA,EACxF,OAAA,CAAQ,OAAA;AAAA,EACR,2DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,oBAAA,GAAuB,qBAAA;AAAA,EAClC,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,iCAAiC,sDAAsD,CAAA;AAAA,EACxF,OAAA,CAAQ,MAAA;AAAA,EACR,4DAAA;AAAA,EACA,mBAAA,CAAoB,CAAA,EAAG,CAAA,EAAG,GAAG;AAC/B,CAAA,CAAE;AAEK,IAAM,sBAAA,GAAyB,qBAAA;AAAA,EACpC,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,0BAA0B,uDAAuD,CAAA;AAAA,EAClF,OAAA,CAAQ,OAAA;AAAA,EACR,6DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,wBAAA,GAA2B,qBAAA;AAAA,EACtC,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,wBAAwB,yDAAyD,CAAA;AAAA,EAClF,OAAA,CAAQ,SAAA;AAAA,EACR,wDAAA;AAAA,EACA,gBAAA,CAAiB,GAAG,KAAK;AAC3B,CAAA,CAAE;AAEK,IAAM,sBAAA,GAAyB,qBAAA;AAAA,EACpC,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,gCAAgC,uDAAuD,CAAA;AAAA,EACxF,OAAA,CAAQ,OAAA;AAAA,EACR,8DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,uBAAA,GAA0B,qBAAA;AAAA,EACrC,oBAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,0BAA0B,wDAAwD,CAAA;AAAA,EACnF,OAAA,CAAQ,QAAA;AAAA,EACR,6DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,qBAAA,GAAwB,qBAAA;AAAA,EACnC,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,yBAAyB,sDAAsD,CAAA;AAAA,EAChF,OAAA,CAAQ,MAAA;AAAA,EACR,oDAAA;AAAA,EACA,gBAAA,CAAiB,GAAG,KAAK;AAC3B,CAAA,CAAE;AAEK,IAAM,mBAAA,GAAsB,qBAAA;AAAA,EACjC,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AAAA,IACE,4BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,2DAAA;AAAA,EACA,eAAA,CAAgB,GAAG,CAAC;AACtB,CAAA,CAAE;AAEK,IAAM,qBAAA,GAAwB,qBAAA;AAAA,EACnC,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,2BAA2B,qDAAqD,CAAA;AAAA,EACjF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,4DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,mBAAA,GAAsB,qBAAA;AAAA,EACjC,gBAAA;AAAA,EACA,4BAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,0BAA0B,+DAA+D,CAAA;AAAA,EAC1F,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,iEAAA;AAAA,EACA;AACF,CAAA,CAAE;AAEK,IAAM,mBAAA,GAAsB,qBAAA;AAAA,EACjC,gBAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,wBAAwB,sDAAsD,CAAA;AAAA,EAC/E,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,2DAAA;AAAA,EACA,eAAA,CAAgB,GAAG,CAAC;AACtB,CAAA,CAAE;AAEK,IAAM,qBAAA,GAAwB,qBAAA;AAAA,EACnC,kBAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,yBAAyB,qDAAqD,CAAA;AAAA,EAC/E,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,4DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,uBAAA,GAA0B,qBAAA;AAAA,EACrC,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,yBAAyB,wDAAwD,CAAA;AAAA,EAClF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,6DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,sBAAA,GAAyB,qBAAA;AAAA,EACpC,mBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,yBAAyB,uDAAuD,CAAA;AAAA,EACjF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,6DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,wBAAA,GAA2B,qBAAA;AAAA,EACtC,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,uBAAuB,wDAAwD,CAAA;AAAA,EAChF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,wEAAA;AAAA,EACA;AACF,CAAA,CAAE;AAEK,IAAM,uBAAA,GAA0B,qBAAA;AAAA,EACrC,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,yBAAyB,uDAAuD,CAAA;AAAA,EACjF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,6DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,oBAAA,GAAuB,qBAAA;AAAA,EAClC,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,2BAA2B,sDAAsD,CAAA;AAAA,EAClF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,2DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,oBAAA,GAAuB,qBAAA;AAAA,EAClC,iBAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,yBAAyB,wDAAwD,CAAA;AAAA,EAClF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,4DAAA;AAAA,EACA,eAAA,CAAgB,GAAG,CAAC;AACtB,CAAA,CAAE;AAEK,IAAM,qBAAA,GAAwB,qBAAA;AAAA,EACnC,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,yBAAyB,uDAAuD,CAAA;AAAA,EACjF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,2DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,qBAAA,GAAwB,qBAAA;AAAA,EACnC,kBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,8BAA8B,+DAA+D,CAAA;AAAA,EAC9F,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,2CAAA;AAAA,EACA;AACF,CAAA,CAAE;AAEK,IAAM,sBAAA,GAAyB,qBAAA;AAAA,EACpC,mBAAA;AAAA,EACA,4BAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,wBAAwB,uDAAuD,CAAA;AAAA,EAChF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,4DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,qBAAA,GAAwB,qBAAA;AAAA,EACnC,kBAAA;AAAA,EACA,wBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,gCAAgC,sDAAsD,CAAA;AAAA,EACvF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,2DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,uBAAA,GAA0B,qBAAA;AAAA,EACrC,oBAAA;AAAA,EACA,yBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,0BAA0B,uDAAuD,CAAA;AAAA,EAClF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,4DAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,mBAAA,GAAsB,qBAAA;AAAA,EACjC,gBAAA;AAAA,EACA,wBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,wBAAwB,2DAA2D,CAAA;AAAA,EACpF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,yDAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,mBAAA,GAAsB,qBAAA;AAAA,EACjC,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,2BAA2B,uDAAuD,CAAA;AAAA,EACnF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,wCAAA;AAAA,EACA;AACF,CAAA,CAAE;AAEK,IAAM,2BAAA,GAA8B,qBAAA;AAAA,EACzC,wBAAA;AAAA,EACA,yBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,wBAAwB,0DAA0D,CAAA;AAAA,EACnF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,iEAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;AAEK,IAAM,qBAAA,GAAwB,qBAAA;AAAA,EACnC,kBAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,8BAA8B,qDAAqD,CAAA;AAAA,EACpF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,2CAAA;AAAA,EACA;AACF,CAAA,CAAE;AAEK,IAAM,2BAAA,GAA8B,qBAAA;AAAA,EACzC,wBAAA;AAAA,EACA,6BAAA;AAAA,EACA,oBAAA;AAAA,EACA,CAAC,wBAAwB,6DAA6D,CAAA;AAAA,EACtF,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EACrB,iEAAA;AAAA,EACA,YAAY,CAAC;AACf,CAAA,CAAE;;;AClXK,IAAM,mBAAmB,oBAAA,CAAqB;AAAA,EACnD,WAAA,EAAa,mBAAA;AAAA,EACb,aAAA,EAAe,cAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,wBAAA,EAA0B,sDAAsD,CAAA;AAAA,EAC1F,SAAS,OAAA,CAAQ,MAAA;AAAA,EACjB,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiB,oBAAA,CAAqB;AAAA,EACjD,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,cAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,uBAAuB,CAAA;AAAA,EACjC,SAAS,OAAA,CAAQ,OAAA;AAAA,EACjB,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,gBAAgB,oBAAA,CAAqB;AAAA,EAChD,WAAA,EAAa,gBAAA;AAAA,EACb,aAAA,EAAe,cAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,0BAA0B,CAAA;AAAA,EACpC,SAAS,OAAA,CAAQ,OAAA;AAAA,EACjB,cAAA,EAAgB,yBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,gBAAgB,oBAAA,CAAqB;AAAA,EAChD,WAAA,EAAa,gBAAA;AAAA,EACb,aAAA,EAAe,aAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,8BAA8B,CAAA;AAAA,EACxC,SAAS,OAAA,CAAQ,OAAA;AAAA,EACjB,cAAA,EAAgB,yBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,gBAAgB,oBAAA,CAAqB;AAAA,EAChD,WAAA,EAAa,gBAAA;AAAA,EACb,aAAA,EAAe,cAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,+BAA+B,CAAA;AAAA,EACzC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,yBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,kBAAkB,oBAAA,CAAqB;AAAA,EAClD,WAAA,EAAa,kBAAA;AAAA,EACb,aAAA,EAAe,gBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,wBAAwB,CAAA;AAAA,EAClC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,2BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,oBAAoB,oBAAA,CAAqB;AAAA,EACpD,WAAA,EAAa,oBAAA;AAAA,EACb,aAAA,EAAe,iBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,sBAAsB,CAAA;AAAA,EAChC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,6BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,kBAAkB,oBAAA,CAAqB;AAAA,EAClD,WAAA,EAAa,kBAAA;AAAA,EACb,aAAA,EAAe,mBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,8BAA8B,CAAA;AAAA,EACxC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,2BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,mBAAmB,oBAAA,CAAqB;AAAA,EACnD,WAAA,EAAa,mBAAA;AAAA,EACb,aAAA,EAAe,kBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,wBAAwB,CAAA;AAAA,EAClC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiB,oBAAA,CAAqB;AAAA,EACjD,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,gBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,uBAAuB,CAAA;AAAA,EACjC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,eAAe,oBAAA,CAAqB;AAAA,EAC/C,WAAA,EAAa,eAAA;AAAA,EACb,aAAA,EAAe,iBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,4BAA4B,CAAA;AAAA,EACtC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,wBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiB,oBAAA,CAAqB;AAAA,EACjD,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,eAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,yBAAyB,CAAA;AAAA,EACnC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,eAAe,oBAAA,CAAqB;AAAA,EAC/C,WAAA,EAAa,eAAA;AAAA,EACb,aAAA,EAAe,uBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,wBAAwB,CAAA;AAAA,EAClC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,wBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,eAAe,oBAAA,CAAqB;AAAA,EAC/C,WAAA,EAAa,eAAA;AAAA,EACb,aAAA,EAAe,gBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,sBAAsB,CAAA;AAAA,EAChC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,wBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiB,oBAAA,CAAqB;AAAA,EACjD,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,kBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,uBAAuB,CAAA;AAAA,EACjC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,mBAAmB,oBAAA,CAAqB;AAAA,EACnD,WAAA,EAAa,mBAAA;AAAA,EACb,aAAA,EAAe,iBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,uBAAuB,CAAA;AAAA,EACjC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,kBAAkB,oBAAA,CAAqB;AAAA,EAClD,WAAA,EAAa,kBAAA;AAAA,EACb,aAAA,EAAe,iBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,uBAAuB,CAAA;AAAA,EACjC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,2BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,oBAAoB,oBAAA,CAAqB;AAAA,EACpD,WAAA,EAAa,oBAAA;AAAA,EACb,aAAA,EAAe,oBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,qBAAqB,CAAA;AAAA,EAC/B,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,6BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,mBAAmB,oBAAA,CAAqB;AAAA,EACnD,WAAA,EAAa,mBAAA;AAAA,EACb,aAAA,EAAe,gBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,uBAAuB,CAAA;AAAA,EACjC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,gBAAgB,oBAAA,CAAqB;AAAA,EAChD,WAAA,EAAa,gBAAA;AAAA,EACb,aAAA,EAAe,eAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,yBAAyB,CAAA;AAAA,EACnC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,yBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,gBAAgB,oBAAA,CAAqB;AAAA,EAChD,WAAA,EAAa,gBAAA;AAAA,EACb,aAAA,EAAe,kBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,uBAAuB,CAAA;AAAA,EACjC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,yBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiB,oBAAA,CAAqB;AAAA,EACjD,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,gBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,uBAAuB,CAAA;AAAA,EACjC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiB,oBAAA,CAAqB;AAAA,EACjD,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,iBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,4BAA4B,CAAA;AAAA,EACtC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,kBAAkB,oBAAA,CAAqB;AAAA,EAClD,WAAA,EAAa,kBAAA;AAAA,EACb,aAAA,EAAe,uBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,sBAAsB,CAAA;AAAA,EAChC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,2BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiB,oBAAA,CAAqB;AAAA,EACjD,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,mBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,8BAA8B,CAAA;AAAA,EACxC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,mBAAmB,oBAAA,CAAqB;AAAA,EACnD,WAAA,EAAa,mBAAA;AAAA,EACb,aAAA,EAAe,oBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,wBAAwB,CAAA;AAAA,EAClC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,eAAe,oBAAA,CAAqB;AAAA,EAC/C,WAAA,EAAa,eAAA;AAAA,EACb,aAAA,EAAe,mBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,sBAAsB,CAAA;AAAA,EAChC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,wBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,eAAe,oBAAA,CAAqB;AAAA,EAC/C,WAAA,EAAa,eAAA;AAAA,EACb,aAAA,EAAe,cAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,yBAAyB,CAAA;AAAA,EACnC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,wBAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,uBAAuB,oBAAA,CAAqB;AAAA,EACvD,WAAA,EAAa,uBAAA;AAAA,EACb,aAAA,EAAe,oBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,sBAAsB,CAAA;AAAA,EAChC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,gCAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,iBAAiB,oBAAA,CAAqB;AAAA,EACjD,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,kBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,4BAA4B,CAAA;AAAA,EACtC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;AAEM,IAAM,uBAAuB,oBAAA,CAAqB;AAAA,EACvD,WAAA,EAAa,uBAAA;AAAA,EACb,aAAA,EAAe,wBAAA;AAAA,EACf,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,CAAC,sBAAsB,CAAA;AAAA,EAChC,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9B,cAAA,EAAgB,gCAAA;AAAA,EAChB,OAAA,EAAW;AACb,CAAC;;;ACpTD,IAAM,MAAA,GAAS,SAAA;AAGR,IAAM,qBAAA,GAAN,MAAM,sBAAA,CAAsB;AAAA,EACjC,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,kBAAA;AAAA,IACb,aAAA,EAAe,oBAAA;AAAA,IACf,KAAA,EAAO,oBAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,0BAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,KAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EAET,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,EACjB;AAAA,EAEQ,WAAA,CAAY,KAAA,EAAe,SAAA,EAAmB,OAAA,EAAyB;AAC7E,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,OAAO,SAAS,KAAA,EAAgE;AAC9E,IAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACjD,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,KAAK,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,IAAK,GAAA,IAAO,CAAA,IAAK,GAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AACrE,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,GAAG,OAAO,IAAA;AACjC,IAAA,MAAM,SAAA,GAAY,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAC1D,IAAA,MAAM,EAAA,GAAK,eAAe,QAAA,CAAS,SAAA,EAAW,EAAE,OAAA,EAAS,OAAA,CAAQ,QAAQ,CAAA;AACzE,IAAA,IAAI,EAAA,KAAO,MAAM,OAAO,IAAA;AACxB,IAAA,OAAO,IAAI,sBAAA,CAAsB,MAAA,EAAQ,SAAA,EAAW,EAAE,CAAA;AAAA,EACxD;AAAA,EAEA,OAAO,MAAM,KAAA,EAAsC;AACjD,IAAA,MAAM,CAAA,GAAI,sBAAA,CAAsB,QAAA,CAAS,KAAK,CAAA;AAC9C,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAC7F,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,sBAAA,CAAsB,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EACnD;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,sBAAA,CAAsB,QAAA,CAAS,KAAK,CAAA;AAC9C,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,SAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,sBAAA,CAAsB,QAAA,CAAS,KAAK,CAAA;AAC9C,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,MAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,MAAA,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,IAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,sBAAA,CAAsB,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EACrE;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AACF;;;AC5EO,IAAM,cAAA,GAAN,MAAM,eAAA,CAAe;AAAA,EAC1B,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,iBAAA;AAAA,IACb,aAAA,EAAe,eAAA;AAAA,IACf,KAAA,EAAO,oBAAA;AAAA,IACP,SAAS,MAAA,CAAO,MAAA,CAAO,CAAC,0BAAA,EAA4B,8BAA8B,CAAC;AAAA,GACpF,CAAA;AAAA,EAEQ,MAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EAET,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,EACjB;AAAA;AAAA,EAEA,IAAI,cAAA,GAAyC;AAC3C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EACA,IAAI,MAAA,GAAwB;AAC1B,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACrB;AAAA,EACA,IAAI,OAAA,GAAyB;AAC3B,IAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,EACrB;AAAA,EACA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,KAAK,MAAA,CAAO,SAAA;AAAA,EACrB;AAAA,EACA,IAAI,eAAA,GAAiC;AACnC,IAAA,OAAO,KAAK,MAAA,CAAO,eAAA;AAAA,EACrB;AAAA,EACA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,KAAK,kBAAA,EAAmB;AAAA,EACjC;AAAA,EACA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,KAAK,QAAA,EAAS;AAAA,EACvB;AAAA,EAEQ,WAAA,CACN,MAAA,EACA,OAAA,EACA,IAAA,EACA,OAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EASA,OAAO,SAAS,GAAA,EAAqC;AACnD,IAAA,MAAM,OAAA,GACJ,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,GAC/B,OAAA,CAAQ,QAAA,CAAS,GAAY,CAAA,GAC7B,OAAA,CAAQ,QAAA,CAAS,GAAgC,CAAA;AACvD,IAAA,IAAI,OAAA,KAAY,MAAM,OAAO,IAAA;AAC7B,IAAA,OAAO,eAAA,CAAe,QAAQ,OAAO,CAAA;AAAA,EACvC;AAAA,EAEA,OAAO,MAAM,KAAA,EAA+B;AAC1C,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAK,CAAA;AACvC,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,eAAA,CAAe,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EAC5C;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAK,CAAA;AACvC,IAAA,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,QAAA,EAAS;AACzB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAK,CAAA;AACvC,IAAA,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,kBAAA,EAAmB;AACnC,IAAA,IAAI,OAAA,EAAS,iCAAA,IAAqC,KAAA,IAAS,IAAA,EAAM;AAC/D,MAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,MAAA,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,IAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,eAAA,CAAe,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,qBAAqB,IAAA,EAAwD;AAClF,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAC/B,IAAA,MAAM,UAA2C,EAAC;AAElD,IAAA,KAAA,MAAW,SAAA,IAAa,OAAA,CAAQ,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC1D,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAe,OAAA,CAAQ,SAAA,CAAU,KAAK,CAAA;AACpD,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,IAAI,aAAA,CAAc;AAAA,UAChB,YAAY,SAAA,CAAU,UAAA;AAAA,UACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,UAClB,cAAc,SAAA,CAAU,YAAA;AAAA,UACxB,QAAA,EAAU,gBAAA;AAAA,UACV,UAAU,qBAAA,CAAsB,OAAA;AAAA,UAChC,cAAA,EAAgB,MAAM,kBAAA,EAAmB;AAAA,UACzC,aAAA,EAAe,MAAM,QAAA,EAAS;AAAA,UAC9B,YAAY,SAAA,CAAU,UAAA;AAAA,UACtB,YAAY,SAAA,CAAU,UAAA;AAAA,UACtB;AAAA,SACD;AAAA,OACH;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,QAAQ,kBAAA,EAAmB;AAAA,EACzC;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA;AACrC,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AACzD,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,iBAAA,GAA4B;AAC1B,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,CAAA;AACrC,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AACzD,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEQ,mBAAA,GAA8B;AACpC,IAAA,IAAI,IAAA,CAAK,iBAAiB,OAAO,CAAA,EAAG,KAAK,MAAA,CAAO,MAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,eAAe,CAAA,CAAA;AAClF,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACrB;AAAA;AAAA,EAGA,OAAO,QAAQ,OAAA,EAAyC;AACtD,IAAA,IAAI,OAAA,CAAQ,WAAW,OAAA,CAAQ,OAAA,CAAQ,WAAW,WAAA,EAAY,KAAM,MAAM,OAAO,IAAA;AACjF,IAAA,IAAI,QAAQ,OAAA,KAAY,IAAA,IAAQ,CAAC,OAAA,CAAQ,OAAA,CAAQ,WAAW,OAAO,IAAA;AACnE,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,IAAA,EAAM,OAAO,IAAA;AAClC,IAAA,MAAM,UAAA,GAAa,qBAAA,CAAsB,QAAA,CAAS,OAAA,CAAQ,QAAQ,KAAK,CAAA;AACvE,IAAA,IAAI,UAAA,KAAe,MAAM,OAAO,IAAA;AAChC,IAAA,MAAM,WAAA,GACJ,OAAA,CAAQ,OAAA,KAAY,IAAA,GAChB,UACA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,IAAA,EAAM,QAAQ,MAAM,CAAA;AAC/E,IAAA,OAAO,IAAI,eAAA,CAAe,OAAA,CAAQ,QAAQ,UAAA,EAAY,OAAA,CAAQ,MAAM,WAAW,CAAA;AAAA,EACjF;AACF;;;ACzLA,IAAI,UAAA,GAAa,KAAA;AAWV,SAAS,+BAAA,GAAwC;AACtD,EAAA,IAAI,UAAA,EAAY;AAChB,EAAA,UAAA,GAAa,IAAA;AAGb,EAAA,sBAAA,CAAuB;AAAA,IACrB,SAAS,OAAA,CAAQ,MAAA;AAAA,IACjB,OAAA,EAAS,CAAC,OAAA,KAAY,cAAA,CAAe,QAAQ,OAAO,CAAA;AAAA,IACpD,SAAA,EAAW,CAAC,KAAA,KAAU,qBAAA,CAAsB,OAAO,KAAK;AAAA,GACzD,CAAA;AAED,EAAA,KAAA,MAAW,cAAA,IAAkB;AAAA,IACzB,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACJ,EAAG;AACD,IAAA,sBAAA,CAAuB;AAAA,MACrB,SAAS,cAAA,CAAe,OAAA;AAAA,MACxB,OAAA,EAAS,CAAC,OAAA,KAAY,cAAA,CAAe,QAAQ,OAAO,CAAA;AAAA,MACpD,WAAW,CAAC,KAAA,KAAU,cAAA,CAAe,WAAA,CAAY,OAAO,KAAK;AAAA,KAC9D,CAAA;AAAA,EACH;AACF;;;AC1BO,SAAS,YAAA,CAAa,aAAqB,OAAA,EAAqC;AACrF,EAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,EAAA,KAAA,MAAW,CAAA,IAAK,SAAS,IAAI,QAAA,CAAS,QAAQ,CAAC,CAAA,IAAK,GAAG,OAAO,IAAA;AAC9D,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,sBAAA,CAAuB,aAAqB,OAAA,EAAqC;AAC/F,EAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,IAAI,QAAA,KAAa,GAAG,OAAO,IAAA;AAC3B,IAAA,IAAI,QAAA,CAAS,UAAA,CAAW,CAAA,GAAI,GAAG,GAAG,OAAO,IAAA;AACzC,IAAA,IAAI,QAAA,CAAS,QAAA,CAAS,GAAA,GAAM,CAAC,GAAG,OAAO,IAAA;AACvC,IAAA,IAAI,SAAS,OAAA,CAAQ,GAAA,GAAM,IAAI,GAAG,CAAA,IAAK,GAAG,OAAO,IAAA;AAAA,EACnD;AACA,EAAA,OAAO,KAAA;AACT;;;ACnDA,IAAMA,iBAAAA,GAAmB,GAAA;AAGzB,IAAM,oBAAA,GAAuB,4BAAA;AAE7B,IAAM,oBAAuC,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,KAAA,EAAO,OAAO,IAAI,CAAA;AAClF,IAAM,kBAAA,GAAwC;AAAA,EAC5C,aAAA;AAAA,EACA,YAAA;AAAA,EACA,wBAAA;AAAA,EACA,qBAAA;AAAA,EACA,8BAAA;AAAA,EACA;AACF,CAAA;AACA,IAAM,YAAA,GAAkC,CAAC,aAAA,EAAe,MAAA,EAAQ,MAAM,CAAA;AACtE,IAAM,YAAA,GAAkC;AAAA,EACtC,SAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,mBAAA,mBAAsB,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,IAAI,CAAC,CAAA;AAE1E,IAAM,yBAAA,uBAAqD,GAAA,CAAI;AAAA,EAC7D,cAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,6BAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gCAAA;AAAA,EACA,yBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,mCAAA;AAAA,EACA,uCAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iCAAA;AAAA,EACA,uBAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,mBAAA;AAAA,EACA,yBAAA;AAAA,EACA,mBAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,sBAAA;AAAA,EACA,wBAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,sBAAA;AAAA,EACA,uBAAA;AAAA,EACA,8BAAA;AAAA,EACA,sBAAA;AAAA,EACA,6BAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGM,IAAM,uBAAA,GAAN,MAAM,wBAAA,CAAwB;AAAA,EACnC,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,mBAAA;AAAA,IACb,aAAA,EAAe,mBAAA;AAAA,IACf,KAAA,EAAO,iBAAA;AAAA,IACP,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,CAAC,yBAAyB,CAAC;AAAA,GACnD,CAAA;AAAA,EAEQ,KAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,+BAAA;AAAA,EAED,WAAA,CACN,KAAA,EACA,gBAAA,EACA,aAAA,EACA,YAAA,EACA;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,qBAAA,GAAwB,gBAAA;AAC7B,IAAA,IAAA,CAAK,yBAAA,GAA4B,aAAA;AACjC,IAAA,IAAA,CAAK,+BAAA,GAAkC,YAAA;AAAA,EACzC;AAAA,EAEA,OAAO,SAAS,KAAA,EAAkE;AAChF,IAAA,MAAM,UAAA,GAAa,mBAAmB,KAAK,CAAA;AAC3C,IAAA,IAAI,WAAW,MAAA,KAAW,CAAA,IAAK,UAAA,CAAW,MAAA,GAASA,mBAAkB,OAAO,IAAA;AAC5E,IAAA,IAAI,CAAC,YAAA,CAAa,UAAU,CAAA,EAAG,OAAO,IAAA;AAEtC,IAAA,MAAM,YAAA,GAAe,gBAAgB,UAAU,CAAA;AAC/C,IAAA,MAAM,aAAA,GAAgB,6BAA6B,YAAY,CAAA;AAC/D,IAAA,MAAM,QAAA,GAAW,kBAAkB,YAAY,CAAA;AAC/C,IAAA,MAAM,MAAA,GAAS,wBAAA,CAAwB,eAAA,CAAgB,UAAU,CAAA;AACjE,IAAA,OAAO,IAAI,wBAAA,CAAwB,UAAA,EAAY,MAAA,EAAQ,eAAe,QAAQ,CAAA;AAAA,EAChF;AAAA,EAEA,OAAO,MAAM,KAAA,EAAwC;AACnD,IAAA,MAAM,CAAA,GAAI,wBAAA,CAAwB,QAAA,CAAS,KAAK,CAAA;AAChD,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAC5D,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,wBAAA,CAAwB,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EACrD;AAAA,EAEA,OAAO,wBAAwB,IAAA,EAA0C;AACvE,IAAA,IAAI,QAAQ,IAAA,IAAQ,IAAA,CAAK,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AAC/C,IAAA,OAAO,0BAA0B,GAAA,CAAI,kBAAA,CAAmB,IAAI,CAAA,CAAE,aAAa,CAAA;AAAA,EAC7E;AAAA,EAEA,OAAO,6BAA6B,IAAA,EAA0D;AAC5F,IAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI,OAAA,CAAA;AACxC,IAAA,OAAO,iBAAA,CAAkB,eAAA,CAAgB,kBAAA,CAAmB,IAAI,CAAC,CAAC,CAAA;AAAA,EACpE;AAAA,EAEA,OAAO,gBAAgB,IAAA,EAAsB;AAC3C,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAC,CAAA;AACxD,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACjC,IAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAC3D,IAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAC3D,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,QAAA,EAAU,OAAO,IAAA;AAEnC,IAAA,OAAO,IAAA,CACJ,MAAM,GAAG,CAAA,CACT,IAAI,CAAC,CAAA,KAAO,oBAAoB,GAAA,CAAI,CAAA,CAAE,aAAa,CAAA,GAAI,EAAE,WAAA,EAAY,GAAIG,gBAAe,CAAC,CAAE,CAAA,CAC3F,IAAA,CAAK,GAAG,CAAA;AAAA,EACb;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,wBAAA,CAAwB,QAAA,CAAS,KAAK,CAAA;AAChD,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,OAAO,wBAAA,CAAwB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EACtD;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,wBAAA,CAAwB,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EACvE;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAA4D;AACjE,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAA2D;AACnE,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF,CAAA;AAEA,SAAS,gBAAgB,IAAA,EAAsB;AAC7C,EAAA,MAAM,OAAA,GAAU,KAAK,OAAA,EAAQ;AAC7B,EAAA,IAAI,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,OAAA,EAAQ;AAClF,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAAwB;AAC5C,EAAA,IAAI,MAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,KAAK,OAAO,KAAA;AACnD,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AAC3B,IAAA,IAAI,IAAA,GAAO,EAAA,IAAQ,IAAA,KAAS,GAAA,EAAM,OAAO,KAAA;AAAA,EAC3C;AACA,EAAA,OAAO,oBAAA,CAAqB,KAAK,KAAK,CAAA;AACxC;AAEA,SAAS,6BAA6B,SAAA,EAA4B;AAChE,EAAA,MAAM,KAAA,GAAQ,UAAU,WAAA,EAAY;AACpC,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,iBAAA,CAAkB,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAE,CAAA,EAAG,OAAO,IAAA;AACrF,EAAA,KAAA,MAAW,KAAK,kBAAA,EAAoB,IAAI,MAAM,QAAA,CAAS,CAAC,GAAG,OAAO,IAAA;AAClE,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc,IAAI,MAAM,UAAA,CAAW,CAAC,GAAG,OAAO,IAAA;AAC9D,EAAA,KAAA,MAAW,CAAA,IAAK,cAAc,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA,IAAK,GAAG,OAAO,IAAA;AAChE,EAAA,IAAI,yBAAA,CAA0B,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,IAAA;AACjD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAkB,SAAA,EAA4C;AACrE,EAAA,MAAM,KAAA,GAAQ,UAAU,WAAA,EAAY;AACpC,EAAA,IAAI,CAAC,KAAA,EAAO,OAAA,CAAA;AAEZ,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,GAAS,CAAA,GAAI,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAAK,EAAA;AAE/D,EAAA,IAAI,aAAa,IAAA,EAAM,OAAA,CAAA;AACvB,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,YAAA,CAAa,KAAA,EAAO,gBAAgB,CAAA;AAC3D,IAAA,OAAA,EAAA;AACF,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,YAAA,CAAa,KAAA,EAAO,cAAc,CAAA;AACzD,IAAA,OAAA,EAAA;AAEF,EAAA,IACE,uBAAuB,KAAA,EAAO,KAAK,KACnC,YAAA,CAAa,KAAA,EAAO,8BAAwB,sBAAsB,CAAA;AAElE,IAAA,OAAA,EAAA;AAEF,EAAA,IACE,YAAA;AAAA,IACE,KAAA;AAAA,IACA,6BAAA;AAAA,IACA,uBAAA;AAAA,IACA,wBAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF;AAEA,IAAA,OAAA,EAAA;AAEF,EAAA,IAAI,QAAA,KAAa,KAAA,IAAS,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AAC/C,IAAA,OAAA,EAAA;AAEF,EAAA,IACE,KAAA,CAAM,QAAA,CAAS,aAAU,CAAA,IACzB,KAAA,CAAM,SAAS,YAAS,CAAA,IACxB,YAAA,CAAa,KAAA,EAAO,uBAAoB,CAAA;AAExC,IAAA,OAAA,EAAA;AAEF,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,oBAAiB,CAAA,EAAG,OAAA,EAAA;AAE5C,EAAA,IAAI,MAAM,UAAA,CAAW,aAAa,CAAA,IAAK,YAAA,CAAa,OAAO,WAAW,CAAA;AACpE,IAAA,OAAA,EAAA;AAEF,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,QAAQ,CAAA,EAAG,OAAA,EAAA;AACnC,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,QAAA,EAAU,WAAW,CAAA,EAAG,OAAA,EAAA;AAChD,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,eAAA,EAAc,YAAY,CAAA,EAAG,OAAA,EAAA;AACrD,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,WAAW,CAAA,EAAG,OAAA,EAAA;AACtC,EAAA,IAAI,yBAAA,CAA0B,GAAA,CAAI,KAAK,CAAA,EAAG,OAAA,EAAA;AAC1C,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,WAAA,EAAU,QAAQ,CAAA,EAAG,OAAA,CAAA;AAE7C,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,YAAA,CAAa,KAAA,EAAO,eAAe,CAAA;AAC1D,IAAA,OAAA,EAAA;AACF,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,cAAc,CAAA,EAAG,OAAA,EAAA;AAEzC,EAAA,IAAI,sBAAA,CAAuB,KAAA,EAAO,aAAA,EAAe,UAAU,CAAA;AACzD,IAAA,OAAA,EAAA;AACF,EAAA,IAAI,sBAAA,CAAuB,KAAA,EAAO,wCAAA,EAA0C,MAAM,CAAA;AAChF,IAAA,OAAA,EAAA;AACF,EAAA,IAAI,uBAAuB,KAAA,EAAO,KAAK,CAAA,IAAK,YAAA,CAAa,OAAO,kCAA+B,CAAA;AAC7F,IAAA,OAAA,EAAA;AACF,EAAA,IAAI,sBAAA,CAAuB,KAAA,EAAO,QAAQ,CAAA,EAAG,OAAA,EAAA;AAE7C,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,gBAAA,EAAe,aAAU,CAAA,EAAG,OAAA,EAAA;AAEpD,EAAA,OAAA,CAAA;AACF;AAWA,SAASA,gBAAe,IAAA,EAAsB;AAC5C,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC9C,EAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,CAAG,iBAAA,CAAkB,OAAO,CAAA,GAAI,OAAA,CAAQ,MAAM,CAAC,CAAA;AACjE;;;ACrSO,IAAM,mBAAA,GACX,6EAAA;AAIF,IAAM,UAAA,GAAa;AAAA,EACjB,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEO,SAASC,oBAAmB,KAAA,EAA0C;AAC3E,EAAA,IAAI,MAAA,GAAS,mBAAa,KAAK,CAAA;AAC/B,EAAA,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,UAAA,EAAY,GAAG,CAAA;AACvC,EAAA,MAAM,QAAQ,MAAA,CACX,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,YAAA,EAAc,EAAE,CAAC,CAAA,CACtC,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAA;AAC7B,EAAA,MAAA,GAAS,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB,EAAA,OAAO,sBAAsB,MAAM,CAAA;AACrC;AAEA,SAAS,sBAAsB,KAAA,EAAuB;AACpD,EAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,EAAY;AAChC,EAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,IAAA,IAAI,KAAA,CAAM,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ;AAC9B,IAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,EAAG;AAC1B,IAAA,IAAI,KAAA,CAAM,CAAA,CAAE,MAAM,CAAA,KAAM,GAAA,EAAK;AAC7B,IAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,gBAAgB,KAAA,EAAuB;AACrD,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAC,CAAA;AACzD,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AACjC,EAAA,MAAM,UAAU,kBAAA,CAAmB,OAAA;AACnC,EAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,KAAM,CAAA,CAAE,iBAAA,CAAkB,OAAO,CAAC,CAAA;AACxE,EAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,KAAM,CAAA,CAAE,iBAAA,CAAkB,OAAO,CAAC,CAAA;AACxE,EAAA,OAAO,QAAA,IAAY,QAAA,GAAWC,mBAAAA,CAAmB,KAAK,CAAA,GAAI,KAAA;AAC5D;AAEO,SAAS,iBAAiB,KAAA,EAA2C;AAC1E,EAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AACjD,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,KAAA;AACpC,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,KAAA;AACpC,EAAA,OAAO,mBAAA,CAAoB,KAAK,KAAK,CAAA;AACvC;AAEO,SAAS,mBAAmB,KAAA,EAA2C;AAC5E,EAAA,IAAI,SAAS,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA;AACrD,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,MAAM,gBAAgB,CAAA;AACzD;AAEA,SAASA,oBAAmB,KAAA,EAAuB;AACjD,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,CAAIC,qBAAoB,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC5E;AAEA,SAASA,sBAAqB,IAAA,EAAsB;AAClD,EAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,IAAIH,eAAc,CAAA,CAAE,KAAK,GAAG,CAAA;AACrD;AAEA,SAASA,gBAAe,IAAA,EAAsB;AAC5C,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,UAAU,kBAAA,CAAmB,OAAA;AACnC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC9C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAE,CAAA,EAAG;AAC9B,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,IAAI,OAAA,CAAQ,CAAC,CAAA,CAAG,iBAAA,CAAkB,OAAO,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,IAC3F;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;;;ACrFA,IAAMH,iBAAAA,GAAmB,GAAA;AAGlB,IAAM,eAAA,GAAN,MAAM,gBAAA,CAAgB;AAAA,EAC3B,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,YAAA;AAAA,IACb,aAAA,EAAe,YAAA;AAAA,IACf,KAAA,EAAO,cAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,mFAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,KAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EAED,WAAA,CAAY,KAAA,EAAe,KAAA,EAA0B,aAAA,EAA8B;AACzF,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,KAAK,CAAC,CAAA;AACrC,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AAAA,EAEA,OAAO,QAAA,CACL,KAAA,EACA,OAAA,EACwB;AACxB,IAAA,MAAM,SAAA,GAAYI,oBAAmB,KAAK,CAAA;AAC1C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAASJ,mBAAkB,OAAO,IAAA;AAC1E,IAAA,MAAM,UAAA,GAAa,gBAAgB,SAAS,CAAA;AAC5C,IAAA,IAAI,CAAC,kBAAA,CAAmB,UAAU,CAAA,EAAG,OAAO,IAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,WAAW,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA;AAC1D,IAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,IAAA,MAAM,cAAA,GAAiB,SAAS,aAAA,IAAiB,IAAA;AACjD,IAAA,IAAI,cAAA,IAAkB,IAAA,IAAQ,cAAA,CAAe,IAAA,OAAW,EAAA,EAAI;AAC1D,MAAA,MAAM,EAAA,GAAK,eAAA,CAAgBI,mBAAAA,CAAmB,cAAc,CAAC,CAAA;AAC7D,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAY,KAAM,EAAA,CAAG,WAAA,EAAa,CAAA,IAAK,IAAA;AACzE,MAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,MAAA,SAAA,GAAY,KAAA;AAAA,IACd;AACA,IAAA,OAAO,IAAI,gBAAA,CAAgB,UAAA,EAAY,KAAA,EAAO,SAAS,CAAA;AAAA,EACzD;AAAA,EAEA,OAAO,KAAA,CAAM,KAAA,EAAe,OAAA,EAA8D;AACxF,IAAA,MAAM,CAAA,GAAI,gBAAA,CAAgB,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AACjD,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,wBAAwB,CAAA;AACxD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,gBAAA,CAAgB,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,gBAAA,CAAgB,QAAA,CAAS,KAAK,CAAA;AACxC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,OAAO,gBAAA,CAAgB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EAC9C;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,gBAAA,CAAgB,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAC/D;AAAA,EAEA,kBAAkB,aAAA,EAAwC;AACxD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAY,KAAM,aAAA,CAAc,WAAA,EAAa,CAAA,IAAK,IAAA;AACzF,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,IAAI,gBAAA,CAAgB,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EAC1D;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAAoD;AACzD,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAAmD;AAC3D,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF,CAAA;;;ACnGA,IAAMJ,kBAAAA,GAAmB,GAAA;AAGlB,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAAiB;AAAA,EAC5B,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,aAAA;AAAA,IACb,aAAA,EAAe,WAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,mFAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,KAAA;AAAA,EAED,YAAY,KAAA,EAAe;AACjC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,OAAO,SAAS,KAAA,EAA2D;AACzE,IAAA,MAAM,SAAA,GAAYI,oBAAmB,KAAK,CAAA;AAC1C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAASJ,oBAAkB,OAAO,IAAA;AAC1E,IAAA,MAAM,UAAA,GAAa,gBAAgB,SAAS,CAAA;AAC5C,IAAA,IAAI,CAAC,gBAAA,CAAiB,UAAU,CAAA,EAAG,OAAO,IAAA;AAC1C,IAAA,OAAO,IAAI,kBAAiB,UAAU,CAAA;AAAA,EACxC;AAAA,EAEA,OAAO,MAAM,KAAA,EAAiC;AAC5C,IAAA,MAAM,CAAA,GAAI,iBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA;AACzC,IAAA,IAAI,CAAA,KAAM,IAAA,EAAM,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACtD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,iBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EAC9C;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,iBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA;AACzC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,OAAO,iBAAA,CAAiB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EAC/C;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,iBAAA,CAAiB,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAChE;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAAqD;AAC1D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAAoD;AAC5D,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF,CAAA;;;AC7EA,IAAMA,kBAAAA,GAAmB,GAAA;AAGlB,IAAM,cAAA,GAAN,MAAM,eAAA,CAAe;AAAA,EAC1B,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,WAAA;AAAA,IACb,aAAA,EAAe,sBAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,MACrB,mFAAA;AAAA,MACA;AAAA,KACD;AAAA,GACF,CAAA;AAAA,EAEQ,SAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EAET,IAAI,aAAA,GAA+B;AACjC,IAAA,OAAO,KAAK,SAAA,CAAU,aAAA;AAAA,EACxB;AAAA,EAEQ,WAAA,CAAY,KAAA,EAAwB,MAAA,EAA0B,KAAA,EAAe;AACnF,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,OAAO,MAAA,CAAO,SAAA,EAA4B,UAAA,EAA8C;AACtF,IAAA,OAAO,IAAI,eAAA,CAAe,SAAA,EAAW,UAAA,EAAY,CAAA,EAAG,UAAU,KAAK,CAAA,CAAA,EAAI,UAAA,CAAW,KAAK,CAAA,CAAE,CAAA;AAAA,EAC3F;AAAA,EAEA,OAAO,QAAA,CACL,KAAA,EACA,OAAA,EACuB;AACvB,IAAA,MAAM,SAAA,GAAYI,oBAAmB,KAAK,CAAA;AAC1C,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,MAAA,GAASJ,oBAAkB,OAAO,IAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,UAAU,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,CAAA;AAC1D,IAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAC9B,IAAA,MAAM,SAAA,GAAY,OAAO,KAAA,CAAM,CAAA,EAAG,OAAO,MAAA,GAAS,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC7D,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,QAAA,CAAS,SAAA,EAAW,OAAO,CAAA;AACzD,IAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,MAAM,SAAS,gBAAA,CAAiB,QAAA,CAAS,OAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAE,CAAA;AACnE,IAAA,IAAI,MAAA,KAAW,MAAM,OAAO,IAAA;AAC5B,IAAA,OAAO,IAAI,eAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,CAAA,EAAG,MAAM,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,EAC3E;AAAA,EAEA,OAAO,KAAA,CAAM,KAAA,EAAe,OAAA,EAA6D;AACvF,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAChD,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,MAAM,IAAI,MAAM,2EAA2E,CAAA;AAAA,IAC7F;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA2C;AACxD,IAAA,OAAO,eAAA,CAAe,QAAA,CAAS,KAAK,CAAA,KAAM,IAAA;AAAA,EAC5C;AAAA,EAEA,OAAO,MAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,CAAA,GAAI,eAAA,CAAe,QAAA,CAAS,KAAK,CAAA;AACvC,IAAA,IAAI,CAAA,SAAU,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,SAAS,iCAAA,IAAqC,KAAA,IAAS,QAAQ,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACtF,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAA,CACL,KAAA,EACA,OAAA,EACe;AACf,IAAA,OAAO,eAAA,CAAe,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,aAAa,KAAA,EAA2C;AAC7D,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,eAAA,CAAe,SAAA,CAAU,KAAK,CAAA,KAAM,KAAA;AAAA,EAC9D;AAAA,EAEA,kBAAkB,aAAA,EAAuC;AACvD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,iBAAA,CAAkB,aAAa,CAAA;AAC5D,IAAA,OAAO,IAAI,eAAA,CAAe,KAAA,EAAO,IAAA,CAAK,UAAA,EAAY,KAAK,KAAK,CAAA;AAAA,EAC9D;AAAA,EAEA,kBAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACA,QAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAAmD;AACxD,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,KAAA;AAAA,EAC/C;AAAA,EACA,UAAU,KAAA,EAAkD;AAC1D,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,EACxE;AACF,CAAA;;;ACpGO,IAAM,cAAA,GAAN,MAAM,eAAA,CAAe;AAAA,EAC1B,OAAgB,QAAA,GAA8B,MAAA,CAAO,MAAA,CAAO;AAAA,IAC1D,WAAA,EAAa,iBAAA;AAAA,IACb,aAAA,EAAe,gBAAA;AAAA,IACf,KAAA,EAAO,WAAA;AAAA,IACP,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,EAAE;AAAA,GAC1B,CAAA;AAAA,EAEQ,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EAET,IAAI,aAAA,GAAyB;AAC3B,IAAA,OAAO,KAAK,UAAA,KAAe,IAAA;AAAA,EAC7B;AAAA,EAEA,IAAI,mBAAA,GAA+B;AACjC,IAAA,OAAO,KAAK,gBAAA,KAAqB,IAAA;AAAA,EACnC;AAAA,EAEA,IAAI,UAAA,GAAsB;AACxB,IAAA,OAAO,KAAK,OAAA,KAAY,IAAA;AAAA,EAC1B;AAAA,EAEQ,WAAA,CACN,UAAA,EACA,gBAAA,EACA,OAAA,EACA;AACA,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,gBAAA,GAAmB,gBAAA;AACxB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,OAAO,MAAA,CACL,UAAA,GAAoC,MACpC,gBAAA,GAAmD,IAAA,EACnD,UAA0B,IAAA,EACV;AAChB,IAAA,IAAI,UAAA,KAAe,IAAA,IAAQ,gBAAA,KAAqB,IAAA,IAAQ,YAAY,IAAA,EAAM;AACxE,MAAA,MAAM,IAAI,MAAM,4EAA4E,CAAA;AAAA,IAC9F;AACA,IAAA,OAAO,IAAI,eAAA,CAAe,UAAA,EAAY,gBAAA,EAAkB,OAAO,CAAA;AAAA,EACjE;AAAA,EAEA,OAAO,OAAA,GAAiC;AACtC,IAAA,OAAO,IAAI,qBAAA,EAAsB;AAAA,EACnC;AAAA,EAEA,iBAAA,GAA4B;AAC1B,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,WAAW,KAAK,CAAA;AACrD,IAAA,IAAI,KAAK,gBAAA,EAAkB,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,iBAAiB,KAAK,CAAA;AACjE,IAAA,IAAI,KAAK,OAAA,EAAS,KAAA,CAAM,KAAK,IAAA,CAAK,OAAA,CAAQ,mBAAmB,CAAA;AAC7D,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,CAAC,kBAAA,CAAmB,wBAAwB,CAAA;AAAA,EAC1E;AAAA,EAEA,eAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,EAClC;AAAA,EAEA,cAAA,GAAyB;AACvB,IAAA,MAAM,KAAA,GAAQ,KAAK,cAAA,EAAe;AAClC,IAAA,IAAI,KAAK,OAAA,EAAS,KAAA,CAAM,KAAK,IAAA,CAAK,OAAA,CAAQ,gBAAgB,CAAA;AAC1D,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,OAAO,KAAK,eAAA,EAAgB;AAAA,EAC9B;AAAA,EAEQ,gBAAgB,UAAA,EAA6B;AACnD,IAAA,MAAM,KAAA,GAAQ,KAAK,cAAA,EAAe;AAClC,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,KAAA,CAAM,IAAA,CAAK,aAAa,IAAA,CAAK,OAAA,CAAQ,iBAAgB,GAAI,IAAA,CAAK,OAAA,CAAQ,eAAA,EAAiB,CAAA;AAAA,IACzF;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEQ,cAAA,GAA2B;AACjC,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAI,KAAK,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,WAAW,KAAK,CAAA;AACrD,IAAA,IAAI,KAAK,gBAAA,EAAkB,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,iBAAiB,KAAK,CAAA;AACjE,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGO,IAAM,wBAAN,MAA4B;AAAA,EACzB,UAAA,GAAoC,IAAA;AAAA,EACpC,gBAAA,GAAmD,IAAA;AAAA,EACnD,OAAA,GAA0B,IAAA;AAAA,EAElC,eAAe,KAAA,EAA0E;AACvF,IAAA,IAAI,KAAA,YAAiB,cAAA,EAAgB,IAAA,CAAK,UAAA,GAAa,KAAA;AAAA,SAClD;AACH,MAAA,MAAM,MAAA,GAAS,cAAA,CAAe,QAAA,CAAS,KAAK,CAAA;AAC5C,MAAA,IAAI,MAAA,OAAa,UAAA,GAAa,MAAA;AAAA,IAChC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,qBACE,KAAA,EACuB;AACvB,IAAA,IAAI,KAAA,YAAiB,uBAAA,EAAyB,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAAA,SACjE;AACH,MAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,QAAA,CAAS,KAAK,CAAA;AACrD,MAAA,IAAI,MAAA,OAAa,gBAAA,GAAmB,MAAA;AAAA,IACtC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EASA,WAAA,CACE,aAAA,EACA,OAAA,EACA,IAAA,EACA,OAAA,EACuB;AACvB,IAAA,IAAI,yBAAyB,OAAA,EAAS;AACpC,MAAA,IAAA,CAAK,OAAA,GAAU,aAAA;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,SACJ,OAAA,KAAY,MAAA,IAAa,SAAS,MAAA,IAAa,OAAA,KAAY,SACvD,OAAA,CAAQ,QAAA,CAAS,EAAE,MAAA,EAAQ,aAAA,EAAe,SAAS,IAAA,EAAM,OAAA,EAAS,CAAA,GAClE,OAAA,CAAQ,SAAS,aAAa,CAAA;AACpC,IAAA,IAAI,MAAA,OAAa,OAAA,GAAU,MAAA;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAkC;AAChC,IAAA,IAAI,IAAA,CAAK,eAAe,IAAA,IAAQ,IAAA,CAAK,qBAAqB,IAAA,IAAQ,IAAA,CAAK,YAAY,IAAA,EAAM;AACvF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,eAAe,MAAA,CAAO,IAAA,CAAK,YAAY,IAAA,CAAK,gBAAA,EAAkB,KAAK,OAAO,CAAA;AAAA,EACnF;AAAA,EAEA,KAAA,GAAwB;AACtB,IAAA,MAAM,MAAA,GAAS,KAAK,QAAA,EAAS;AAC7B,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACpKA,IAAM,eAAA,GAAoD,OAAO,MAAA,CAAO;AAAA,EACtE,GAAA,EAAK,IAAA;AAAA,EACL,GAAA,EAAK,IAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,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","file":"index.cjs","sourcesContent":["/**\n * Configurable defaults that control locale-sensitive behaviour across all\n * primitive types. When not explicitly set, values fall back to safe Swedish\n * defaults (the .NET version derives them from `CultureInfo.CurrentCulture`,\n * which has no direct equivalent in standard JavaScript).\n *\n * Set properties at application startup or override per-request as needed.\n */\n\nconst DEFAULT_CULTURE = \"sv-SE\";\nconst DEFAULT_UI_CULTURE = \"sv-SE\";\nconst DEFAULT_COUNTRY = \"SE\";\nconst DEFAULT_CALLING_CODE = \"46\";\n\ninterface PrimitivesDefaultsState {\n culture: string;\n uiCulture: string;\n countryAlpha2Code: string;\n defaultCallingCode: string;\n}\n\nconst state: PrimitivesDefaultsState = {\n culture: DEFAULT_CULTURE,\n uiCulture: DEFAULT_UI_CULTURE,\n countryAlpha2Code: DEFAULT_COUNTRY,\n defaultCallingCode: DEFAULT_CALLING_CODE,\n};\n\n/**\n * Configurable global defaults for locale, UI language, and default country.\n *\n * These mirror the .NET `PrimitivesDefaults` static class. `culture` controls\n * formatting and casing (Swedish-aware character handling for `Å`/`Ä`/`Ö`),\n * `uiCulture` controls display-name language selection (Swedish vs English),\n * and `countryAlpha2Code` is used as the default ISO 3166-1 alpha-2 country\n * when no explicit country is supplied.\n */\nexport const PrimitivesDefaults = {\n /**\n * BCP-47 locale tag used for casing and number formatting.\n * Defaults to `'sv-SE'`.\n */\n get culture(): string {\n return state.culture;\n },\n set culture(value: string) {\n state.culture = value;\n },\n\n /**\n * BCP-47 locale tag used for display-name language selection.\n * Defaults to `'sv-SE'`.\n */\n get uiCulture(): string {\n return state.uiCulture;\n },\n set uiCulture(value: string) {\n state.uiCulture = value;\n },\n\n /**\n * Default ISO 3166-1 alpha-2 country code. Used by types like\n * `PhoneNumber` and `SwedishOrganizationIdentifierParser` when no explicit\n * country is supplied. Defaults to `'SE'`.\n */\n get countryAlpha2Code(): string {\n return state.countryAlpha2Code;\n },\n set countryAlpha2Code(value: string) {\n state.countryAlpha2Code = value;\n },\n\n /**\n * Default phone calling code (digits only, no `+`). Used by {@link PhoneNumber}\n * for inputs without an explicit country prefix. Defaults to `'46'` (Sweden).\n */\n get defaultCallingCode(): string {\n return state.defaultCallingCode;\n },\n set defaultCallingCode(value: string) {\n state.defaultCallingCode = value;\n },\n\n /**\n * `true` when {@link uiCulture} is Swedish (`sv` or `sv-*`).\n * Types use this to select between localized and English display names.\n */\n get useLocalizedDisplayNames(): boolean {\n const lang = state.uiCulture.toLowerCase().split(\"-\")[0];\n return lang === \"sv\";\n },\n\n /** Resets all overrides to the package defaults. */\n reset(): void {\n state.culture = DEFAULT_CULTURE;\n state.uiCulture = DEFAULT_UI_CULTURE;\n state.countryAlpha2Code = DEFAULT_COUNTRY;\n state.defaultCallingCode = DEFAULT_CALLING_CODE;\n },\n};\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\n\nconst MAX_INPUT_LENGTH = 50;\n\nexport interface ContinentFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A continent (`kontinent`) identified by its two-letter code, English name,\n * or Swedish name. Seven continents are recognized: Africa, Antarctica, Asia,\n * Europe, North America, Oceania, and South America.\n *\n * Sources:\n * - UN M49 Standard\n * - Datahub continent codes\n */\nexport class Continent {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Continent\",\n localizedName: \"Kontinent\",\n emoji: \"\\u{1F5FA}\\uFE0F\",\n sources: Object.freeze([\n \"https://unstats.un.org/unsd/methodology/m49/\",\n \"https://datahub.io/core/continent-codes\",\n ]),\n });\n\n static readonly Africa: Continent = new Continent(\"AF\", \"Africa\", \"Afrika\");\n static readonly Antarctica: Continent = new Continent(\"AN\", \"Antarctica\", \"Antarktis\");\n static readonly Asia: Continent = new Continent(\"AS\", \"Asia\", \"Asien\");\n static readonly Europe: Continent = new Continent(\"EU\", \"Europe\", \"Europa\");\n static readonly NorthAmerica: Continent = new Continent(\"NA\", \"North America\", \"Nordamerika\");\n static readonly Oceania: Continent = new Continent(\"OC\", \"Oceania\", \"Oceanien\");\n static readonly SouthAmerica: Continent = new Continent(\"SA\", \"South America\", \"Sydamerika\");\n\n /** All seven continents. */\n static readonly all: readonly Continent[] = Object.freeze([\n Continent.Africa,\n Continent.Antarctica,\n Continent.Asia,\n Continent.Europe,\n Continent.NorthAmerica,\n Continent.Oceania,\n Continent.SouthAmerica,\n ]);\n\n readonly code: string;\n readonly englishName: string;\n readonly localizedName: string;\n\n private constructor(code: string, englishName: string, localizedName: string) {\n this.code = code;\n this.englishName = englishName;\n this.localizedName = localizedName;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n get value(): string {\n return this.code;\n }\n\n static tryParse(input: string | null | undefined): Continent | null {\n if (input == null) return null;\n const trimmed = input.trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n const lower = trimmed.toLowerCase();\n return BY_KEY.get(lower) ?? null;\n }\n\n static parse(input: string): Continent {\n const r = Continent.tryParse(input);\n if (r === null) throw new Error(\"Unknown continent.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Continent.tryParse(input) !== null;\n }\n\n static format(input: string | null | undefined, options?: ContinentFormatOptions): string | null {\n const r = Continent.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: ContinentFormatOptions,\n ): string | null {\n const r = Continent.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Continent.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n equals(other: Continent | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n\n compareTo(other: Continent | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n}\n\nconst BY_KEY = (() => {\n const m = new Map<string, Continent>();\n for (const c of Continent.all) {\n m.set(c.code.toLowerCase(), c);\n m.set(c.englishName.toLowerCase(), c);\n m.set(c.localizedName.toLowerCase(), c);\n }\n return m;\n})();\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\n/**\n * The capital city of a country (`huvudstad`), with names in English, Swedish,\n * and the country's native language, plus its geographic coordinates.\n */\nexport class CountryCapital {\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly coordinate: GeoCoordinate;\n\n /** @internal */\n constructor(\n englishName: string,\n localizedName: string,\n nativeName: string,\n coordinate: GeoCoordinate,\n ) {\n this.englishName = englishName;\n this.localizedName = localizedName;\n this.nativeName = nativeName;\n this.coordinate = coordinate;\n }\n\n /** Capital city name in the current display language. */\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n toString(): string {\n return this.displayName;\n }\n}\n","/**\n * Shared input sanitization for text inputs across domain types.\n * Provides invisible-character stripping, whitespace normalization, and common\n * character-filtering helpers (digits-only, alphanumeric-only, collapse whitespace).\n *\n * Real-world inputs (e.g. from CRM/banking systems) commonly contain invisible\n * Unicode characters that break validation while being completely invisible in UIs\n * and logs. The most frequent offender is `U+202A` LEFT-TO-RIGHT EMBEDDING,\n * especially on values originating from RTL-language contexts (Arabic, Hebrew).\n * Other common contaminants include non-breaking spaces from web/PDF copy-paste,\n * null bytes from binary data, stray newlines from multi-line form fields,\n * and typographic (smart/curly) quotes from mobile keyboards and word processors.\n *\n * Equivalent of `Buildi.Primitives.InputSanitization` (internal in .NET).\n * Exposed via `internal/` and not re-exported from the public package entry.\n */\n\nconst FORMAT_OR_NOT_ASSIGNED = /[\\p{Cf}\\p{Cn}]/u;\nconst SPACE_SEPARATOR = /[\\p{Zs}\\p{Zl}\\p{Zp}]/u;\nconst CONTROL = /\\p{Cc}/u;\n\n/**\n * Strips invisible/non-printable characters, normalizes all whitespace variants\n * to ASCII space (`U+0020`), normalizes typographic single quotes to ASCII\n * apostrophe (`'`), and normalizes typographic and guillemet double quotes to\n * ASCII quotation mark (`\"`).\n */\nexport function sanitizeInput(input: string): string {\n let out = \"\";\n for (const c of input) {\n // Smart single quotes -> ASCII apostrophe.\n if (c === \"\\u2018\" || c === \"\\u2019\" || c === \"\\u201A\" || c === \"\\u201B\") {\n out += \"'\";\n continue;\n }\n // Smart and guillemet double quotes -> ASCII quotation mark.\n if (\n c === \"\\u201C\" ||\n c === \"\\u201D\" ||\n c === \"\\u201E\" ||\n c === \"\\u201F\" ||\n c === \"\\u00AB\" ||\n c === \"\\u00BB\"\n ) {\n out += '\"';\n continue;\n }\n\n if (FORMAT_OR_NOT_ASSIGNED.test(c)) {\n // Drop format characters (Cf) and unassigned code points (Cn).\n continue;\n }\n\n if (CONTROL.test(c)) {\n if (c === \"\\t\" || c === \"\\n\" || c === \"\\r\") out += \" \";\n continue;\n }\n\n if (SPACE_SEPARATOR.test(c)) {\n out += \" \";\n continue;\n }\n\n out += c;\n }\n return out;\n}\n\nconst WHITESPACE_RUN = /\\s+/g;\n\n/**\n * Sanitizes the input, trims, and collapses whitespace runs to a single space.\n * Returns an empty string when `input` is `null` or `undefined`.\n */\nexport function collapseWhitespace(input: string | null | undefined): string {\n if (input == null) return \"\";\n return sanitizeInput(input).trim().replace(WHITESPACE_RUN, \" \");\n}\n\n/** Keeps only ASCII digits (`0`-`9`), stripping everything else. */\nexport function keepDigits(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n }\n return out;\n}\n\n/**\n * Keeps only ASCII letters and digits, uppercasing letters.\n * Strips whitespace, hyphens, and all other non-alphanumeric characters.\n */\nexport function keepAsciiAlphanumericUppercase(input: string): string {\n let out = \"\";\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n if (c >= 0x30 && c <= 0x39) out += input[i];\n else if (c >= 0x41 && c <= 0x5a) out += input[i];\n else if (c >= 0x61 && c <= 0x7a) out += String.fromCharCode(c - 32);\n }\n return out;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n\nexport interface GeoCoordinateFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A geographic coordinate pair (latitude, longitude) in the WGS 84 reference\n * system (`geografisk koordinat`). Parsing accepts decimal degrees, degrees\n * with cardinal directions, DMS, and DDM formats. Swedish cardinal letters Ö\n * (east) and V (west) are accepted alongside E and W.\n */\nexport class GeoCoordinate {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Geographic Coordinate\",\n localizedName: \"Geografisk koordinat\",\n emoji: \"\\u{1F4CD}\",\n sources: Object.freeze([\n \"https://en.wikipedia.org/wiki/Geographic_coordinate_system\",\n \"https://epsg.io/4326\",\n ]),\n });\n\n readonly latitude: number;\n readonly longitude: number;\n\n private constructor(latitude: number, longitude: number) {\n this.latitude = latitude;\n this.longitude = longitude;\n }\n\n /** @internal */\n static _unsafe(latitude: number, longitude: number): GeoCoordinate {\n return new GeoCoordinate(latitude, longitude);\n }\n\n get latitudeDirection(): \"N\" | \"S\" {\n return this.latitude >= 0 ? \"N\" : \"S\";\n }\n\n get longitudeDirection(): \"E\" | \"W\" {\n return this.longitude >= 0 ? \"E\" : \"W\";\n }\n\n /** Creates a coordinate from explicit latitude and longitude values. */\n static create(latitude: number, longitude: number): GeoCoordinate {\n if (!Number.isFinite(latitude) || latitude < -90 || latitude > 90) {\n throw new RangeError(\"Latitude must be between -90 and 90.\");\n }\n if (!Number.isFinite(longitude) || longitude < -180 || longitude > 180) {\n throw new RangeError(\"Longitude must be between -180 and 180.\");\n }\n return GeoCoordinate._unsafe(latitude, longitude);\n }\n\n static tryParse(input: string | null | undefined): GeoCoordinate | null {\n if (input == null || input.trim() === \"\") return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > 200) return null;\n\n let m: RegExpMatchArray | null;\n\n m = sanitized.match(DECIMAL_DEGREES);\n if (m) return tryDecimal(m.groups!.lat!, m.groups!.lon!);\n\n m = sanitized.match(SPACE_SEPARATED);\n if (m) return tryDecimal(m.groups!.lat!, m.groups!.lon!);\n\n m = sanitized.match(DECIMAL_CARDINAL_SUFFIX);\n if (m) {\n return tryDecimalCardinal(\n m.groups!.lat!,\n m.groups!.latDir!,\n m.groups!.lon!,\n m.groups!.lonDir!,\n );\n }\n\n m = sanitized.match(CARDINAL_PREFIX);\n if (m) {\n return tryDecimalCardinal(\n m.groups!.lat!,\n m.groups!.latDir!,\n m.groups!.lon!,\n m.groups!.lonDir!,\n );\n }\n\n m = sanitized.match(DMS);\n if (m) return tryDms(m.groups!);\n\n m = sanitized.match(DDM);\n if (m) return tryDdm(m.groups!);\n\n return null;\n }\n\n static parse(input: string): GeoCoordinate {\n const r = GeoCoordinate.tryParse(input);\n if (r === null) throw new Error(\"Invalid geographic coordinate.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return GeoCoordinate.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: GeoCoordinateFormatOptions,\n ): string | null {\n const r = GeoCoordinate.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: GeoCoordinateFormatOptions,\n ): string | null {\n const r = GeoCoordinate.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && GeoCoordinate.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return `${formatNumber(this.latitude)}, ${formatNumber(this.longitude)}`;\n }\n\n toString(): string {\n return `${formatNumber(Math.abs(this.latitude))}°${this.latitudeDirection}, ${formatNumber(Math.abs(this.longitude))}°${this.longitudeDirection}`;\n }\n\n /** Returns the coordinate in degrees, minutes, and seconds, e.g. `59°19'45.5\"N, 18°4'7\"E`. */\n toDmsString(): string {\n const [latDeg, latMin, latSec] = toDmsParts(Math.abs(this.latitude));\n const [lonDeg, lonMin, lonSec] = toDmsParts(Math.abs(this.longitude));\n return `${latDeg}°${latMin}'${formatSeconds(latSec)}\"${this.latitudeDirection}, ${lonDeg}°${lonMin}'${formatSeconds(lonSec)}\"${this.longitudeDirection}`;\n }\n\n /** Distance in kilometers (Haversine) between two coordinates. */\n static distanceKilometers(a: GeoCoordinate, b: GeoCoordinate): number {\n return haversineKm(a, b);\n }\n\n /** Returns true if coordinates `a` and `b` are within `radiusKm` kilometers of each other. */\n static isWithinKilometers(a: GeoCoordinate, b: GeoCoordinate, radiusKm: number): boolean {\n return GeoCoordinate.distanceKilometers(a, b) <= radiusKm;\n }\n\n /** Distance in kilometers from this coordinate to `other`. */\n distanceKilometersTo(other: GeoCoordinate): number {\n return haversineKm(this, other);\n }\n\n /**\n * Returns true if `other` is within `radiusKm` kilometers of this\n * coordinate (inclusive).\n */\n isWithinKilometers(other: GeoCoordinate, radiusKm: number): boolean {\n return this.distanceKilometersTo(other) <= radiusKm;\n }\n\n equals(other: GeoCoordinate | null | undefined): boolean {\n return other != null && this.latitude === other.latitude && this.longitude === other.longitude;\n }\n}\n\n// --- Regexes ---\n\nconst DECIMAL_DEGREES =\n /^\\s*\\(?\\s*(?<lat>[+-]?\\d+(?:\\.\\d+)?)\\s*[,;]\\s*(?<lon>[+-]?\\d+(?:\\.\\d+)?)\\s*\\)?\\s*$/;\n\nconst SPACE_SEPARATED =\n /^\\s*\\(?\\s*(?<lat>[+-]?\\d+(?:\\.\\d+)?)\\s+(?<lon>[+-]?\\d+(?:\\.\\d+)?)\\s*\\)?\\s*$/;\n\nconst DECIMAL_CARDINAL_SUFFIX =\n /^\\s*\\(?\\s*(?<lat>\\d+(?:\\.\\d+)?)\\s*°?\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lon>\\d+(?:\\.\\d+)?)\\s*°?\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\nconst CARDINAL_PREFIX =\n /^\\s*\\(?\\s*(?<latDir>[NSns])\\s*(?<lat>\\d+(?:\\.\\d+)?)\\s*°?\\s*[,;\\s]\\s*(?<lonDir>[EWewÖöVv])\\s*(?<lon>\\d+(?:\\.\\d+)?)\\s*°?\\s*\\)?\\s*$/u;\n\nconst DMS =\n /^\\s*\\(?\\s*(?<latDeg>\\d+)\\s*°\\s*(?<latMin>\\d+)\\s*[′']\\s*(?<latSec>\\d+(?:\\.\\d+)?)\\s*[″\"]\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lonDeg>\\d+)\\s*°\\s*(?<lonMin>\\d+)\\s*[′']\\s*(?<lonSec>\\d+(?:\\.\\d+)?)\\s*[″\"]\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\nconst DDM =\n /^\\s*\\(?\\s*(?<latDeg>\\d+)\\s*°\\s*(?<latDecMin>\\d+(?:\\.\\d+)?)\\s*[′']\\s*(?<latDir>[NSns])\\s*[,;\\s]\\s*(?<lonDeg>\\d+)\\s*°\\s*(?<lonDecMin>\\d+(?:\\.\\d+)?)\\s*[′']\\s*(?<lonDir>[EWewÖöVv])\\s*\\)?\\s*$/u;\n\n// --- Helpers ---\n\nfunction tryDecimal(latStr: string, lonStr: string): GeoCoordinate | null {\n const lat = parseFloat(latStr);\n const lon = parseFloat(lonStr);\n if (!Number.isFinite(lat) || !Number.isFinite(lon)) return null;\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDecimalCardinal(\n latStr: string,\n latDir: string,\n lonStr: string,\n lonDir: string,\n): GeoCoordinate | null {\n const lat = applyLatDirection(parseFloat(latStr), latDir);\n const lon = applyLonDirection(parseFloat(lonStr), lonDir);\n if (!Number.isFinite(lat) || !Number.isFinite(lon)) return null;\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDms(g: { [key: string]: string }): GeoCoordinate | null {\n const latDeg = parseFloat(g.latDeg!);\n const latMin = parseFloat(g.latMin!);\n const latSec = parseFloat(g.latSec!);\n const lonDeg = parseFloat(g.lonDeg!);\n const lonMin = parseFloat(g.lonMin!);\n const lonSec = parseFloat(g.lonSec!);\n if (latMin >= 60 || latSec >= 60 || lonMin >= 60 || lonSec >= 60) return null;\n let lat = round8(latDeg + latMin / 60 + latSec / 3600);\n let lon = round8(lonDeg + lonMin / 60 + lonSec / 3600);\n lat = applyLatDirection(lat, g.latDir!);\n lon = applyLonDirection(lon, g.lonDir!);\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction tryDdm(g: { [key: string]: string }): GeoCoordinate | null {\n const latDeg = parseFloat(g.latDeg!);\n const latDecMin = parseFloat(g.latDecMin!);\n const lonDeg = parseFloat(g.lonDeg!);\n const lonDecMin = parseFloat(g.lonDecMin!);\n if (latDecMin >= 60 || lonDecMin >= 60) return null;\n let lat = round8(latDeg + latDecMin / 60);\n let lon = round8(lonDeg + lonDecMin / 60);\n lat = applyLatDirection(lat, g.latDir!);\n lon = applyLonDirection(lon, g.lonDir!);\n if (!isInRange(lat, lon)) return null;\n return GeoCoordinate._unsafe(lat, lon);\n}\n\nfunction applyLatDirection(lat: number, dir: string): number {\n return dir.toUpperCase() === \"S\" ? -lat : lat;\n}\n\nfunction applyLonDirection(lon: number, dir: string): number {\n const u = dir.toUpperCase();\n return u === \"W\" || u === \"V\" ? -lon : lon;\n}\n\nfunction isInRange(lat: number, lon: number): boolean {\n return lat >= -90 && lat <= 90 && lon >= -180 && lon <= 180;\n}\n\nfunction round8(v: number): number {\n return Math.round(v * 1e8) / 1e8;\n}\n\nfunction toDmsParts(dd: number): [number, number, number] {\n const degrees = Math.trunc(dd);\n const fracMinutes = (dd - degrees) * 60;\n const minutes = Math.trunc(fracMinutes);\n const seconds = Math.round((fracMinutes - minutes) * 600) / 10;\n return [degrees, minutes, seconds];\n}\n\nfunction formatNumber(value: number): string {\n // Match C# \"G\" format on a double: minimal representation, no trailing zeros.\n // For our use cases this matches `value.toString()` in JS.\n return value.toString();\n}\n\nfunction formatSeconds(seconds: number): string {\n // Match C# \"0.#\" format: drop trailing zero after the decimal point.\n if (Number.isInteger(seconds)) return seconds.toString();\n return seconds.toString().replace(/(\\.\\d*?)0+$/, \"$1\");\n}\n\nfunction haversineKm(a: GeoCoordinate, b: GeoCoordinate): number {\n const R = 6371;\n const dLat = toRadians(b.latitude - a.latitude);\n const dLon = toRadians(b.longitude - a.longitude);\n const lat1 = toRadians(a.latitude);\n const lat2 = toRadians(b.latitude);\n const h = Math.sin(dLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) ** 2;\n return R * 2 * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h));\n}\n\nfunction toRadians(degrees: number): number {\n return degrees * (Math.PI / 180);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n\n/** Text direction for a writing system. */\nexport const TextDirection = {\n LeftToRight: \"LeftToRight\",\n RightToLeft: \"RightToLeft\",\n} as const;\nexport type TextDirection = (typeof TextDirection)[keyof typeof TextDirection];\n\n/** Primary writing script / writing system used by a language. */\nexport const WritingScript = {\n Unknown: \"Unknown\",\n Latin: \"Latin\",\n Cyrillic: \"Cyrillic\",\n Arabic: \"Arabic\",\n Greek: \"Greek\",\n Hebrew: \"Hebrew\",\n Devanagari: \"Devanagari\",\n Bengali: \"Bengali\",\n Gurmukhi: \"Gurmukhi\",\n Gujarati: \"Gujarati\",\n Oriya: \"Oriya\",\n Tamil: \"Tamil\",\n Telugu: \"Telugu\",\n Kannada: \"Kannada\",\n Malayalam: \"Malayalam\",\n Sinhala: \"Sinhala\",\n Thai: \"Thai\",\n Lao: \"Lao\",\n Tibetan: \"Tibetan\",\n Myanmar: \"Myanmar\",\n Georgian: \"Georgian\",\n Hangul: \"Hangul\",\n Ethiopic: \"Ethiopic\",\n Cherokee: \"Cherokee\",\n Canadian: \"Canadian\",\n Khmer: \"Khmer\",\n Mongolian: \"Mongolian\",\n Han: \"Han\",\n Armenian: \"Armenian\",\n Thaana: \"Thaana\",\n} as const;\nexport type WritingScript = (typeof WritingScript)[keyof typeof WritingScript];\n\nconst MAX_INPUT_LENGTH = 100;\n\nexport interface LanguageFormatOptions {\n fallbackToTrimmedInputWhenInvalid?: boolean;\n}\n\n/**\n * A language (`språk`) identified by its ISO 639-1 two-letter code, ISO 639-2/T\n * three-letter code, English name, Swedish name, or native name (endonym).\n */\nexport class Language {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Language\",\n localizedName: \"Språk\",\n emoji: \"\\u{1F5E3}\\uFE0F\",\n sources: Object.freeze([\n \"https://www.loc.gov/standards/iso639-2/php/code_list.php\",\n \"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\",\n \"https://iso639-3.sil.org/\",\n ]),\n });\n\n readonly alpha2Code: string;\n readonly alpha3Code: string;\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly script: WritingScript;\n readonly direction: TextDirection;\n\n private constructor(\n alpha2: string,\n alpha3: string,\n en: string,\n sv: string,\n native: string,\n script: WritingScript,\n direction: TextDirection,\n ) {\n this.alpha2Code = alpha2;\n this.alpha3Code = alpha3;\n this.englishName = en;\n this.localizedName = sv;\n this.nativeName = native;\n this.script = script;\n this.direction = direction;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n get value(): string {\n return this.alpha2Code;\n }\n\n /** @internal Used by Country and other types. */\n static _create(\n alpha2: string,\n alpha3: string,\n en: string,\n sv: string,\n native: string,\n script: WritingScript,\n direction: TextDirection = TextDirection.LeftToRight,\n ): Language {\n return new Language(alpha2, alpha3, en, sv, native, script, direction);\n }\n\n static tryParse(input: string | null | undefined): Language | null {\n if (input == null || input.trim() === \"\") return null;\n const trimmed = sanitizeInput(input).trim();\n if (trimmed.length === 0 || trimmed.length > MAX_INPUT_LENGTH) return null;\n const lower = trimmed.toLowerCase();\n return BY_KEY.get(lower) ?? null;\n }\n\n static parse(input: string): Language {\n const r = Language.tryParse(input);\n if (r === null) throw new Error(\"Unknown language.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Language.tryParse(input) !== null;\n }\n\n static format(input: string | null | undefined, options?: LanguageFormatOptions): string | null {\n const r = Language.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: LanguageFormatOptions,\n ): string | null {\n const r = Language.tryParse(input);\n if (r) return r.alpha2Code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Language.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.alpha2Code;\n }\n\n toDisplayString(): string {\n return this.displayName;\n }\n\n toEnglishString(): string {\n return this.englishName;\n }\n\n toNativeString(): string {\n return this.nativeName;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n equals(other: Language | null | undefined): boolean {\n return other != null && this.alpha2Code === other.alpha2Code;\n }\n\n compareTo(other: Language | null | undefined): number {\n if (other == null) return 1;\n return this.alpha2Code < other.alpha2Code ? -1 : this.alpha2Code > other.alpha2Code ? 1 : 0;\n }\n\n /** All recognized ISO 639-1 languages. */\n static get all(): readonly Language[] {\n return ALL;\n }\n\n // Frequently used language constants — populated below ALL.\n static readonly Afrikaans: Language;\n static readonly Albanian: Language;\n static readonly Arabic: Language;\n static readonly Bulgarian: Language;\n static readonly Catalan: Language;\n static readonly Chinese: Language;\n static readonly Croatian: Language;\n static readonly Czech: Language;\n static readonly Danish: Language;\n static readonly Dutch: Language;\n static readonly English: Language;\n static readonly Estonian: Language;\n static readonly Faroese: Language;\n static readonly Finnish: Language;\n static readonly French: Language;\n static readonly German: Language;\n static readonly Greek: Language;\n static readonly Hindi: Language;\n static readonly Hungarian: Language;\n static readonly Icelandic: Language;\n static readonly Italian: Language;\n static readonly Japanese: Language;\n static readonly Korean: Language;\n static readonly Latvian: Language;\n static readonly Lithuanian: Language;\n static readonly NorthernSami: Language;\n static readonly Norwegian: Language;\n static readonly NorwegianBokmal: Language;\n static readonly NorwegianNynorsk: Language;\n static readonly Polish: Language;\n static readonly Portuguese: Language;\n static readonly Romanian: Language;\n static readonly Russian: Language;\n static readonly Slovak: Language;\n static readonly Slovenian: Language;\n static readonly Spanish: Language;\n static readonly Swahili: Language;\n static readonly Swedish: Language;\n static readonly Turkish: Language;\n static readonly Ukrainian: Language;\n}\n\nconst L = Language._create;\n\nconst ALL: readonly Language[] = Object.freeze([\n L(\"aa\", \"aar\", \"Afar\", \"Afar\", \"Afaraf\", WritingScript.Latin),\n L(\"ab\", \"abk\", \"Abkhazian\", \"Abchaziska\", \"Аҧсуа\", WritingScript.Cyrillic),\n L(\"af\", \"afr\", \"Afrikaans\", \"Afrikaans\", \"Afrikaans\", WritingScript.Latin),\n L(\"ak\", \"aka\", \"Akan\", \"Akan\", \"Akan\", WritingScript.Latin),\n L(\"am\", \"amh\", \"Amharic\", \"Amhariska\", \"አማርኛ\", WritingScript.Ethiopic),\n L(\"an\", \"arg\", \"Aragonese\", \"Aragonesiska\", \"Aragonés\", WritingScript.Latin),\n L(\"ar\", \"ara\", \"Arabic\", \"Arabiska\", \"العربية\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"as\", \"asm\", \"Assamese\", \"Assamesiska\", \"অসমীয়া\", WritingScript.Bengali),\n L(\"av\", \"ava\", \"Avaric\", \"Avariska\", \"Авар\", WritingScript.Cyrillic),\n L(\"ay\", \"aym\", \"Aymara\", \"Aymara\", \"Aymar\", WritingScript.Latin),\n L(\"az\", \"aze\", \"Azerbaijani\", \"Azerbajdzjanska\", \"Azərbaycan\", WritingScript.Latin),\n L(\"ba\", \"bak\", \"Bashkir\", \"Basjkiriska\", \"Башҡорт\", WritingScript.Cyrillic),\n L(\"be\", \"bel\", \"Belarusian\", \"Vitryska\", \"Беларуская\", WritingScript.Cyrillic),\n L(\"bg\", \"bul\", \"Bulgarian\", \"Bulgariska\", \"Български\", WritingScript.Cyrillic),\n L(\"bh\", \"bih\", \"Bihari\", \"Bihari\", \"भोजपुरी\", WritingScript.Devanagari),\n L(\"bi\", \"bis\", \"Bislama\", \"Bislama\", \"Bislama\", WritingScript.Latin),\n L(\"bm\", \"bam\", \"Bambara\", \"Bambara\", \"Bamanankan\", WritingScript.Latin),\n L(\"bn\", \"ben\", \"Bengali\", \"Bengali\", \"বাংলা\", WritingScript.Bengali),\n L(\"bo\", \"bod\", \"Tibetan\", \"Tibetanska\", \"བོད་ཡིག\", WritingScript.Tibetan),\n L(\"br\", \"bre\", \"Breton\", \"Bretonska\", \"Brezhoneg\", WritingScript.Latin),\n L(\"bs\", \"bos\", \"Bosnian\", \"Bosniska\", \"Bosanski\", WritingScript.Latin),\n L(\"ca\", \"cat\", \"Catalan\", \"Katalanska\", \"Català\", WritingScript.Latin),\n L(\"ce\", \"che\", \"Chechen\", \"Tjetjenska\", \"Нохчийн\", WritingScript.Cyrillic),\n L(\"ch\", \"cha\", \"Chamorro\", \"Chamorro\", \"Chamoru\", WritingScript.Latin),\n L(\"co\", \"cos\", \"Corsican\", \"Korsikanska\", \"Corsu\", WritingScript.Latin),\n L(\"cr\", \"cre\", \"Cree\", \"Cree\", \"ᓀᐦᐃᔭᐍᐏᐣ\", WritingScript.Canadian),\n L(\"cs\", \"ces\", \"Czech\", \"Tjeckiska\", \"Čeština\", WritingScript.Latin),\n L(\"cu\", \"chu\", \"Church Slavonic\", \"Kyrkoslaviska\", \"Словѣньскъ\", WritingScript.Cyrillic),\n L(\"cv\", \"chv\", \"Chuvash\", \"Tjuvasjiska\", \"Чӑваш\", WritingScript.Cyrillic),\n L(\"cy\", \"cym\", \"Welsh\", \"Walesiska\", \"Cymraeg\", WritingScript.Latin),\n L(\"da\", \"dan\", \"Danish\", \"Danska\", \"Dansk\", WritingScript.Latin),\n L(\"de\", \"deu\", \"German\", \"Tyska\", \"Deutsch\", WritingScript.Latin),\n L(\"dv\", \"div\", \"Divehi\", \"Divehi\", \"ދިވެހި\", WritingScript.Thaana, TextDirection.RightToLeft),\n L(\"dz\", \"dzo\", \"Dzongkha\", \"Dzongkha\", \"རྫོང་ཁ\", WritingScript.Tibetan),\n L(\"ee\", \"ewe\", \"Ewe\", \"Ewe\", \"Eʋegbe\", WritingScript.Latin),\n L(\"el\", \"ell\", \"Greek\", \"Grekiska\", \"Ελληνικά\", WritingScript.Greek),\n L(\"en\", \"eng\", \"English\", \"Engelska\", \"English\", WritingScript.Latin),\n L(\"eo\", \"epo\", \"Esperanto\", \"Esperanto\", \"Esperanto\", WritingScript.Latin),\n L(\"es\", \"spa\", \"Spanish\", \"Spanska\", \"Español\", WritingScript.Latin),\n L(\"et\", \"est\", \"Estonian\", \"Estniska\", \"Eesti\", WritingScript.Latin),\n L(\"eu\", \"eus\", \"Basque\", \"Baskiska\", \"Euskara\", WritingScript.Latin),\n L(\"fa\", \"fas\", \"Persian\", \"Persiska\", \"فارسی\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"ff\", \"ful\", \"Fulah\", \"Fulani\", \"Fulfulde\", WritingScript.Latin),\n L(\"fi\", \"fin\", \"Finnish\", \"Finska\", \"Suomi\", WritingScript.Latin),\n L(\"fj\", \"fij\", \"Fijian\", \"Fijianska\", \"Vosa Vakaviti\", WritingScript.Latin),\n L(\"fo\", \"fao\", \"Faroese\", \"Färöiska\", \"Føroyskt\", WritingScript.Latin),\n L(\"fr\", \"fra\", \"French\", \"Franska\", \"Français\", WritingScript.Latin),\n L(\"fy\", \"fry\", \"Western Frisian\", \"Frisiska\", \"Frysk\", WritingScript.Latin),\n L(\"ga\", \"gle\", \"Irish\", \"Iriska\", \"Gaeilge\", WritingScript.Latin),\n L(\"gd\", \"gla\", \"Scottish Gaelic\", \"Skotsk gaeliska\", \"Gàidhlig\", WritingScript.Latin),\n L(\"gl\", \"glg\", \"Galician\", \"Galiciska\", \"Galego\", WritingScript.Latin),\n L(\"gn\", \"grn\", \"Guarani\", \"Guaraní\", \"Avañe'ẽ\", WritingScript.Latin),\n L(\"gu\", \"guj\", \"Gujarati\", \"Gujarati\", \"ગુજરાતી\", WritingScript.Gujarati),\n L(\"gv\", \"glv\", \"Manx\", \"Manx\", \"Gaelg\", WritingScript.Latin),\n L(\"ha\", \"hau\", \"Hausa\", \"Hausa\", \"Hausa\", WritingScript.Latin),\n L(\"he\", \"heb\", \"Hebrew\", \"Hebreiska\", \"עברית\", WritingScript.Hebrew, TextDirection.RightToLeft),\n L(\"hi\", \"hin\", \"Hindi\", \"Hindi\", \"हिन्दी\", WritingScript.Devanagari),\n L(\"ho\", \"hmo\", \"Hiri Motu\", \"Hiri Motu\", \"Hiri Motu\", WritingScript.Latin),\n L(\"hr\", \"hrv\", \"Croatian\", \"Kroatiska\", \"Hrvatski\", WritingScript.Latin),\n L(\"ht\", \"hat\", \"Haitian Creole\", \"Haitisk kreol\", \"Kreyòl Ayisyen\", WritingScript.Latin),\n L(\"hu\", \"hun\", \"Hungarian\", \"Ungerska\", \"Magyar\", WritingScript.Latin),\n L(\"hy\", \"hye\", \"Armenian\", \"Armeniska\", \"Հայերեն\", WritingScript.Armenian),\n L(\"ia\", \"ina\", \"Interlingua\", \"Interlingua\", \"Interlingua\", WritingScript.Latin),\n L(\"id\", \"ind\", \"Indonesian\", \"Indonesiska\", \"Bahasa Indonesia\", WritingScript.Latin),\n L(\"ie\", \"ile\", \"Interlingue\", \"Interlingue\", \"Interlingue\", WritingScript.Latin),\n L(\"ig\", \"ibo\", \"Igbo\", \"Igbo\", \"Igbo\", WritingScript.Latin),\n L(\"ii\", \"iii\", \"Sichuan Yi\", \"Yi\", \"ꆈꌠ꒡\", WritingScript.Unknown),\n L(\"ik\", \"ipk\", \"Inupiaq\", \"Inupiaq\", \"Iñupiaq\", WritingScript.Latin),\n L(\"io\", \"ido\", \"Ido\", \"Ido\", \"Ido\", WritingScript.Latin),\n L(\"is\", \"isl\", \"Icelandic\", \"Isländska\", \"Íslenska\", WritingScript.Latin),\n L(\"it\", \"ita\", \"Italian\", \"Italienska\", \"Italiano\", WritingScript.Latin),\n L(\"iu\", \"iku\", \"Inuktitut\", \"Inuktitut\", \"ᐃᓄᒃᑎᑐᑦ\", WritingScript.Canadian),\n L(\"ja\", \"jpn\", \"Japanese\", \"Japanska\", \"日本語\", WritingScript.Han),\n L(\"jv\", \"jav\", \"Javanese\", \"Javanesiska\", \"Basa Jawa\", WritingScript.Latin),\n L(\"ka\", \"kat\", \"Georgian\", \"Georgiska\", \"ქართული\", WritingScript.Georgian),\n L(\"kg\", \"kon\", \"Kongo\", \"Kikongo\", \"KiKongo\", WritingScript.Latin),\n L(\"ki\", \"kik\", \"Kikuyu\", \"Kikuyu\", \"Gĩkũyũ\", WritingScript.Latin),\n L(\"kj\", \"kua\", \"Kuanyama\", \"Kuanyama\", \"Kuanyama\", WritingScript.Latin),\n L(\"kk\", \"kaz\", \"Kazakh\", \"Kazakiska\", \"Қазақша\", WritingScript.Cyrillic),\n L(\"kl\", \"kal\", \"Kalaallisut\", \"Grönländska\", \"Kalaallisut\", WritingScript.Latin),\n L(\"km\", \"khm\", \"Khmer\", \"Khmer\", \"ភាសាខ្មែរ\", WritingScript.Khmer),\n L(\"kn\", \"kan\", \"Kannada\", \"Kannada\", \"ಕನ್ನಡ\", WritingScript.Kannada),\n L(\"ko\", \"kor\", \"Korean\", \"Koreanska\", \"한국어\", WritingScript.Hangul),\n L(\"kr\", \"kau\", \"Kanuri\", \"Kanuri\", \"Kanuri\", WritingScript.Latin),\n L(\n \"ks\",\n \"kas\",\n \"Kashmiri\",\n \"Kashmiri\",\n \"कश्मीरी\",\n WritingScript.Arabic,\n TextDirection.RightToLeft,\n ),\n L(\"ku\", \"kur\", \"Kurdish\", \"Kurdiska\", \"Kurdî\", WritingScript.Latin),\n L(\"kv\", \"kom\", \"Komi\", \"Komi\", \"Коми\", WritingScript.Cyrillic),\n L(\"kw\", \"cor\", \"Cornish\", \"Korniska\", \"Kernewek\", WritingScript.Latin),\n L(\"ky\", \"kir\", \"Kyrgyz\", \"Kirgiziska\", \"Кыргызча\", WritingScript.Cyrillic),\n L(\"la\", \"lat\", \"Latin\", \"Latin\", \"Latina\", WritingScript.Latin),\n L(\"lb\", \"ltz\", \"Luxembourgish\", \"Luxemburgiska\", \"Lëtzebuergesch\", WritingScript.Latin),\n L(\"lg\", \"lug\", \"Ganda\", \"Luganda\", \"Luganda\", WritingScript.Latin),\n L(\"li\", \"lim\", \"Limburgish\", \"Limburgiska\", \"Limburgs\", WritingScript.Latin),\n L(\"ln\", \"lin\", \"Lingala\", \"Lingala\", \"Lingála\", WritingScript.Latin),\n L(\"lo\", \"lao\", \"Lao\", \"Laotiska\", \"ພາສາລາວ\", WritingScript.Lao),\n L(\"lt\", \"lit\", \"Lithuanian\", \"Litauiska\", \"Lietuvių\", WritingScript.Latin),\n L(\"lu\", \"lub\", \"Luba-Katanga\", \"Luba-Katanga\", \"Kiluba\", WritingScript.Latin),\n L(\"lv\", \"lav\", \"Latvian\", \"Lettiska\", \"Latviešu\", WritingScript.Latin),\n L(\"mg\", \"mlg\", \"Malagasy\", \"Malagassiska\", \"Malagasy\", WritingScript.Latin),\n L(\"mh\", \"mah\", \"Marshallese\", \"Marshallesiska\", \"Kajin M̧ajeļ\", WritingScript.Latin),\n L(\"mi\", \"mri\", \"Maori\", \"Maori\", \"Te Reo Māori\", WritingScript.Latin),\n L(\"mk\", \"mkd\", \"Macedonian\", \"Makedonska\", \"Македонски\", WritingScript.Cyrillic),\n L(\"ml\", \"mal\", \"Malayalam\", \"Malayalam\", \"മലയാളം\", WritingScript.Malayalam),\n L(\"mn\", \"mon\", \"Mongolian\", \"Mongoliska\", \"Монгол\", WritingScript.Cyrillic),\n L(\"mr\", \"mar\", \"Marathi\", \"Marathi\", \"मराठी\", WritingScript.Devanagari),\n L(\"ms\", \"msa\", \"Malay\", \"Malajiska\", \"Bahasa Melayu\", WritingScript.Latin),\n L(\"mt\", \"mlt\", \"Maltese\", \"Maltesiska\", \"Malti\", WritingScript.Latin),\n L(\"my\", \"mya\", \"Burmese\", \"Burmesiska\", \"မြန်မာစာ\", WritingScript.Myanmar),\n L(\"na\", \"nau\", \"Nauru\", \"Nauru\", \"Dorerin Naoero\", WritingScript.Latin),\n L(\"nb\", \"nob\", \"Norwegian Bokmål\", \"Norska (bokmål)\", \"Norsk bokmål\", WritingScript.Latin),\n L(\"nd\", \"nde\", \"Northern Ndebele\", \"Nordndebele\", \"isiNdebele\", WritingScript.Latin),\n L(\"ne\", \"nep\", \"Nepali\", \"Nepalesiska\", \"नेपाली\", WritingScript.Devanagari),\n L(\"ng\", \"ndo\", \"Ndonga\", \"Ndonga\", \"Owambo\", WritingScript.Latin),\n L(\"nl\", \"nld\", \"Dutch\", \"Nederländska\", \"Nederlands\", WritingScript.Latin),\n L(\"nn\", \"nno\", \"Norwegian Nynorsk\", \"Norska (nynorsk)\", \"Norsk nynorsk\", WritingScript.Latin),\n L(\"no\", \"nor\", \"Norwegian\", \"Norska\", \"Norsk\", WritingScript.Latin),\n L(\"nr\", \"nbl\", \"Southern Ndebele\", \"Sydndebele\", \"isiNdebele\", WritingScript.Latin),\n L(\"nv\", \"nav\", \"Navajo\", \"Navajo\", \"Diné Bizaad\", WritingScript.Latin),\n L(\"ny\", \"nya\", \"Chichewa\", \"Chichewa\", \"Chichewa\", WritingScript.Latin),\n L(\"oc\", \"oci\", \"Occitan\", \"Occitanska\", \"Occitan\", WritingScript.Latin),\n L(\"oj\", \"oji\", \"Ojibwa\", \"Ojibwa\", \"ᐊᓂᔑᓈᐯᒧᐎᓐ\", WritingScript.Canadian),\n L(\"om\", \"orm\", \"Oromo\", \"Oromo\", \"Afaan Oromoo\", WritingScript.Latin),\n L(\"or\", \"ori\", \"Oriya\", \"Oriya\", \"ଓଡ଼ିଆ\", WritingScript.Oriya),\n L(\"os\", \"oss\", \"Ossetian\", \"Ossetiska\", \"Ирон\", WritingScript.Cyrillic),\n L(\"pa\", \"pan\", \"Punjabi\", \"Punjabi\", \"ਪੰਜਾਬੀ\", WritingScript.Gurmukhi),\n L(\"pi\", \"pli\", \"Pali\", \"Pali\", \"पालि\", WritingScript.Devanagari),\n L(\"pl\", \"pol\", \"Polish\", \"Polska\", \"Polski\", WritingScript.Latin),\n L(\"ps\", \"pus\", \"Pashto\", \"Pashto\", \"پښتو\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"pt\", \"por\", \"Portuguese\", \"Portugisiska\", \"Português\", WritingScript.Latin),\n L(\"qu\", \"que\", \"Quechua\", \"Quechua\", \"Runa Simi\", WritingScript.Latin),\n L(\"rm\", \"roh\", \"Romansh\", \"Rätoromanska\", \"Rumantsch\", WritingScript.Latin),\n L(\"rn\", \"run\", \"Rundi\", \"Kirundi\", \"Ikirundi\", WritingScript.Latin),\n L(\"ro\", \"ron\", \"Romanian\", \"Rumänska\", \"Română\", WritingScript.Latin),\n L(\"ru\", \"rus\", \"Russian\", \"Ryska\", \"Русский\", WritingScript.Cyrillic),\n L(\"rw\", \"kin\", \"Kinyarwanda\", \"Kinyarwanda\", \"Ikinyarwanda\", WritingScript.Latin),\n L(\"sa\", \"san\", \"Sanskrit\", \"Sanskrit\", \"संस्कृतम्\", WritingScript.Devanagari),\n L(\"sc\", \"srd\", \"Sardinian\", \"Sardiska\", \"Sardu\", WritingScript.Latin),\n L(\"sd\", \"snd\", \"Sindhi\", \"Sindhi\", \"سنڌي\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"se\", \"sme\", \"Northern Sami\", \"Nordsamiska\", \"Davvisámegiella\", WritingScript.Latin),\n L(\"sg\", \"sag\", \"Sango\", \"Sango\", \"Yângâ tî Sängö\", WritingScript.Latin),\n L(\"si\", \"sin\", \"Sinhala\", \"Singalesiska\", \"සිංහල\", WritingScript.Sinhala),\n L(\"sk\", \"slk\", \"Slovak\", \"Slovakiska\", \"Slovenčina\", WritingScript.Latin),\n L(\"sl\", \"slv\", \"Slovenian\", \"Slovenska\", \"Slovenščina\", WritingScript.Latin),\n L(\"sm\", \"smo\", \"Samoan\", \"Samoanska\", \"Gagana Sāmoa\", WritingScript.Latin),\n L(\"sn\", \"sna\", \"Shona\", \"Shona\", \"ChiShona\", WritingScript.Latin),\n L(\"so\", \"som\", \"Somali\", \"Somaliska\", \"Soomaali\", WritingScript.Latin),\n L(\"sq\", \"sqi\", \"Albanian\", \"Albanska\", \"Shqip\", WritingScript.Latin),\n L(\"sr\", \"srp\", \"Serbian\", \"Serbiska\", \"Српски\", WritingScript.Cyrillic),\n L(\"ss\", \"ssw\", \"Swati\", \"Swati\", \"SiSwati\", WritingScript.Latin),\n L(\"st\", \"sot\", \"Southern Sotho\", \"Sotho\", \"Sesotho\", WritingScript.Latin),\n L(\"su\", \"sun\", \"Sundanese\", \"Sundanesiska\", \"Basa Sunda\", WritingScript.Latin),\n L(\"sv\", \"swe\", \"Swedish\", \"Svenska\", \"Svenska\", WritingScript.Latin),\n L(\"sw\", \"swa\", \"Swahili\", \"Swahili\", \"Kiswahili\", WritingScript.Latin),\n L(\"ta\", \"tam\", \"Tamil\", \"Tamil\", \"தமிழ்\", WritingScript.Tamil),\n L(\"te\", \"tel\", \"Telugu\", \"Telugu\", \"తెలుగు\", WritingScript.Telugu),\n L(\"tg\", \"tgk\", \"Tajik\", \"Tadzjikiska\", \"Тоҷикӣ\", WritingScript.Cyrillic),\n L(\"th\", \"tha\", \"Thai\", \"Thailändska\", \"ไทย\", WritingScript.Thai),\n L(\"ti\", \"tir\", \"Tigrinya\", \"Tigrinja\", \"ትግርኛ\", WritingScript.Ethiopic),\n L(\"tk\", \"tuk\", \"Turkmen\", \"Turkmeniska\", \"Türkmen\", WritingScript.Latin),\n L(\"tl\", \"tgl\", \"Tagalog\", \"Tagalog\", \"Tagalog\", WritingScript.Latin),\n L(\"tn\", \"tsn\", \"Tswana\", \"Tswana\", \"Setswana\", WritingScript.Latin),\n L(\"to\", \"ton\", \"Tongan\", \"Tonganska\", \"Lea Faka-Tonga\", WritingScript.Latin),\n L(\"tr\", \"tur\", \"Turkish\", \"Turkiska\", \"Türkçe\", WritingScript.Latin),\n L(\"ts\", \"tso\", \"Tsonga\", \"Tsonga\", \"Xitsonga\", WritingScript.Latin),\n L(\"tt\", \"tat\", \"Tatar\", \"Tatariska\", \"Татар\", WritingScript.Cyrillic),\n L(\"tw\", \"twi\", \"Twi\", \"Twi\", \"Twi\", WritingScript.Latin),\n L(\"ty\", \"tah\", \"Tahitian\", \"Tahitiska\", \"Reo Tahiti\", WritingScript.Latin),\n L(\n \"ug\",\n \"uig\",\n \"Uyghur\",\n \"Uiguriska\",\n \"ئۇيغۇرچە\",\n WritingScript.Arabic,\n TextDirection.RightToLeft,\n ),\n L(\"uk\", \"ukr\", \"Ukrainian\", \"Ukrainska\", \"Українська\", WritingScript.Cyrillic),\n L(\"ur\", \"urd\", \"Urdu\", \"Urdu\", \"اردو\", WritingScript.Arabic, TextDirection.RightToLeft),\n L(\"uz\", \"uzb\", \"Uzbek\", \"Uzbekiska\", \"Oʻzbek\", WritingScript.Latin),\n L(\"ve\", \"ven\", \"Venda\", \"Venda\", \"Tshivenḓa\", WritingScript.Latin),\n L(\"vi\", \"vie\", \"Vietnamese\", \"Vietnamesiska\", \"Tiếng Việt\", WritingScript.Latin),\n L(\"vo\", \"vol\", \"Volapük\", \"Volapük\", \"Volapük\", WritingScript.Latin),\n L(\"wa\", \"wln\", \"Walloon\", \"Vallonska\", \"Walon\", WritingScript.Latin),\n L(\"wo\", \"wol\", \"Wolof\", \"Wolof\", \"Wollof\", WritingScript.Latin),\n L(\"xh\", \"xho\", \"Xhosa\", \"Xhosa\", \"isiXhosa\", WritingScript.Latin),\n L(\"yi\", \"yid\", \"Yiddish\", \"Jiddisch\", \"ייִדיש\", WritingScript.Hebrew, TextDirection.RightToLeft),\n L(\"yo\", \"yor\", \"Yoruba\", \"Yoruba\", \"Yorùbá\", WritingScript.Latin),\n L(\"za\", \"zha\", \"Zhuang\", \"Zhuang\", \"Saɯ cueŋƅ\", WritingScript.Latin),\n L(\"zh\", \"zho\", \"Chinese\", \"Kinesiska\", \"中文\", WritingScript.Han),\n L(\"zu\", \"zul\", \"Zulu\", \"Zulu\", \"isiZulu\", WritingScript.Latin),\n]);\n\nconst BY_KEY = (() => {\n const m = new Map<string, Language>();\n for (const lang of ALL) {\n m.set(lang.alpha2Code, lang);\n m.set(lang.alpha3Code, lang);\n m.set(lang.englishName.toLowerCase(), lang);\n if (!m.has(lang.localizedName.toLowerCase())) {\n m.set(lang.localizedName.toLowerCase(), lang);\n }\n if (\n lang.nativeName.toLowerCase() !== lang.englishName.toLowerCase() &&\n !m.has(lang.nativeName.toLowerCase())\n ) {\n m.set(lang.nativeName.toLowerCase(), lang);\n }\n }\n return m;\n})();\n\nconst byA2 = (a2: string) => BY_KEY.get(a2)!;\n\n(Language as { Afrikaans: Language }).Afrikaans = byA2(\"af\");\n(Language as { Albanian: Language }).Albanian = byA2(\"sq\");\n(Language as { Arabic: Language }).Arabic = byA2(\"ar\");\n(Language as { Bulgarian: Language }).Bulgarian = byA2(\"bg\");\n(Language as { Catalan: Language }).Catalan = byA2(\"ca\");\n(Language as { Chinese: Language }).Chinese = byA2(\"zh\");\n(Language as { Croatian: Language }).Croatian = byA2(\"hr\");\n(Language as { Czech: Language }).Czech = byA2(\"cs\");\n(Language as { Danish: Language }).Danish = byA2(\"da\");\n(Language as { Dutch: Language }).Dutch = byA2(\"nl\");\n(Language as { English: Language }).English = byA2(\"en\");\n(Language as { Estonian: Language }).Estonian = byA2(\"et\");\n(Language as { Faroese: Language }).Faroese = byA2(\"fo\");\n(Language as { Finnish: Language }).Finnish = byA2(\"fi\");\n(Language as { French: Language }).French = byA2(\"fr\");\n(Language as { German: Language }).German = byA2(\"de\");\n(Language as { Greek: Language }).Greek = byA2(\"el\");\n(Language as { Hindi: Language }).Hindi = byA2(\"hi\");\n(Language as { Hungarian: Language }).Hungarian = byA2(\"hu\");\n(Language as { Icelandic: Language }).Icelandic = byA2(\"is\");\n(Language as { Italian: Language }).Italian = byA2(\"it\");\n(Language as { Japanese: Language }).Japanese = byA2(\"ja\");\n(Language as { Korean: Language }).Korean = byA2(\"ko\");\n(Language as { Latvian: Language }).Latvian = byA2(\"lv\");\n(Language as { Lithuanian: Language }).Lithuanian = byA2(\"lt\");\n(Language as { NorthernSami: Language }).NorthernSami = byA2(\"se\");\n(Language as { Norwegian: Language }).Norwegian = byA2(\"no\");\n(Language as { NorwegianBokmal: Language }).NorwegianBokmal = byA2(\"nb\");\n(Language as { NorwegianNynorsk: Language }).NorwegianNynorsk = byA2(\"nn\");\n(Language as { Polish: Language }).Polish = byA2(\"pl\");\n(Language as { Portuguese: Language }).Portuguese = byA2(\"pt\");\n(Language as { Romanian: Language }).Romanian = byA2(\"ro\");\n(Language as { Russian: Language }).Russian = byA2(\"ru\");\n(Language as { Slovak: Language }).Slovak = byA2(\"sk\");\n(Language as { Slovenian: Language }).Slovenian = byA2(\"sl\");\n(Language as { Spanish: Language }).Spanish = byA2(\"es\");\n(Language as { Swahili: Language }).Swahili = byA2(\"sw\");\n(Language as { Swedish: Language }).Swedish = byA2(\"sv\");\n(Language as { Turkish: Language }).Turkish = byA2(\"tr\");\n(Language as { Ukrainian: Language }).Ukrainian = byA2(\"uk\");\n","/**\n * Broad classification of a {@link TextCandidate} for filtering and selective\n * masking.\n */\nexport const TextCandidateCategory = {\n PersonalIdentifier: \"PersonalIdentifier\",\n OrganizationIdentifier: \"OrganizationIdentifier\",\n Financial: \"Financial\",\n Contact: \"Contact\",\n Vehicle: \"Vehicle\",\n Property: \"Property\",\n Product: \"Product\",\n Geography: \"Geography\",\n Measurement: \"Measurement\",\n} as const;\n\nexport type TextCandidateCategory =\n (typeof TextCandidateCategory)[keyof typeof TextCandidateCategory];\n","import { TextCandidateCategory } from \"./text-candidate-category.js\";\nimport { TextMatchConfidence } from \"./text-match-confidence.js\";\n\n/**\n * A potential match of a structured type found in unstructured text.\n *\n * Text scanning is heuristic-based. Candidates may be false positives, and\n * valid occurrences may be missed. No guarantee is made that the matched text\n * actually represents the identified type in its original context.\n */\nexport class TextCandidate<T = unknown> {\n /** Zero-based start position in the scanned text. */\n readonly startIndex: number;\n /** Number of characters in the original matched span. */\n readonly length: number;\n /** The raw substring from the input text that was matched. */\n readonly originalText: string;\n /**\n * Short type name, e.g. `EmailAddress` or `SwedishPersonalIdentityNumber`.\n */\n readonly typeName: string;\n /** Broad category of the matched type. */\n readonly category: TextCandidateCategory;\n /** Machine-comparable canonical form of the matched value. */\n readonly normalizedForm: string;\n /** Human-readable display form of the matched value. */\n readonly formattedForm: string;\n /**\n * Display form with sensitive content masked (e.g. `990807-****`).\n * Produced by the type's `toMaskedString()` helper.\n */\n readonly maskedForm: string;\n /** Heuristic confidence level. */\n readonly confidence: TextMatchConfidence;\n /** The successfully parsed instance of the matched type. */\n readonly value: T;\n\n constructor(opts: {\n startIndex: number;\n length: number;\n originalText: string;\n typeName: string;\n category: TextCandidateCategory;\n normalizedForm: string;\n formattedForm: string;\n maskedForm: string;\n confidence: TextMatchConfidence;\n value: T;\n }) {\n this.startIndex = opts.startIndex;\n this.length = opts.length;\n this.originalText = opts.originalText;\n this.typeName = opts.typeName;\n this.category = opts.category;\n this.normalizedForm = opts.normalizedForm;\n this.formattedForm = opts.formattedForm;\n this.maskedForm = opts.maskedForm;\n this.confidence = opts.confidence;\n this.value = opts.value;\n }\n\n /** Exclusive end position (`startIndex + length`). */\n get endIndex(): number {\n return this.startIndex + this.length;\n }\n\n /** Returns `true` if this candidate's span overlaps with `other`. */\n overlaps(other: TextCandidate): boolean {\n return this.startIndex < other.endIndex && other.startIndex < this.endIndex;\n }\n\n /** Returns `true` if this candidate's span fully contains `other`. */\n contains(other: TextCandidate): boolean {\n return this.startIndex <= other.startIndex && this.endIndex >= other.endIndex;\n }\n}\n","/**\n * Indicates the confidence level of a candidate found by text scanning.\n * Higher confidence means stronger structural evidence, but no level guarantees\n * the absence of false positives.\n */\nexport const TextMatchConfidence = {\n /**\n * Pattern match only. High false-positive risk — the matched text merely\n * fits a syntactic pattern (e.g. a run of digits that happens to be the\n * right length).\n */\n Low: 0,\n /**\n * Structural match with partial validation — the format is correct but no\n * checksum or strong distinguishing feature confirms the match.\n */\n Medium: 1,\n /**\n * Strong match with checksum or format-specific validation (e.g. a personal\n * identity number with a valid Luhn check digit and plausible date, or an\n * IBAN with valid MOD-97).\n */\n High: 2,\n} as const;\n\nexport type TextMatchConfidence = (typeof TextMatchConfidence)[keyof typeof TextMatchConfidence];\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\n// `geography/country.ts` imports this module for its currency accessors. Both\n// directions are only used inside function bodies, never at module-evaluation\n// time, so the cycle resolves safely under ESM.\nimport { Country } from \"../geography/country.js\";\n\ninterface CurrencyRow {\n code: string;\n en: string;\n sv: string;\n symbol: string;\n decimalPlaces: number;\n}\n\nconst KNOWN_CURRENCIES: readonly CurrencyRow[] = [\n { code: \"SEK\", en: \"Swedish krona\", sv: \"Svensk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"NOK\", en: \"Norwegian krone\", sv: \"Norsk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"DKK\", en: \"Danish krone\", sv: \"Dansk krona\", symbol: \"kr\", decimalPlaces: 2 },\n { code: \"ISK\", en: \"Icelandic króna\", sv: \"Isländsk krona\", symbol: \"kr\", decimalPlaces: 0 },\n { code: \"EUR\", en: \"Euro\", sv: \"Euro\", symbol: \"€\", decimalPlaces: 2 },\n {\n code: \"USD\",\n en: \"United States dollar\",\n sv: \"Amerikansk dollar\",\n symbol: \"$\",\n decimalPlaces: 2,\n },\n { code: \"GBP\", en: \"Pound sterling\", sv: \"Brittiskt pund\", symbol: \"£\", decimalPlaces: 2 },\n { code: \"CHF\", en: \"Swiss franc\", sv: \"Schweizisk franc\", symbol: \"CHF\", decimalPlaces: 2 },\n { code: \"JPY\", en: \"Japanese yen\", sv: \"Japansk yen\", symbol: \"¥\", decimalPlaces: 0 },\n { code: \"CNY\", en: \"Chinese yuan\", sv: \"Kinesisk yuan\", symbol: \"¥\", decimalPlaces: 2 },\n { code: \"CAD\", en: \"Canadian dollar\", sv: \"Kanadensisk dollar\", symbol: \"CA$\", decimalPlaces: 2 },\n { code: \"AUD\", en: \"Australian dollar\", sv: \"Australisk dollar\", symbol: \"A$\", decimalPlaces: 2 },\n {\n code: \"NZD\",\n en: \"New Zealand dollar\",\n sv: \"Nyzeeländsk dollar\",\n symbol: \"NZ$\",\n decimalPlaces: 2,\n },\n { code: \"PLN\", en: \"Polish złoty\", sv: \"Polsk zloty\", symbol: \"zł\", decimalPlaces: 2 },\n { code: \"CZK\", en: \"Czech koruna\", sv: \"Tjeckisk koruna\", symbol: \"Kč\", decimalPlaces: 2 },\n { code: \"HUF\", en: \"Hungarian forint\", sv: \"Ungersk forint\", symbol: \"Ft\", decimalPlaces: 2 },\n { code: \"RON\", en: \"Romanian leu\", sv: \"Rumänsk leu\", symbol: \"lei\", decimalPlaces: 2 },\n { code: \"BGN\", en: \"Bulgarian lev\", sv: \"Bulgarisk lev\", symbol: \"лв\", decimalPlaces: 2 },\n { code: \"HRK\", en: \"Croatian kuna\", sv: \"Kroatisk kuna\", symbol: \"kn\", decimalPlaces: 2 },\n { code: \"TRY\", en: \"Turkish lira\", sv: \"Turkisk lira\", symbol: \"₺\", decimalPlaces: 2 },\n { code: \"RUB\", en: \"Russian ruble\", sv: \"Rysk rubel\", symbol: \"₽\", decimalPlaces: 2 },\n { code: \"INR\", en: \"Indian rupee\", sv: \"Indisk rupie\", symbol: \"₹\", decimalPlaces: 2 },\n { code: \"BRL\", en: \"Brazilian real\", sv: \"Brasiliansk real\", symbol: \"R$\", decimalPlaces: 2 },\n { code: \"ZAR\", en: \"South African rand\", sv: \"Sydafrikansk rand\", symbol: \"R\", decimalPlaces: 2 },\n { code: \"MXN\", en: \"Mexican peso\", sv: \"Mexikansk peso\", symbol: \"MX$\", decimalPlaces: 2 },\n {\n code: \"SGD\",\n en: \"Singapore dollar\",\n sv: \"Singaporiansk dollar\",\n symbol: \"S$\",\n decimalPlaces: 2,\n },\n { code: \"HKD\", en: \"Hong Kong dollar\", sv: \"Hongkongdollar\", symbol: \"HK$\", decimalPlaces: 2 },\n { code: \"KRW\", en: \"South Korean won\", sv: \"Sydkoreansk won\", symbol: \"₩\", decimalPlaces: 0 },\n { code: \"THB\", en: \"Thai baht\", sv: \"Thailändsk baht\", symbol: \"฿\", decimalPlaces: 2 },\n {\n code: \"TWD\",\n en: \"New Taiwan dollar\",\n sv: \"Taiwanesisk dollar\",\n symbol: \"NT$\",\n decimalPlaces: 2,\n },\n { code: \"ILS\", en: \"Israeli new shekel\", sv: \"Israelisk shekel\", symbol: \"₪\", decimalPlaces: 2 },\n {\n code: \"AED\",\n en: \"United Arab Emirates dirham\",\n sv: \"Emiratisk dirham\",\n symbol: \"د.إ\",\n decimalPlaces: 2,\n },\n { code: \"SAR\", en: \"Saudi riyal\", sv: \"Saudisk riyal\", symbol: \"﷼\", decimalPlaces: 2 },\n { code: \"PHP\", en: \"Philippine peso\", sv: \"Filippinsk peso\", symbol: \"₱\", decimalPlaces: 2 },\n { code: \"IDR\", en: \"Indonesian rupiah\", sv: \"Indonesisk rupiah\", symbol: \"Rp\", decimalPlaces: 2 },\n { code: \"MYR\", en: \"Malaysian ringgit\", sv: \"Malaysisk ringgit\", symbol: \"RM\", decimalPlaces: 2 },\n { code: \"VND\", en: \"Vietnamese đồng\", sv: \"Vietnamesisk dong\", symbol: \"₫\", decimalPlaces: 0 },\n { code: \"UAH\", en: \"Ukrainian hryvnia\", sv: \"Ukrainsk hryvnia\", symbol: \"₴\", decimalPlaces: 2 },\n { code: \"EGP\", en: \"Egyptian pound\", sv: \"Egyptiskt pund\", symbol: \"E£\", decimalPlaces: 2 },\n { code: \"NGN\", en: \"Nigerian naira\", sv: \"Nigeriansk naira\", symbol: \"₦\", decimalPlaces: 2 },\n { code: \"KES\", en: \"Kenyan shilling\", sv: \"Kenyansk shilling\", symbol: \"KSh\", decimalPlaces: 2 },\n { code: \"COP\", en: \"Colombian peso\", sv: \"Colombiansk peso\", symbol: \"CO$\", decimalPlaces: 2 },\n { code: \"ARS\", en: \"Argentine peso\", sv: \"Argentinsk peso\", symbol: \"AR$\", decimalPlaces: 2 },\n { code: \"CLP\", en: \"Chilean peso\", sv: \"Chilensk peso\", symbol: \"CL$\", decimalPlaces: 0 },\n { code: \"PEN\", en: \"Peruvian sol\", sv: \"Peruansk sol\", symbol: \"S/.\", decimalPlaces: 2 },\n];\n\n/**\n * An ISO 4217 currency identified by its three-letter code (e.g. `SEK`, `EUR`).\n */\nexport class Currency {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Currency\",\n localizedName: \"Valuta\",\n emoji: \"\\u{1F4B1}\",\n sources: Object.freeze([\n \"https://www.iso.org/iso-4217-currency-codes.html\",\n \"https://en.wikipedia.org/wiki/ISO_4217\",\n ]),\n });\n\n readonly code: string;\n readonly englishName: string;\n readonly localizedName: string;\n readonly symbol: string;\n readonly decimalPlaces: number;\n\n private constructor(row: CurrencyRow) {\n this.code = row.code;\n this.englishName = row.en;\n this.localizedName = row.sv;\n this.symbol = row.symbol;\n this.decimalPlaces = row.decimalPlaces;\n }\n\n /** @internal */\n static _fromRow(row: CurrencyRow): Currency {\n return new Currency(row);\n }\n\n /** Display name in current UI culture (Swedish or English). */\n /**\n * The currency name as used in its issuing country. Falls back to\n * {@link englishName} when no issuing country is known.\n */\n get nativeName(): string {\n const country = Country.all.find(\n (c) => c.currencyCode != null && c.currencyCode.toUpperCase() === this.code.toUpperCase(),\n );\n if (country === undefined) return this.englishName;\n return country.nativeName === country.englishName ? this.englishName : this.localizedName;\n }\n\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n static tryParse(input: string | null | undefined): Currency | null {\n if (input == null || input.trim() === \"\") return null;\n const trimmed = sanitizeInput(input).trim();\n const byCode = BY_CODE.get(trimmed.toUpperCase());\n if (byCode) return byCode;\n const byName = BY_NAME.get(trimmed.toLowerCase());\n if (byName) return byName;\n return null;\n }\n\n static parse(input: string): Currency {\n const r = Currency.tryParse(input);\n if (r === null) throw new Error(\"Unknown currency.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Currency.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Currency.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Currency.tryParse(input);\n if (r) return r.code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Currency.normalize(input) === input;\n }\n\n /** All known currencies. */\n static get all(): readonly Currency[] {\n return ALL_CURRENCIES;\n }\n\n /** @internal Lookup by symbol. */\n static tryParseSymbol(symbol: string | null | undefined): Currency | null {\n if (symbol == null || symbol.trim() === \"\") return null;\n return BY_SYMBOL.get(symbol.trim().toLowerCase()) ?? null;\n }\n\n toNormalizedString(): string {\n return this.code;\n }\n\n toString(): string {\n return this.displayName;\n }\n\n toDisplayString(): string {\n return this.displayName;\n }\n\n toEnglishString(): string {\n return this.englishName;\n }\n\n toNativeString(): string {\n return this.nativeName;\n }\n\n equals(other: Currency | null | undefined): boolean {\n return other != null && this.code === other.code;\n }\n\n compareTo(other: Currency | null | undefined): number {\n if (other == null) return 1;\n return this.code < other.code ? -1 : this.code > other.code ? 1 : 0;\n }\n\n static get SEK(): Currency {\n return BY_CODE.get(\"SEK\")!;\n }\n static get EUR(): Currency {\n return BY_CODE.get(\"EUR\")!;\n }\n static get USD(): Currency {\n return BY_CODE.get(\"USD\")!;\n }\n static get NOK(): Currency {\n return BY_CODE.get(\"NOK\")!;\n }\n static get DKK(): Currency {\n return BY_CODE.get(\"DKK\")!;\n }\n static get GBP(): Currency {\n return BY_CODE.get(\"GBP\")!;\n }\n}\n\nconst ALL_CURRENCIES: readonly Currency[] = KNOWN_CURRENCIES.map((r) => Currency._fromRow(r));\n\nconst BY_CODE = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) BY_CODE.set(c.code.toUpperCase(), c);\n\nconst BY_NAME = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) {\n BY_NAME.set(c.englishName.toLowerCase(), c);\n BY_NAME.set(c.localizedName.toLowerCase(), c);\n}\n\nconst BY_SYMBOL = new Map<string, Currency>();\nfor (const c of ALL_CURRENCIES) {\n if (!BY_SYMBOL.has(c.symbol.toLowerCase())) BY_SYMBOL.set(c.symbol.toLowerCase(), c);\n}\n\n/**\n * Returns the primary currency for a country, or `null` when no association\n * is known. Resolves the country's first `currencyCodes` entry to a\n * {@link Currency} instance.\n */\nexport function getCurrencyForCountry(country: Country): Currency | null {\n const codes = country.currencyCodes;\n if (codes.length === 0) return null;\n const first = codes[0];\n if (first == null) return null;\n return Currency.tryParse(first);\n}\n","import { Continent } from \"./continent.js\";\n\n/**\n * Static country data: ISO 3166-1 alpha-2/alpha-3/numeric codes, English/Swedish/native names,\n * E.164 calling code, ccTLD, continent. Sourced from ISO 3166, ITU-T E.164, and IANA root db.\n */\nexport interface CountryRow {\n readonly alpha2: string;\n readonly alpha3: string;\n readonly numeric: number;\n readonly en: string;\n readonly sv: string;\n readonly native: string;\n readonly callingCode: string;\n readonly tld: string;\n readonly continent: Continent;\n}\n\nconst C = (\n alpha2: string,\n alpha3: string,\n numeric: number,\n en: string,\n sv: string,\n native: string,\n callingCode: string,\n tld: string,\n continent: Continent,\n): CountryRow => ({ alpha2, alpha3, numeric, en, sv, native, callingCode, tld, continent });\n\nexport const COUNTRY_ROWS: readonly CountryRow[] = [\n C(\"AF\", \"AFG\", 4, \"Afghanistan\", \"Afghanistan\", \"افغانستان\", \"93\", \".af\", Continent.Asia),\n C(\"AL\", \"ALB\", 8, \"Albania\", \"Albanien\", \"Shqipëria\", \"355\", \".al\", Continent.Europe),\n C(\"DZ\", \"DZA\", 12, \"Algeria\", \"Algeriet\", \"الجزائر\", \"213\", \".dz\", Continent.Africa),\n C(\n \"AS\",\n \"ASM\",\n 16,\n \"American Samoa\",\n \"Amerikanska Samoa\",\n \"American Samoa\",\n \"1\",\n \".as\",\n Continent.Oceania,\n ),\n C(\"AD\", \"AND\", 20, \"Andorra\", \"Andorra\", \"Andorra\", \"376\", \".ad\", Continent.Europe),\n C(\"AO\", \"AGO\", 24, \"Angola\", \"Angola\", \"Angola\", \"244\", \".ao\", Continent.Africa),\n C(\n \"AG\",\n \"ATG\",\n 28,\n \"Antigua and Barbuda\",\n \"Antigua och Barbuda\",\n \"Antigua and Barbuda\",\n \"1\",\n \".ag\",\n Continent.NorthAmerica,\n ),\n C(\"AR\", \"ARG\", 32, \"Argentina\", \"Argentina\", \"Argentina\", \"54\", \".ar\", Continent.SouthAmerica),\n C(\"AM\", \"ARM\", 51, \"Armenia\", \"Armenien\", \"Հայաստան\", \"374\", \".am\", Continent.Asia),\n C(\"AW\", \"ABW\", 533, \"Aruba\", \"Aruba\", \"Aruba\", \"297\", \".aw\", Continent.NorthAmerica),\n C(\"AU\", \"AUS\", 36, \"Australia\", \"Australien\", \"Australia\", \"61\", \".au\", Continent.Oceania),\n C(\"AT\", \"AUT\", 40, \"Austria\", \"Österrike\", \"Österreich\", \"43\", \".at\", Continent.Europe),\n C(\"AZ\", \"AZE\", 31, \"Azerbaijan\", \"Azerbajdzjan\", \"Azərbaycan\", \"994\", \".az\", Continent.Asia),\n C(\"BS\", \"BHS\", 44, \"Bahamas\", \"Bahamas\", \"Bahamas\", \"1\", \".bs\", Continent.NorthAmerica),\n C(\"BH\", \"BHR\", 48, \"Bahrain\", \"Bahrain\", \"البحرين\", \"973\", \".bh\", Continent.Asia),\n C(\"BD\", \"BGD\", 50, \"Bangladesh\", \"Bangladesh\", \"বাংলাদেশ\", \"880\", \".bd\", Continent.Asia),\n C(\"BB\", \"BRB\", 52, \"Barbados\", \"Barbados\", \"Barbados\", \"1\", \".bb\", Continent.NorthAmerica),\n C(\"BY\", \"BLR\", 112, \"Belarus\", \"Belarus\", \"Беларусь\", \"375\", \".by\", Continent.Europe),\n C(\"BE\", \"BEL\", 56, \"Belgium\", \"Belgien\", \"België\", \"32\", \".be\", Continent.Europe),\n C(\"BZ\", \"BLZ\", 84, \"Belize\", \"Belize\", \"Belize\", \"501\", \".bz\", Continent.NorthAmerica),\n C(\"BJ\", \"BEN\", 204, \"Benin\", \"Benin\", \"Bénin\", \"229\", \".bj\", Continent.Africa),\n C(\"BM\", \"BMU\", 60, \"Bermuda\", \"Bermuda\", \"Bermuda\", \"1\", \".bm\", Continent.NorthAmerica),\n C(\"BT\", \"BTN\", 64, \"Bhutan\", \"Bhutan\", \"འབྲུག\", \"975\", \".bt\", Continent.Asia),\n C(\"BO\", \"BOL\", 68, \"Bolivia\", \"Bolivia\", \"Bolivia\", \"591\", \".bo\", Continent.SouthAmerica),\n C(\n \"BA\",\n \"BIH\",\n 70,\n \"Bosnia and Herzegovina\",\n \"Bosnien och Hercegovina\",\n \"Bosna i Hercegovina\",\n \"387\",\n \".ba\",\n Continent.Europe,\n ),\n C(\"BW\", \"BWA\", 72, \"Botswana\", \"Botswana\", \"Botswana\", \"267\", \".bw\", Continent.Africa),\n C(\"BR\", \"BRA\", 76, \"Brazil\", \"Brasilien\", \"Brasil\", \"55\", \".br\", Continent.SouthAmerica),\n C(\"BN\", \"BRN\", 96, \"Brunei\", \"Brunei\", \"Brunei\", \"673\", \".bn\", Continent.Asia),\n C(\"BG\", \"BGR\", 100, \"Bulgaria\", \"Bulgarien\", \"България\", \"359\", \".bg\", Continent.Europe),\n C(\n \"BF\",\n \"BFA\",\n 854,\n \"Burkina Faso\",\n \"Burkina Faso\",\n \"Burkina Faso\",\n \"226\",\n \".bf\",\n Continent.Africa,\n ),\n C(\"BI\", \"BDI\", 108, \"Burundi\", \"Burundi\", \"Burundi\", \"257\", \".bi\", Continent.Africa),\n C(\"CV\", \"CPV\", 132, \"Cabo Verde\", \"Kap Verde\", \"Cabo Verde\", \"238\", \".cv\", Continent.Africa),\n C(\"KH\", \"KHM\", 116, \"Cambodia\", \"Kambodja\", \"កម្ពុជា\", \"855\", \".kh\", Continent.Asia),\n C(\"CM\", \"CMR\", 120, \"Cameroon\", \"Kamerun\", \"Cameroun\", \"237\", \".cm\", Continent.Africa),\n C(\"CA\", \"CAN\", 124, \"Canada\", \"Kanada\", \"Canada\", \"1\", \".ca\", Continent.NorthAmerica),\n C(\n \"CF\",\n \"CAF\",\n 140,\n \"Central African Republic\",\n \"Centralafrikanska republiken\",\n \"République centrafricaine\",\n \"236\",\n \".cf\",\n Continent.Africa,\n ),\n C(\"TD\", \"TCD\", 148, \"Chad\", \"Tchad\", \"Tchad\", \"235\", \".td\", Continent.Africa),\n C(\"CL\", \"CHL\", 152, \"Chile\", \"Chile\", \"Chile\", \"56\", \".cl\", Continent.SouthAmerica),\n C(\"CN\", \"CHN\", 156, \"China\", \"Kina\", \"中国\", \"86\", \".cn\", Continent.Asia),\n C(\"CO\", \"COL\", 170, \"Colombia\", \"Colombia\", \"Colombia\", \"57\", \".co\", Continent.SouthAmerica),\n C(\"KM\", \"COM\", 174, \"Comoros\", \"Komorerna\", \"Komori\", \"269\", \".km\", Continent.Africa),\n C(\"CG\", \"COG\", 178, \"Congo\", \"Kongo\", \"Congo\", \"242\", \".cg\", Continent.Africa),\n C(\n \"CD\",\n \"COD\",\n 180,\n \"Congo (Democratic Republic)\",\n \"Demokratiska republiken Kongo\",\n \"République démocratique du Congo\",\n \"243\",\n \".cd\",\n Continent.Africa,\n ),\n C(\n \"CR\",\n \"CRI\",\n 188,\n \"Costa Rica\",\n \"Costa Rica\",\n \"Costa Rica\",\n \"506\",\n \".cr\",\n Continent.NorthAmerica,\n ),\n C(\n \"CI\",\n \"CIV\",\n 384,\n \"Côte d'Ivoire\",\n \"Elfenbenskusten\",\n \"Côte d'Ivoire\",\n \"225\",\n \".ci\",\n Continent.Africa,\n ),\n C(\"HR\", \"HRV\", 191, \"Croatia\", \"Kroatien\", \"Hrvatska\", \"385\", \".hr\", Continent.Europe),\n C(\"CU\", \"CUB\", 192, \"Cuba\", \"Kuba\", \"Cuba\", \"53\", \".cu\", Continent.NorthAmerica),\n C(\"CW\", \"CUW\", 531, \"Curaçao\", \"Curaçao\", \"Curaçao\", \"599\", \".cw\", Continent.NorthAmerica),\n C(\"CY\", \"CYP\", 196, \"Cyprus\", \"Cypern\", \"Κύπρος\", \"357\", \".cy\", Continent.Europe),\n C(\"CZ\", \"CZE\", 203, \"Czechia\", \"Tjeckien\", \"Česko\", \"420\", \".cz\", Continent.Europe),\n C(\"DK\", \"DNK\", 208, \"Denmark\", \"Danmark\", \"Danmark\", \"45\", \".dk\", Continent.Europe),\n C(\"DJ\", \"DJI\", 262, \"Djibouti\", \"Djibouti\", \"Djibouti\", \"253\", \".dj\", Continent.Africa),\n C(\"DM\", \"DMA\", 212, \"Dominica\", \"Dominica\", \"Dominica\", \"1\", \".dm\", Continent.NorthAmerica),\n C(\n \"DO\",\n \"DOM\",\n 214,\n \"Dominican Republic\",\n \"Dominikanska republiken\",\n \"República Dominicana\",\n \"1\",\n \".do\",\n Continent.NorthAmerica,\n ),\n C(\"EC\", \"ECU\", 218, \"Ecuador\", \"Ecuador\", \"Ecuador\", \"593\", \".ec\", Continent.SouthAmerica),\n C(\"EG\", \"EGY\", 818, \"Egypt\", \"Egypten\", \"مصر\", \"20\", \".eg\", Continent.Africa),\n C(\n \"SV\",\n \"SLV\",\n 222,\n \"El Salvador\",\n \"El Salvador\",\n \"El Salvador\",\n \"503\",\n \".sv\",\n Continent.NorthAmerica,\n ),\n C(\n \"GQ\",\n \"GNQ\",\n 226,\n \"Equatorial Guinea\",\n \"Ekvatorialguinea\",\n \"Guinea Ecuatorial\",\n \"240\",\n \".gq\",\n Continent.Africa,\n ),\n C(\"ER\", \"ERI\", 232, \"Eritrea\", \"Eritrea\", \"ኤርትራ\", \"291\", \".er\", Continent.Africa),\n C(\"EE\", \"EST\", 233, \"Estonia\", \"Estland\", \"Eesti\", \"372\", \".ee\", Continent.Europe),\n C(\"SZ\", \"SWZ\", 748, \"Eswatini\", \"Eswatini\", \"eSwatini\", \"268\", \".sz\", Continent.Africa),\n C(\"ET\", \"ETH\", 231, \"Ethiopia\", \"Etiopien\", \"ኢትዮጵያ\", \"251\", \".et\", Continent.Africa),\n C(\"FJ\", \"FJI\", 242, \"Fiji\", \"Fiji\", \"Fiji\", \"679\", \".fj\", Continent.Oceania),\n C(\"FI\", \"FIN\", 246, \"Finland\", \"Finland\", \"Suomi\", \"358\", \".fi\", Continent.Europe),\n C(\"FR\", \"FRA\", 250, \"France\", \"Frankrike\", \"France\", \"33\", \".fr\", Continent.Europe),\n C(\"GA\", \"GAB\", 266, \"Gabon\", \"Gabon\", \"Gabon\", \"241\", \".ga\", Continent.Africa),\n C(\"GM\", \"GMB\", 270, \"Gambia\", \"Gambia\", \"Gambia\", \"220\", \".gm\", Continent.Africa),\n C(\"GE\", \"GEO\", 268, \"Georgia\", \"Georgien\", \"საქართველო\", \"995\", \".ge\", Continent.Asia),\n C(\"DE\", \"DEU\", 276, \"Germany\", \"Tyskland\", \"Deutschland\", \"49\", \".de\", Continent.Europe),\n C(\"GH\", \"GHA\", 288, \"Ghana\", \"Ghana\", \"Ghana\", \"233\", \".gh\", Continent.Africa),\n C(\"GI\", \"GIB\", 292, \"Gibraltar\", \"Gibraltar\", \"Gibraltar\", \"350\", \".gi\", Continent.Europe),\n C(\"GR\", \"GRC\", 300, \"Greece\", \"Grekland\", \"Ελλάδα\", \"30\", \".gr\", Continent.Europe),\n C(\n \"GL\",\n \"GRL\",\n 304,\n \"Greenland\",\n \"Grönland\",\n \"Kalaallit Nunaat\",\n \"299\",\n \".gl\",\n Continent.NorthAmerica,\n ),\n C(\"GD\", \"GRD\", 308, \"Grenada\", \"Grenada\", \"Grenada\", \"1\", \".gd\", Continent.NorthAmerica),\n C(\"GU\", \"GUM\", 316, \"Guam\", \"Guam\", \"Guam\", \"1\", \".gu\", Continent.Oceania),\n C(\"GT\", \"GTM\", 320, \"Guatemala\", \"Guatemala\", \"Guatemala\", \"502\", \".gt\", Continent.NorthAmerica),\n C(\"GG\", \"GGY\", 831, \"Guernsey\", \"Guernsey\", \"Guernsey\", \"44\", \".gg\", Continent.Europe),\n C(\"GN\", \"GIN\", 324, \"Guinea\", \"Guinea\", \"Guinée\", \"224\", \".gn\", Continent.Africa),\n C(\n \"GW\",\n \"GNB\",\n 624,\n \"Guinea-Bissau\",\n \"Guinea-Bissau\",\n \"Guiné-Bissau\",\n \"245\",\n \".gw\",\n Continent.Africa,\n ),\n C(\"GY\", \"GUY\", 328, \"Guyana\", \"Guyana\", \"Guyana\", \"592\", \".gy\", Continent.SouthAmerica),\n C(\"HT\", \"HTI\", 332, \"Haiti\", \"Haiti\", \"Haïti\", \"509\", \".ht\", Continent.NorthAmerica),\n C(\"HN\", \"HND\", 340, \"Honduras\", \"Honduras\", \"Honduras\", \"504\", \".hn\", Continent.NorthAmerica),\n C(\"HK\", \"HKG\", 344, \"Hong Kong\", \"Hongkong\", \"香港\", \"852\", \".hk\", Continent.Asia),\n C(\"HU\", \"HUN\", 348, \"Hungary\", \"Ungern\", \"Magyarország\", \"36\", \".hu\", Continent.Europe),\n C(\"IS\", \"ISL\", 352, \"Iceland\", \"Island\", \"Ísland\", \"354\", \".is\", Continent.Europe),\n C(\"IN\", \"IND\", 356, \"India\", \"Indien\", \"भारत\", \"91\", \".in\", Continent.Asia),\n C(\"ID\", \"IDN\", 360, \"Indonesia\", \"Indonesien\", \"Indonesia\", \"62\", \".id\", Continent.Asia),\n C(\"IR\", \"IRN\", 364, \"Iran\", \"Iran\", \"ایران\", \"98\", \".ir\", Continent.Asia),\n C(\"IQ\", \"IRQ\", 368, \"Iraq\", \"Irak\", \"العراق\", \"964\", \".iq\", Continent.Asia),\n C(\"IE\", \"IRL\", 372, \"Ireland\", \"Irland\", \"Éire\", \"353\", \".ie\", Continent.Europe),\n C(\"IM\", \"IMN\", 833, \"Isle of Man\", \"Isle of Man\", \"Isle of Man\", \"44\", \".im\", Continent.Europe),\n C(\"IL\", \"ISR\", 376, \"Israel\", \"Israel\", \"ישראל\", \"972\", \".il\", Continent.Asia),\n C(\"IT\", \"ITA\", 380, \"Italy\", \"Italien\", \"Italia\", \"39\", \".it\", Continent.Europe),\n C(\"JM\", \"JAM\", 388, \"Jamaica\", \"Jamaica\", \"Jamaica\", \"1\", \".jm\", Continent.NorthAmerica),\n C(\"JP\", \"JPN\", 392, \"Japan\", \"Japan\", \"日本\", \"81\", \".jp\", Continent.Asia),\n C(\"JE\", \"JEY\", 832, \"Jersey\", \"Jersey\", \"Jersey\", \"44\", \".je\", Continent.Europe),\n C(\"JO\", \"JOR\", 400, \"Jordan\", \"Jordanien\", \"الأردن\", \"962\", \".jo\", Continent.Asia),\n C(\"KZ\", \"KAZ\", 398, \"Kazakhstan\", \"Kazakstan\", \"Қазақстан\", \"7\", \".kz\", Continent.Asia),\n C(\"KE\", \"KEN\", 404, \"Kenya\", \"Kenya\", \"Kenya\", \"254\", \".ke\", Continent.Africa),\n C(\"KI\", \"KIR\", 296, \"Kiribati\", \"Kiribati\", \"Kiribati\", \"686\", \".ki\", Continent.Oceania),\n C(\"KP\", \"PRK\", 408, \"North Korea\", \"Nordkorea\", \"조선\", \"850\", \".kp\", Continent.Asia),\n C(\"KR\", \"KOR\", 410, \"South Korea\", \"Sydkorea\", \"대한민국\", \"82\", \".kr\", Continent.Asia),\n C(\"KW\", \"KWT\", 414, \"Kuwait\", \"Kuwait\", \"الكويت\", \"965\", \".kw\", Continent.Asia),\n C(\"KG\", \"KGZ\", 417, \"Kyrgyzstan\", \"Kirgizistan\", \"Кыргызстан\", \"996\", \".kg\", Continent.Asia),\n C(\"LA\", \"LAO\", 418, \"Laos\", \"Laos\", \"ລາວ\", \"856\", \".la\", Continent.Asia),\n C(\"LV\", \"LVA\", 428, \"Latvia\", \"Lettland\", \"Latvija\", \"371\", \".lv\", Continent.Europe),\n C(\"LB\", \"LBN\", 422, \"Lebanon\", \"Libanon\", \"لبنان\", \"961\", \".lb\", Continent.Asia),\n C(\"LS\", \"LSO\", 426, \"Lesotho\", \"Lesotho\", \"Lesotho\", \"266\", \".ls\", Continent.Africa),\n C(\"LR\", \"LBR\", 430, \"Liberia\", \"Liberia\", \"Liberia\", \"231\", \".lr\", Continent.Africa),\n C(\"LY\", \"LBY\", 434, \"Libya\", \"Libyen\", \"ليبيا\", \"218\", \".ly\", Continent.Africa),\n C(\n \"LI\",\n \"LIE\",\n 438,\n \"Liechtenstein\",\n \"Liechtenstein\",\n \"Liechtenstein\",\n \"423\",\n \".li\",\n Continent.Europe,\n ),\n C(\"LT\", \"LTU\", 440, \"Lithuania\", \"Litauen\", \"Lietuva\", \"370\", \".lt\", Continent.Europe),\n C(\"LU\", \"LUX\", 442, \"Luxembourg\", \"Luxemburg\", \"Lëtzebuerg\", \"352\", \".lu\", Continent.Europe),\n C(\"MO\", \"MAC\", 446, \"Macao\", \"Macao\", \"澳門\", \"853\", \".mo\", Continent.Asia),\n C(\"MG\", \"MDG\", 450, \"Madagascar\", \"Madagaskar\", \"Madagasikara\", \"261\", \".mg\", Continent.Africa),\n C(\"MW\", \"MWI\", 454, \"Malawi\", \"Malawi\", \"Malawi\", \"265\", \".mw\", Continent.Africa),\n C(\"MY\", \"MYS\", 458, \"Malaysia\", \"Malaysia\", \"Malaysia\", \"60\", \".my\", Continent.Asia),\n C(\"MV\", \"MDV\", 462, \"Maldives\", \"Maldiverna\", \"ދިވެހިރާއްޖެ\", \"960\", \".mv\", Continent.Asia),\n C(\"ML\", \"MLI\", 466, \"Mali\", \"Mali\", \"Mali\", \"223\", \".ml\", Continent.Africa),\n C(\"MT\", \"MLT\", 470, \"Malta\", \"Malta\", \"Malta\", \"356\", \".mt\", Continent.Europe),\n C(\n \"MH\",\n \"MHL\",\n 584,\n \"Marshall Islands\",\n \"Marshallöarna\",\n \"Marshall Islands\",\n \"692\",\n \".mh\",\n Continent.Oceania,\n ),\n C(\"MR\", \"MRT\", 478, \"Mauritania\", \"Mauretanien\", \"موريتانيا\", \"222\", \".mr\", Continent.Africa),\n C(\"MU\", \"MUS\", 480, \"Mauritius\", \"Mauritius\", \"Maurice\", \"230\", \".mu\", Continent.Africa),\n C(\"MX\", \"MEX\", 484, \"Mexico\", \"Mexiko\", \"México\", \"52\", \".mx\", Continent.NorthAmerica),\n C(\"FM\", \"FSM\", 583, \"Micronesia\", \"Mikronesien\", \"Micronesia\", \"691\", \".fm\", Continent.Oceania),\n C(\"MD\", \"MDA\", 498, \"Moldova\", \"Moldavien\", \"Moldova\", \"373\", \".md\", Continent.Europe),\n C(\"MC\", \"MCO\", 492, \"Monaco\", \"Monaco\", \"Monaco\", \"377\", \".mc\", Continent.Europe),\n C(\"MN\", \"MNG\", 496, \"Mongolia\", \"Mongoliet\", \"Монгол\", \"976\", \".mn\", Continent.Asia),\n C(\"ME\", \"MNE\", 499, \"Montenegro\", \"Montenegro\", \"Crna Gora\", \"382\", \".me\", Continent.Europe),\n C(\"MA\", \"MAR\", 504, \"Morocco\", \"Marocko\", \"المغرب\", \"212\", \".ma\", Continent.Africa),\n C(\"MZ\", \"MOZ\", 508, \"Mozambique\", \"Moçambique\", \"Moçambique\", \"258\", \".mz\", Continent.Africa),\n C(\"MM\", \"MMR\", 104, \"Myanmar\", \"Myanmar\", \"မြန်မာ\", \"95\", \".mm\", Continent.Asia),\n C(\"NA\", \"NAM\", 516, \"Namibia\", \"Namibia\", \"Namibia\", \"264\", \".na\", Continent.Africa),\n C(\"NR\", \"NRU\", 520, \"Nauru\", \"Nauru\", \"Nauru\", \"674\", \".nr\", Continent.Oceania),\n C(\"NP\", \"NPL\", 524, \"Nepal\", \"Nepal\", \"नेपाल\", \"977\", \".np\", Continent.Asia),\n C(\"NL\", \"NLD\", 528, \"Netherlands\", \"Nederländerna\", \"Nederland\", \"31\", \".nl\", Continent.Europe),\n C(\"NZ\", \"NZL\", 554, \"New Zealand\", \"Nya Zeeland\", \"Aotearoa\", \"64\", \".nz\", Continent.Oceania),\n C(\"NI\", \"NIC\", 558, \"Nicaragua\", \"Nicaragua\", \"Nicaragua\", \"505\", \".ni\", Continent.NorthAmerica),\n C(\"NE\", \"NER\", 562, \"Niger\", \"Niger\", \"Niger\", \"227\", \".ne\", Continent.Africa),\n C(\"NG\", \"NGA\", 566, \"Nigeria\", \"Nigeria\", \"Nigeria\", \"234\", \".ng\", Continent.Africa),\n C(\n \"MK\",\n \"MKD\",\n 807,\n \"North Macedonia\",\n \"Nordmakedonien\",\n \"Северна Македонија\",\n \"389\",\n \".mk\",\n Continent.Europe,\n ),\n C(\"NO\", \"NOR\", 578, \"Norway\", \"Norge\", \"Norge\", \"47\", \".no\", Continent.Europe),\n C(\"OM\", \"OMN\", 512, \"Oman\", \"Oman\", \"عمان\", \"968\", \".om\", Continent.Asia),\n C(\"PK\", \"PAK\", 586, \"Pakistan\", \"Pakistan\", \"پاکستان\", \"92\", \".pk\", Continent.Asia),\n C(\"PW\", \"PLW\", 585, \"Palau\", \"Palau\", \"Palau\", \"680\", \".pw\", Continent.Oceania),\n C(\"PS\", \"PSE\", 275, \"Palestine\", \"Palestina\", \"فلسطين\", \"970\", \".ps\", Continent.Asia),\n C(\"PA\", \"PAN\", 591, \"Panama\", \"Panama\", \"Panamá\", \"507\", \".pa\", Continent.NorthAmerica),\n C(\n \"PG\",\n \"PNG\",\n 598,\n \"Papua New Guinea\",\n \"Papua Nya Guinea\",\n \"Papua Niugini\",\n \"675\",\n \".pg\",\n Continent.Oceania,\n ),\n C(\"PY\", \"PRY\", 600, \"Paraguay\", \"Paraguay\", \"Paraguay\", \"595\", \".py\", Continent.SouthAmerica),\n C(\"PE\", \"PER\", 604, \"Peru\", \"Peru\", \"Perú\", \"51\", \".pe\", Continent.SouthAmerica),\n C(\"PH\", \"PHL\", 608, \"Philippines\", \"Filippinerna\", \"Pilipinas\", \"63\", \".ph\", Continent.Asia),\n C(\"PL\", \"POL\", 616, \"Poland\", \"Polen\", \"Polska\", \"48\", \".pl\", Continent.Europe),\n C(\"PT\", \"PRT\", 620, \"Portugal\", \"Portugal\", \"Portugal\", \"351\", \".pt\", Continent.Europe),\n C(\n \"PR\",\n \"PRI\",\n 630,\n \"Puerto Rico\",\n \"Puerto Rico\",\n \"Puerto Rico\",\n \"1\",\n \".pr\",\n Continent.NorthAmerica,\n ),\n C(\"QA\", \"QAT\", 634, \"Qatar\", \"Qatar\", \"قطر\", \"974\", \".qa\", Continent.Asia),\n C(\"RO\", \"ROU\", 642, \"Romania\", \"Rumänien\", \"România\", \"40\", \".ro\", Continent.Europe),\n C(\"RU\", \"RUS\", 643, \"Russia\", \"Ryssland\", \"Россия\", \"7\", \".ru\", Continent.Europe),\n C(\"RW\", \"RWA\", 646, \"Rwanda\", \"Rwanda\", \"Rwanda\", \"250\", \".rw\", Continent.Africa),\n C(\n \"KN\",\n \"KNA\",\n 659,\n \"Saint Kitts and Nevis\",\n \"Saint Kitts och Nevis\",\n \"Saint Kitts and Nevis\",\n \"1\",\n \".kn\",\n Continent.NorthAmerica,\n ),\n C(\n \"LC\",\n \"LCA\",\n 662,\n \"Saint Lucia\",\n \"Saint Lucia\",\n \"Saint Lucia\",\n \"1\",\n \".lc\",\n Continent.NorthAmerica,\n ),\n C(\n \"VC\",\n \"VCT\",\n 670,\n \"Saint Vincent and the Grenadines\",\n \"Saint Vincent och Grenadinerna\",\n \"Saint Vincent and the Grenadines\",\n \"1\",\n \".vc\",\n Continent.NorthAmerica,\n ),\n C(\"WS\", \"WSM\", 882, \"Samoa\", \"Samoa\", \"Sāmoa\", \"685\", \".ws\", Continent.Oceania),\n C(\"SM\", \"SMR\", 674, \"San Marino\", \"San Marino\", \"San Marino\", \"378\", \".sm\", Continent.Europe),\n C(\n \"ST\",\n \"STP\",\n 678,\n \"São Tomé and Príncipe\",\n \"São Tomé och Príncipe\",\n \"São Tomé e Príncipe\",\n \"239\",\n \".st\",\n Continent.Africa,\n ),\n C(\"SA\", \"SAU\", 682, \"Saudi Arabia\", \"Saudiarabien\", \"السعودية\", \"966\", \".sa\", Continent.Asia),\n C(\"SN\", \"SEN\", 686, \"Senegal\", \"Senegal\", \"Sénégal\", \"221\", \".sn\", Continent.Africa),\n C(\"RS\", \"SRB\", 688, \"Serbia\", \"Serbien\", \"Србија\", \"381\", \".rs\", Continent.Europe),\n C(\"SC\", \"SYC\", 690, \"Seychelles\", \"Seychellerna\", \"Seychelles\", \"248\", \".sc\", Continent.Africa),\n C(\n \"SL\",\n \"SLE\",\n 694,\n \"Sierra Leone\",\n \"Sierra Leone\",\n \"Sierra Leone\",\n \"232\",\n \".sl\",\n Continent.Africa,\n ),\n C(\"SG\", \"SGP\", 702, \"Singapore\", \"Singapore\", \"Singapore\", \"65\", \".sg\", Continent.Asia),\n C(\"SK\", \"SVK\", 703, \"Slovakia\", \"Slovakien\", \"Slovensko\", \"421\", \".sk\", Continent.Europe),\n C(\"SI\", \"SVN\", 705, \"Slovenia\", \"Slovenien\", \"Slovenija\", \"386\", \".si\", Continent.Europe),\n C(\n \"SB\",\n \"SLB\",\n 90,\n \"Solomon Islands\",\n \"Salomonöarna\",\n \"Solomon Islands\",\n \"677\",\n \".sb\",\n Continent.Oceania,\n ),\n C(\"SO\", \"SOM\", 706, \"Somalia\", \"Somalia\", \"Soomaaliya\", \"252\", \".so\", Continent.Africa),\n C(\"ZA\", \"ZAF\", 710, \"South Africa\", \"Sydafrika\", \"Suid-Afrika\", \"27\", \".za\", Continent.Africa),\n C(\"SS\", \"SSD\", 728, \"South Sudan\", \"Sydsudan\", \"South Sudan\", \"211\", \".ss\", Continent.Africa),\n C(\"ES\", \"ESP\", 724, \"Spain\", \"Spanien\", \"España\", \"34\", \".es\", Continent.Europe),\n C(\"LK\", \"LKA\", 144, \"Sri Lanka\", \"Sri Lanka\", \"ශ්‍රී ලංකාව\", \"94\", \".lk\", Continent.Asia),\n C(\"SD\", \"SDN\", 729, \"Sudan\", \"Sudan\", \"السودان\", \"249\", \".sd\", Continent.Africa),\n C(\"SR\", \"SUR\", 740, \"Suriname\", \"Surinam\", \"Suriname\", \"597\", \".sr\", Continent.SouthAmerica),\n C(\"SE\", \"SWE\", 752, \"Sweden\", \"Sverige\", \"Sverige\", \"46\", \".se\", Continent.Europe),\n C(\"CH\", \"CHE\", 756, \"Switzerland\", \"Schweiz\", \"Schweiz\", \"41\", \".ch\", Continent.Europe),\n C(\"SY\", \"SYR\", 760, \"Syria\", \"Syrien\", \"سوريا\", \"963\", \".sy\", Continent.Asia),\n C(\"TW\", \"TWN\", 158, \"Taiwan\", \"Taiwan\", \"臺灣\", \"886\", \".tw\", Continent.Asia),\n C(\"TJ\", \"TJK\", 762, \"Tajikistan\", \"Tadzjikistan\", \"Тоҷикистон\", \"992\", \".tj\", Continent.Asia),\n C(\"TZ\", \"TZA\", 834, \"Tanzania\", \"Tanzania\", \"Tanzania\", \"255\", \".tz\", Continent.Africa),\n C(\"TH\", \"THA\", 764, \"Thailand\", \"Thailand\", \"ประเทศไทย\", \"66\", \".th\", Continent.Asia),\n C(\"TL\", \"TLS\", 626, \"Timor-Leste\", \"Östtimor\", \"Timor-Leste\", \"670\", \".tl\", Continent.Asia),\n C(\"TG\", \"TGO\", 768, \"Togo\", \"Togo\", \"Togo\", \"228\", \".tg\", Continent.Africa),\n C(\"TO\", \"TON\", 776, \"Tonga\", \"Tonga\", \"Tonga\", \"676\", \".to\", Continent.Oceania),\n C(\n \"TT\",\n \"TTO\",\n 780,\n \"Trinidad and Tobago\",\n \"Trinidad och Tobago\",\n \"Trinidad and Tobago\",\n \"1\",\n \".tt\",\n Continent.NorthAmerica,\n ),\n C(\"TN\", \"TUN\", 788, \"Tunisia\", \"Tunisien\", \"تونس\", \"216\", \".tn\", Continent.Africa),\n C(\"TR\", \"TUR\", 792, \"Turkey\", \"Turkiet\", \"Türkiye\", \"90\", \".tr\", Continent.Asia),\n C(\"TM\", \"TKM\", 795, \"Turkmenistan\", \"Turkmenistan\", \"Türkmenistan\", \"993\", \".tm\", Continent.Asia),\n C(\"TV\", \"TUV\", 798, \"Tuvalu\", \"Tuvalu\", \"Tuvalu\", \"688\", \".tv\", Continent.Oceania),\n C(\"UG\", \"UGA\", 800, \"Uganda\", \"Uganda\", \"Uganda\", \"256\", \".ug\", Continent.Africa),\n C(\"UA\", \"UKR\", 804, \"Ukraine\", \"Ukraina\", \"Україна\", \"380\", \".ua\", Continent.Europe),\n C(\n \"AE\",\n \"ARE\",\n 784,\n \"United Arab Emirates\",\n \"Förenade Arabemiraten\",\n \"الإمارات\",\n \"971\",\n \".ae\",\n Continent.Asia,\n ),\n C(\n \"GB\",\n \"GBR\",\n 826,\n \"United Kingdom\",\n \"Storbritannien\",\n \"United Kingdom\",\n \"44\",\n \".uk\",\n Continent.Europe,\n ),\n C(\n \"US\",\n \"USA\",\n 840,\n \"United States\",\n \"Förenta staterna\",\n \"United States\",\n \"1\",\n \".us\",\n Continent.NorthAmerica,\n ),\n C(\"UY\", \"URY\", 858, \"Uruguay\", \"Uruguay\", \"Uruguay\", \"598\", \".uy\", Continent.SouthAmerica),\n C(\"UZ\", \"UZB\", 860, \"Uzbekistan\", \"Uzbekistan\", \"Oʻzbekiston\", \"998\", \".uz\", Continent.Asia),\n C(\"VU\", \"VUT\", 548, \"Vanuatu\", \"Vanuatu\", \"Vanuatu\", \"678\", \".vu\", Continent.Oceania),\n C(\n \"VA\",\n \"VAT\",\n 336,\n \"Vatican City\",\n \"Vatikanstaten\",\n \"Città del Vaticano\",\n \"379\",\n \".va\",\n Continent.Europe,\n ),\n C(\"VE\", \"VEN\", 862, \"Venezuela\", \"Venezuela\", \"Venezuela\", \"58\", \".ve\", Continent.SouthAmerica),\n C(\"VN\", \"VNM\", 704, \"Vietnam\", \"Vietnam\", \"Việt Nam\", \"84\", \".vn\", Continent.Asia),\n C(\"YE\", \"YEM\", 887, \"Yemen\", \"Jemen\", \"اليمن\", \"967\", \".ye\", Continent.Asia),\n C(\"ZM\", \"ZMB\", 894, \"Zambia\", \"Zambia\", \"Zambia\", \"260\", \".zm\", Continent.Africa),\n C(\"ZW\", \"ZWE\", 716, \"Zimbabwe\", \"Zimbabwe\", \"Zimbabwe\", \"263\", \".zw\", Continent.Africa),\n C(\"AX\", \"ALA\", 248, \"Åland Islands\", \"Åland\", \"Åland\", \"358\", \".ax\", Continent.Europe),\n C(\"FO\", \"FRO\", 234, \"Faroe Islands\", \"Färöarna\", \"Føroyar\", \"298\", \".fo\", Continent.Europe),\n C(\"XK\", \"XKX\", 0, \"Kosovo\", \"Kosovo\", \"Kosova\", \"383\", \".xk\", Continent.Europe),\n];\n","/** Geographic coordinates (latitude, longitude) for each country, sourced from Wikidata P625. */\nexport const COUNTRY_COORDINATES: Readonly<Record<string, readonly [number, number]>> =\n Object.freeze({\n AF: [33.0, 65.0],\n AL: [41.0, 20.0],\n DZ: [28.0, 3.0],\n AS: [-14.27, -170.7],\n AD: [42.5, 1.5],\n AO: [-12.5, 18.5],\n AG: [17.05, -61.8],\n AR: [-34.0, -64.0],\n AM: [40.0, 45.0],\n AW: [12.5, -69.97],\n AU: [-27.0, 133.0],\n AT: [47.33, 13.33],\n AZ: [40.5, 47.5],\n BS: [24.25, -76.0],\n BH: [26.0, 50.55],\n BD: [24.0, 90.0],\n BB: [13.17, -59.53],\n BY: [53.0, 28.0],\n BE: [50.83, 4.0],\n BZ: [17.25, -88.75],\n BJ: [9.5, 2.25],\n BM: [32.33, -64.75],\n BT: [27.5, 90.5],\n BO: [-17.0, -65.0],\n BA: [44.0, 18.0],\n BW: [-22.0, 24.0],\n BR: [-10.0, -55.0],\n BN: [4.5, 114.67],\n BG: [43.0, 25.0],\n BF: [13.0, -2.0],\n BI: [-3.5, 30.0],\n CV: [16.0, -24.0],\n KH: [13.0, 105.0],\n CM: [6.0, 12.0],\n CA: [60.0, -95.0],\n CF: [7.0, 21.0],\n TD: [15.0, 19.0],\n CL: [-30.0, -71.0],\n CN: [35.0, 105.0],\n CO: [4.0, -72.0],\n KM: [-12.17, 44.25],\n CG: [-1.0, 15.0],\n CD: [0.0, 25.0],\n CR: [10.0, -84.0],\n CI: [8.0, -5.0],\n HR: [45.17, 15.5],\n CU: [21.5, -80.0],\n CW: [12.17, -68.98],\n CY: [35.0, 33.0],\n CZ: [49.75, 15.5],\n DK: [56.0, 10.0],\n DJ: [11.5, 43.0],\n DM: [15.42, -61.33],\n DO: [19.0, -70.67],\n EC: [-2.0, -77.5],\n EG: [27.0, 30.0],\n SV: [13.83, -88.92],\n GQ: [2.0, 10.0],\n ER: [15.0, 39.0],\n EE: [59.0, 26.0],\n SZ: [-26.5, 31.5],\n ET: [8.0, 38.0],\n FJ: [-18.0, 175.0],\n FI: [64.0, 26.0],\n FR: [46.0, 2.0],\n GA: [-1.0, 11.75],\n GM: [13.47, -16.57],\n GE: [42.0, 43.5],\n DE: [51.0, 9.0],\n GH: [8.0, -2.0],\n GI: [36.13, -5.35],\n GR: [39.0, 22.0],\n GL: [72.0, -40.0],\n GD: [12.12, -61.67],\n GU: [13.47, 144.78],\n GT: [15.5, -90.25],\n GG: [49.45, -2.54],\n GN: [11.0, -10.0],\n GW: [12.0, -15.0],\n GY: [5.0, -59.0],\n HT: [19.0, -72.42],\n HN: [15.0, -86.5],\n HK: [22.25, 114.17],\n HU: [47.0, 20.0],\n IS: [65.0, -18.0],\n IN: [20.0, 77.0],\n ID: [-5.0, 120.0],\n IR: [32.0, 53.0],\n IQ: [33.0, 44.0],\n IE: [53.0, -8.0],\n IM: [54.23, -4.55],\n IL: [31.5, 34.75],\n IT: [42.83, 12.83],\n JM: [18.25, -77.5],\n JP: [36.0, 138.0],\n JE: [49.21, -2.13],\n JO: [31.0, 36.0],\n KZ: [48.0, 68.0],\n KE: [1.0, 38.0],\n KI: [1.42, 173.0],\n KP: [40.0, 127.0],\n KR: [37.0, 127.5],\n KW: [29.34, 47.66],\n KG: [41.0, 75.0],\n LA: [18.0, 105.0],\n LV: [57.0, 25.0],\n LB: [33.83, 35.83],\n LS: [-29.5, 28.5],\n LR: [6.5, -9.5],\n LY: [25.0, 17.0],\n LI: [47.17, 9.53],\n LT: [56.0, 24.0],\n LU: [49.75, 6.17],\n MO: [22.17, 113.55],\n MG: [-20.0, 47.0],\n MW: [-13.5, 34.0],\n MY: [2.5, 112.5],\n MV: [3.25, 73.0],\n ML: [17.0, -4.0],\n MT: [35.83, 14.58],\n MH: [9.0, 168.0],\n MR: [20.0, -12.0],\n MU: [-20.28, 57.55],\n MX: [23.0, -102.0],\n FM: [6.92, 158.25],\n MD: [47.0, 29.0],\n MC: [43.73, 7.42],\n MN: [46.0, 105.0],\n ME: [42.0, 19.0],\n MA: [32.0, -5.0],\n MZ: [-18.25, 35.0],\n MM: [22.0, 98.0],\n NA: [-22.0, 17.0],\n NR: [-0.53, 166.92],\n NP: [28.0, 84.0],\n NL: [52.5, 5.75],\n NZ: [-41.0, 174.0],\n NI: [13.0, -85.0],\n NE: [16.0, 8.0],\n NG: [10.0, 8.0],\n MK: [41.83, 22.0],\n NO: [62.0, 10.0],\n OM: [21.0, 57.0],\n PK: [30.0, 70.0],\n PW: [7.5, 134.5],\n PS: [32.0, 35.25],\n PA: [9.0, -80.0],\n PG: [-6.0, 147.0],\n PY: [-23.0, -58.0],\n PE: [-10.0, -76.0],\n PH: [13.0, 122.0],\n PL: [52.0, 20.0],\n PT: [39.5, -8.0],\n PR: [18.25, -66.5],\n QA: [25.5, 51.25],\n RO: [46.0, 25.0],\n RU: [60.0, 100.0],\n RW: [-2.0, 30.0],\n KN: [17.33, -62.75],\n LC: [13.88, -61.13],\n VC: [13.25, -61.2],\n WS: [-13.58, -172.33],\n SM: [43.77, 12.42],\n ST: [1.0, 7.0],\n SA: [25.0, 45.0],\n SN: [14.0, -14.0],\n RS: [44.0, 21.0],\n SC: [-4.58, 55.67],\n SL: [8.5, -11.5],\n SG: [1.37, 103.8],\n SK: [48.67, 19.5],\n SI: [46.12, 14.82],\n SB: [-8.0, 159.0],\n SO: [10.0, 49.0],\n ZA: [-29.0, 24.0],\n SS: [8.0, 30.0],\n ES: [40.0, -4.0],\n LK: [7.0, 81.0],\n SD: [15.0, 30.0],\n SR: [4.0, -56.0],\n SE: [62.0, 15.0],\n CH: [47.0, 8.0],\n SY: [35.0, 38.0],\n TW: [23.5, 121.0],\n TJ: [39.0, 71.0],\n TZ: [-6.0, 35.0],\n TH: [15.0, 100.0],\n TL: [-8.55, 125.73],\n TG: [8.0, 1.17],\n TO: [-20.0, -175.0],\n TT: [11.0, -61.0],\n TN: [34.0, 9.0],\n TR: [39.0, 35.0],\n TM: [40.0, 60.0],\n TV: [-8.0, 178.0],\n UG: [1.0, 32.0],\n UA: [49.0, 32.0],\n AE: [24.0, 54.0],\n GB: [54.0, -2.0],\n US: [38.0, -97.0],\n UY: [-33.0, -56.0],\n UZ: [41.0, 64.0],\n VU: [-16.0, 167.0],\n VA: [41.9, 12.45],\n VE: [8.0, -66.0],\n VN: [16.0, 106.0],\n YE: [15.0, 48.0],\n ZM: [-15.0, 30.0],\n ZW: [-20.0, 30.0],\n AX: [60.12, 19.9],\n FO: [62.0, -7.0],\n XK: [42.67, 21.17],\n } as const);\n","import { CountryCapital } from \"./country-capital.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\n\ninterface RawCapital {\n readonly en: string;\n readonly sv: string;\n readonly native: string;\n readonly lat: number;\n readonly lon: number;\n}\n\nconst RAW: Readonly<Record<string, RawCapital>> = {\n AF: { en: \"Kabul\", sv: \"Kabul\", native: \"کابل\", lat: 34.53, lon: 69.17 },\n AL: { en: \"Tirana\", sv: \"Tirana\", native: \"Tiranë\", lat: 41.33, lon: 19.82 },\n DZ: { en: \"Algiers\", sv: \"Alger\", native: \"الجزائر\", lat: 36.75, lon: 3.04 },\n AD: {\n en: \"Andorra la Vella\",\n sv: \"Andorra la Vella\",\n native: \"Andorra la Vella\",\n lat: 42.51,\n lon: 1.52,\n },\n AO: { en: \"Luanda\", sv: \"Luanda\", native: \"Luanda\", lat: -8.84, lon: 13.23 },\n AG: { en: \"St. John's\", sv: \"Saint John's\", native: \"St. John's\", lat: 17.12, lon: -61.85 },\n AR: { en: \"Buenos Aires\", sv: \"Buenos Aires\", native: \"Buenos Aires\", lat: -34.61, lon: -58.38 },\n AM: { en: \"Yerevan\", sv: \"Jerevan\", native: \"Երևան\", lat: 40.18, lon: 44.51 },\n AU: { en: \"Canberra\", sv: \"Canberra\", native: \"Canberra\", lat: -35.28, lon: 149.13 },\n AT: { en: \"Vienna\", sv: \"Wien\", native: \"Wien\", lat: 48.21, lon: 16.37 },\n AZ: { en: \"Baku\", sv: \"Baku\", native: \"Bakı\", lat: 40.41, lon: 49.87 },\n BS: { en: \"Nassau\", sv: \"Nassau\", native: \"Nassau\", lat: 25.06, lon: -77.34 },\n BH: { en: \"Manama\", sv: \"Manama\", native: \"المنامة\", lat: 26.23, lon: 50.59 },\n BD: { en: \"Dhaka\", sv: \"Dhaka\", native: \"ঢাকা\", lat: 23.71, lon: 90.41 },\n BB: { en: \"Bridgetown\", sv: \"Bridgetown\", native: \"Bridgetown\", lat: 13.1, lon: -59.62 },\n BY: { en: \"Minsk\", sv: \"Minsk\", native: \"Мінск\", lat: 53.9, lon: 27.57 },\n BE: { en: \"Brussels\", sv: \"Bryssel\", native: \"Bruxelles\", lat: 50.85, lon: 4.35 },\n BZ: { en: \"Belmopan\", sv: \"Belmopan\", native: \"Belmopan\", lat: 17.25, lon: -88.77 },\n BJ: { en: \"Porto-Novo\", sv: \"Porto-Novo\", native: \"Porto-Novo\", lat: 6.5, lon: 2.6 },\n BT: { en: \"Thimphu\", sv: \"Thimphu\", native: \"ཐིམ་ཕུ\", lat: 27.47, lon: 89.64 },\n BO: { en: \"Sucre\", sv: \"Sucre\", native: \"Sucre\", lat: -19.04, lon: -65.26 },\n BA: { en: \"Sarajevo\", sv: \"Sarajevo\", native: \"Sarajevo\", lat: 43.86, lon: 18.41 },\n BW: { en: \"Gaborone\", sv: \"Gaborone\", native: \"Gaborone\", lat: -24.65, lon: 25.91 },\n BR: { en: \"Brasília\", sv: \"Brasília\", native: \"Brasília\", lat: -15.79, lon: -47.88 },\n BN: {\n en: \"Bandar Seri Begawan\",\n sv: \"Bandar Seri Begawan\",\n native: \"Bandar Seri Begawan\",\n lat: 4.94,\n lon: 114.95,\n },\n BG: { en: \"Sofia\", sv: \"Sofia\", native: \"София\", lat: 42.7, lon: 23.32 },\n BF: { en: \"Ouagadougou\", sv: \"Ouagadougou\", native: \"Ouagadougou\", lat: 12.37, lon: -1.52 },\n BI: { en: \"Gitega\", sv: \"Gitega\", native: \"Gitega\", lat: -3.43, lon: 29.93 },\n CV: { en: \"Praia\", sv: \"Praia\", native: \"Praia\", lat: 14.92, lon: -23.51 },\n KH: { en: \"Phnom Penh\", sv: \"Phnom Penh\", native: \"ភ្នំពេញ\", lat: 11.56, lon: 104.93 },\n CM: { en: \"Yaoundé\", sv: \"Yaoundé\", native: \"Yaoundé\", lat: 3.87, lon: 11.52 },\n CA: { en: \"Ottawa\", sv: \"Ottawa\", native: \"Ottawa\", lat: 45.42, lon: -75.7 },\n CF: { en: \"Bangui\", sv: \"Bangui\", native: \"Bangui\", lat: 4.37, lon: 18.59 },\n TD: { en: \"N'Djamena\", sv: \"N'Djamena\", native: \"N'Djamena\", lat: 12.11, lon: 15.05 },\n CL: { en: \"Santiago\", sv: \"Santiago\", native: \"Santiago\", lat: -33.45, lon: -70.67 },\n CN: { en: \"Beijing\", sv: \"Peking\", native: \"北京\", lat: 39.91, lon: 116.39 },\n CO: { en: \"Bogotá\", sv: \"Bogotá\", native: \"Bogotá\", lat: 4.71, lon: -74.07 },\n KM: { en: \"Moroni\", sv: \"Moroni\", native: \"Moroni\", lat: -11.7, lon: 43.26 },\n CG: { en: \"Brazzaville\", sv: \"Brazzaville\", native: \"Brazzaville\", lat: -4.27, lon: 15.28 },\n CD: { en: \"Kinshasa\", sv: \"Kinshasa\", native: \"Kinshasa\", lat: -4.32, lon: 15.31 },\n CR: { en: \"San José\", sv: \"San José\", native: \"San José\", lat: 9.93, lon: -84.08 },\n CI: { en: \"Yamoussoukro\", sv: \"Yamoussoukro\", native: \"Yamoussoukro\", lat: 6.82, lon: -5.28 },\n HR: { en: \"Zagreb\", sv: \"Zagreb\", native: \"Zagreb\", lat: 45.81, lon: 15.98 },\n CU: { en: \"Havana\", sv: \"Havanna\", native: \"La Habana\", lat: 23.13, lon: -82.38 },\n CY: { en: \"Nicosia\", sv: \"Nicosia\", native: \"Λευκωσία\", lat: 35.17, lon: 33.37 },\n CZ: { en: \"Prague\", sv: \"Prag\", native: \"Praha\", lat: 50.09, lon: 14.42 },\n DK: { en: \"Copenhagen\", sv: \"Köpenhamn\", native: \"København\", lat: 55.68, lon: 12.57 },\n DJ: { en: \"Djibouti\", sv: \"Djibouti\", native: \"Djibouti\", lat: 11.59, lon: 43.15 },\n DM: { en: \"Roseau\", sv: \"Roseau\", native: \"Roseau\", lat: 15.3, lon: -61.39 },\n DO: { en: \"Santo Domingo\", sv: \"Santo Domingo\", native: \"Santo Domingo\", lat: 18.47, lon: -69.9 },\n EC: { en: \"Quito\", sv: \"Quito\", native: \"Quito\", lat: -0.18, lon: -78.47 },\n EG: { en: \"Cairo\", sv: \"Kairo\", native: \"القاهرة\", lat: 30.04, lon: 31.24 },\n SV: { en: \"San Salvador\", sv: \"San Salvador\", native: \"San Salvador\", lat: 13.69, lon: -89.19 },\n GQ: { en: \"Malabo\", sv: \"Malabo\", native: \"Malabo\", lat: 3.75, lon: 8.78 },\n ER: { en: \"Asmara\", sv: \"Asmara\", native: \"ኣስመራ\", lat: 15.33, lon: 38.93 },\n EE: { en: \"Tallinn\", sv: \"Tallinn\", native: \"Tallinn\", lat: 59.44, lon: 24.75 },\n SZ: { en: \"Mbabane\", sv: \"Mbabane\", native: \"Mbabane\", lat: -26.32, lon: 31.13 },\n ET: { en: \"Addis Ababa\", sv: \"Addis Abeba\", native: \"አዲስ አበባ\", lat: 9.02, lon: 38.75 },\n FJ: { en: \"Suva\", sv: \"Suva\", native: \"Suva\", lat: -18.14, lon: 178.44 },\n FI: { en: \"Helsinki\", sv: \"Helsingfors\", native: \"Helsinki\", lat: 60.17, lon: 24.94 },\n FR: { en: \"Paris\", sv: \"Paris\", native: \"Paris\", lat: 48.86, lon: 2.35 },\n GA: { en: \"Libreville\", sv: \"Libreville\", native: \"Libreville\", lat: 0.39, lon: 9.45 },\n GM: { en: \"Banjul\", sv: \"Banjul\", native: \"Banjul\", lat: 13.45, lon: -16.58 },\n GE: { en: \"Tbilisi\", sv: \"Tbilisi\", native: \"თბილისი\", lat: 41.69, lon: 44.8 },\n DE: { en: \"Berlin\", sv: \"Berlin\", native: \"Berlin\", lat: 52.52, lon: 13.41 },\n GH: { en: \"Accra\", sv: \"Accra\", native: \"Accra\", lat: 5.56, lon: -0.19 },\n GR: { en: \"Athens\", sv: \"Aten\", native: \"Αθήνα\", lat: 37.98, lon: 23.73 },\n GD: { en: \"St. George's\", sv: \"Saint George's\", native: \"St. George's\", lat: 12.05, lon: -61.75 },\n GT: {\n en: \"Guatemala City\",\n sv: \"Guatemala City\",\n native: \"Ciudad de Guatemala\",\n lat: 14.63,\n lon: -90.51,\n },\n GN: { en: \"Conakry\", sv: \"Conakry\", native: \"Conakry\", lat: 9.54, lon: -13.68 },\n GW: { en: \"Bissau\", sv: \"Bissau\", native: \"Bissau\", lat: 11.86, lon: -15.6 },\n GY: { en: \"Georgetown\", sv: \"Georgetown\", native: \"Georgetown\", lat: 6.8, lon: -58.16 },\n HT: { en: \"Port-au-Prince\", sv: \"Port-au-Prince\", native: \"Pòtoprens\", lat: 18.54, lon: -72.34 },\n HN: { en: \"Tegucigalpa\", sv: \"Tegucigalpa\", native: \"Tegucigalpa\", lat: 14.1, lon: -87.22 },\n HK: { en: \"Hong Kong\", sv: \"Hongkong\", native: \"香港\", lat: 22.28, lon: 114.16 },\n HU: { en: \"Budapest\", sv: \"Budapest\", native: \"Budapest\", lat: 47.5, lon: 19.04 },\n IS: { en: \"Reykjavik\", sv: \"Reykjavik\", native: \"Reykjavík\", lat: 64.14, lon: -21.9 },\n IN: { en: \"New Delhi\", sv: \"New Delhi\", native: \"नई दिल्ली\", lat: 28.61, lon: 77.21 },\n ID: { en: \"Jakarta\", sv: \"Jakarta\", native: \"Jakarta\", lat: -6.21, lon: 106.85 },\n IR: { en: \"Tehran\", sv: \"Teheran\", native: \"تهران\", lat: 35.69, lon: 51.39 },\n IQ: { en: \"Baghdad\", sv: \"Bagdad\", native: \"بغداد\", lat: 33.34, lon: 44.4 },\n IE: { en: \"Dublin\", sv: \"Dublin\", native: \"Baile Átha Cliath\", lat: 53.35, lon: -6.26 },\n IL: { en: \"Jerusalem\", sv: \"Jerusalem\", native: \"ירושלים\", lat: 31.77, lon: 35.23 },\n IT: { en: \"Rome\", sv: \"Rom\", native: \"Roma\", lat: 41.9, lon: 12.5 },\n JM: { en: \"Kingston\", sv: \"Kingston\", native: \"Kingston\", lat: 18.0, lon: -76.79 },\n JP: { en: \"Tokyo\", sv: \"Tokyo\", native: \"東京\", lat: 35.68, lon: 139.69 },\n JO: { en: \"Amman\", sv: \"Amman\", native: \"عمّان\", lat: 31.95, lon: 35.93 },\n KZ: { en: \"Astana\", sv: \"Astana\", native: \"Астана\", lat: 51.17, lon: 71.43 },\n KE: { en: \"Nairobi\", sv: \"Nairobi\", native: \"Nairobi\", lat: -1.29, lon: 36.82 },\n KI: { en: \"Tarawa\", sv: \"Tarawa\", native: \"Tarawa\", lat: 1.45, lon: 173.0 },\n KP: { en: \"Pyongyang\", sv: \"Pyongyang\", native: \"평양\", lat: 39.02, lon: 125.75 },\n KR: { en: \"Seoul\", sv: \"Seoul\", native: \"서울\", lat: 37.57, lon: 126.98 },\n KW: { en: \"Kuwait City\", sv: \"Kuwait City\", native: \"مدينة الكويت\", lat: 29.37, lon: 47.98 },\n KG: { en: \"Bishkek\", sv: \"Bisjkek\", native: \"Бишкек\", lat: 42.87, lon: 74.59 },\n LA: { en: \"Vientiane\", sv: \"Vientiane\", native: \"ວຽງຈັນ\", lat: 17.97, lon: 102.63 },\n LV: { en: \"Riga\", sv: \"Riga\", native: \"Rīga\", lat: 56.95, lon: 24.11 },\n LB: { en: \"Beirut\", sv: \"Beirut\", native: \"بيروت\", lat: 33.89, lon: 35.5 },\n LS: { en: \"Maseru\", sv: \"Maseru\", native: \"Maseru\", lat: -29.31, lon: 27.48 },\n LR: { en: \"Monrovia\", sv: \"Monrovia\", native: \"Monrovia\", lat: 6.3, lon: -10.8 },\n LY: { en: \"Tripoli\", sv: \"Tripoli\", native: \"طرابلس\", lat: 32.9, lon: 13.18 },\n LI: { en: \"Vaduz\", sv: \"Vaduz\", native: \"Vaduz\", lat: 47.14, lon: 9.52 },\n LT: { en: \"Vilnius\", sv: \"Vilnius\", native: \"Vilnius\", lat: 54.69, lon: 25.28 },\n LU: { en: \"Luxembourg City\", sv: \"Luxemburg\", native: \"Lëtzebuerg\", lat: 49.61, lon: 6.13 },\n MO: { en: \"Macao\", sv: \"Macao\", native: \"澳門\", lat: 22.2, lon: 113.54 },\n MG: { en: \"Antananarivo\", sv: \"Antananarivo\", native: \"Antananarivo\", lat: -18.91, lon: 47.53 },\n MW: { en: \"Lilongwe\", sv: \"Lilongwe\", native: \"Lilongwe\", lat: -13.97, lon: 33.79 },\n MY: { en: \"Kuala Lumpur\", sv: \"Kuala Lumpur\", native: \"Kuala Lumpur\", lat: 3.14, lon: 101.69 },\n MV: { en: \"Malé\", sv: \"Malé\", native: \"މާލެ\", lat: 4.18, lon: 73.51 },\n ML: { en: \"Bamako\", sv: \"Bamako\", native: \"Bamako\", lat: 12.65, lon: -8.0 },\n MT: { en: \"Valletta\", sv: \"Valletta\", native: \"Valletta\", lat: 35.9, lon: 14.51 },\n MH: { en: \"Majuro\", sv: \"Majuro\", native: \"Majuro\", lat: 7.09, lon: 171.38 },\n MR: { en: \"Nouakchott\", sv: \"Nouakchott\", native: \"نواكشوط\", lat: 18.09, lon: -15.98 },\n MU: { en: \"Port Louis\", sv: \"Port Louis\", native: \"Port Louis\", lat: -20.16, lon: 57.5 },\n MX: { en: \"Mexico City\", sv: \"Mexico City\", native: \"Ciudad de México\", lat: 19.43, lon: -99.13 },\n FM: { en: \"Palikir\", sv: \"Palikir\", native: \"Palikir\", lat: 6.92, lon: 158.16 },\n MD: { en: \"Chișinău\", sv: \"Chișinău\", native: \"Chișinău\", lat: 47.01, lon: 28.86 },\n MC: { en: \"Monaco\", sv: \"Monaco\", native: \"Monaco\", lat: 43.73, lon: 7.42 },\n MN: { en: \"Ulaanbaatar\", sv: \"Ulaanbaatar\", native: \"Улаанбаатар\", lat: 47.91, lon: 106.91 },\n ME: { en: \"Podgorica\", sv: \"Podgorica\", native: \"Podgorica\", lat: 42.44, lon: 19.26 },\n MA: { en: \"Rabat\", sv: \"Rabat\", native: \"الرباط\", lat: 34.01, lon: -6.84 },\n MZ: { en: \"Maputo\", sv: \"Maputo\", native: \"Maputo\", lat: -25.97, lon: 32.57 },\n MM: { en: \"Naypyidaw\", sv: \"Naypyidaw\", native: \"နေပြည်တော်\", lat: 19.76, lon: 96.07 },\n NA: { en: \"Windhoek\", sv: \"Windhoek\", native: \"Windhoek\", lat: -22.57, lon: 17.08 },\n NR: { en: \"Yaren\", sv: \"Yaren\", native: \"Yaren\", lat: -0.55, lon: 166.93 },\n NP: { en: \"Kathmandu\", sv: \"Kathmandu\", native: \"काठमाडौं\", lat: 27.7, lon: 85.32 },\n NL: { en: \"Amsterdam\", sv: \"Amsterdam\", native: \"Amsterdam\", lat: 52.37, lon: 4.9 },\n NZ: { en: \"Wellington\", sv: \"Wellington\", native: \"Wellington\", lat: -41.29, lon: 174.78 },\n NI: { en: \"Managua\", sv: \"Managua\", native: \"Managua\", lat: 12.15, lon: -86.27 },\n NE: { en: \"Niamey\", sv: \"Niamey\", native: \"Niamey\", lat: 13.51, lon: 2.11 },\n NG: { en: \"Abuja\", sv: \"Abuja\", native: \"Abuja\", lat: 9.06, lon: 7.49 },\n MK: { en: \"Skopje\", sv: \"Skopje\", native: \"Скопје\", lat: 42.0, lon: 21.43 },\n NO: { en: \"Oslo\", sv: \"Oslo\", native: \"Oslo\", lat: 59.91, lon: 10.75 },\n OM: { en: \"Muscat\", sv: \"Muskat\", native: \"مسقط\", lat: 23.59, lon: 58.54 },\n PK: { en: \"Islamabad\", sv: \"Islamabad\", native: \"اسلام آباد\", lat: 33.69, lon: 73.04 },\n PW: { en: \"Ngerulmud\", sv: \"Ngerulmud\", native: \"Ngerulmud\", lat: 7.5, lon: 134.62 },\n PS: { en: \"Ramallah\", sv: \"Ramallah\", native: \"رام الله\", lat: 31.9, lon: 35.2 },\n PA: { en: \"Panama City\", sv: \"Panama City\", native: \"Ciudad de Panamá\", lat: 8.98, lon: -79.52 },\n PG: { en: \"Port Moresby\", sv: \"Port Moresby\", native: \"Port Moresby\", lat: -9.48, lon: 147.15 },\n PY: { en: \"Asunción\", sv: \"Asunción\", native: \"Asunción\", lat: -25.26, lon: -57.58 },\n PE: { en: \"Lima\", sv: \"Lima\", native: \"Lima\", lat: -12.05, lon: -77.04 },\n PH: { en: \"Manila\", sv: \"Manila\", native: \"Maynila\", lat: 14.6, lon: 120.98 },\n PL: { en: \"Warsaw\", sv: \"Warszawa\", native: \"Warszawa\", lat: 52.23, lon: 21.01 },\n PT: { en: \"Lisbon\", sv: \"Lissabon\", native: \"Lisboa\", lat: 38.72, lon: -9.14 },\n PR: { en: \"San Juan\", sv: \"San Juan\", native: \"San Juan\", lat: 18.47, lon: -66.11 },\n QA: { en: \"Doha\", sv: \"Doha\", native: \"الدوحة\", lat: 25.29, lon: 51.53 },\n RO: { en: \"Bucharest\", sv: \"Bukarest\", native: \"București\", lat: 44.43, lon: 26.1 },\n RU: { en: \"Moscow\", sv: \"Moskva\", native: \"Москва\", lat: 55.76, lon: 37.62 },\n RW: { en: \"Kigali\", sv: \"Kigali\", native: \"Kigali\", lat: -1.94, lon: 30.06 },\n KN: { en: \"Basseterre\", sv: \"Basseterre\", native: \"Basseterre\", lat: 17.3, lon: -62.72 },\n LC: { en: \"Castries\", sv: \"Castries\", native: \"Castries\", lat: 14.01, lon: -61.0 },\n VC: { en: \"Kingstown\", sv: \"Kingstown\", native: \"Kingstown\", lat: 13.15, lon: -61.22 },\n WS: { en: \"Apia\", sv: \"Apia\", native: \"Apia\", lat: -13.83, lon: -171.76 },\n SM: { en: \"San Marino\", sv: \"San Marino\", native: \"San Marino\", lat: 43.94, lon: 12.45 },\n ST: { en: \"São Tomé\", sv: \"São Tomé\", native: \"São Tomé\", lat: 0.34, lon: 6.73 },\n SA: { en: \"Riyadh\", sv: \"Riyadh\", native: \"الرياض\", lat: 24.69, lon: 46.72 },\n SN: { en: \"Dakar\", sv: \"Dakar\", native: \"Dakar\", lat: 14.69, lon: -17.44 },\n RS: { en: \"Belgrade\", sv: \"Belgrad\", native: \"Београд\", lat: 44.82, lon: 20.46 },\n SC: { en: \"Victoria\", sv: \"Victoria\", native: \"Victoria\", lat: -4.62, lon: 55.45 },\n SL: { en: \"Freetown\", sv: \"Freetown\", native: \"Freetown\", lat: 8.48, lon: -13.23 },\n SG: { en: \"Singapore\", sv: \"Singapore\", native: \"Singapore\", lat: 1.29, lon: 103.85 },\n SK: { en: \"Bratislava\", sv: \"Bratislava\", native: \"Bratislava\", lat: 48.14, lon: 17.11 },\n SI: { en: \"Ljubljana\", sv: \"Ljubljana\", native: \"Ljubljana\", lat: 46.05, lon: 14.51 },\n SB: { en: \"Honiara\", sv: \"Honiara\", native: \"Honiara\", lat: -9.43, lon: 159.96 },\n SO: { en: \"Mogadishu\", sv: \"Mogadishu\", native: \"Muqdisho\", lat: 2.05, lon: 45.32 },\n ZA: { en: \"Pretoria\", sv: \"Pretoria\", native: \"Pretoria\", lat: -25.75, lon: 28.19 },\n SS: { en: \"Juba\", sv: \"Juba\", native: \"Juba\", lat: 4.85, lon: 31.58 },\n ES: { en: \"Madrid\", sv: \"Madrid\", native: \"Madrid\", lat: 40.42, lon: -3.7 },\n LK: {\n en: \"Sri Jayawardenepura Kotte\",\n sv: \"Sri Jayawardenepura Kotte\",\n native: \"ශ්‍රී ජයවර්ධනපුර කෝට්ටේ\",\n lat: 6.89,\n lon: 79.92,\n },\n SD: { en: \"Khartoum\", sv: \"Khartoum\", native: \"الخرطوم\", lat: 15.59, lon: 32.53 },\n SR: { en: \"Paramaribo\", sv: \"Paramaribo\", native: \"Paramaribo\", lat: 5.83, lon: -55.17 },\n SE: { en: \"Stockholm\", sv: \"Stockholm\", native: \"Stockholm\", lat: 59.33, lon: 18.07 },\n CH: { en: \"Bern\", sv: \"Bern\", native: \"Bern\", lat: 46.95, lon: 7.45 },\n SY: { en: \"Damascus\", sv: \"Damaskus\", native: \"دمشق\", lat: 33.51, lon: 36.29 },\n TW: { en: \"Taipei\", sv: \"Taipei\", native: \"臺北\", lat: 25.03, lon: 121.57 },\n TJ: { en: \"Dushanbe\", sv: \"Dusjanbe\", native: \"Душанбе\", lat: 38.56, lon: 68.77 },\n TZ: { en: \"Dodoma\", sv: \"Dodoma\", native: \"Dodoma\", lat: -6.16, lon: 35.75 },\n TH: { en: \"Bangkok\", sv: \"Bangkok\", native: \"กรุงเทพมหานคร\", lat: 13.76, lon: 100.5 },\n TL: { en: \"Dili\", sv: \"Dili\", native: \"Dili\", lat: -8.56, lon: 125.57 },\n TG: { en: \"Lomé\", sv: \"Lomé\", native: \"Lomé\", lat: 6.14, lon: 1.21 },\n TO: { en: \"Nukuʻalofa\", sv: \"Nukuʻalofa\", native: \"Nukuʻalofa\", lat: -21.21, lon: -175.2 },\n TT: {\n en: \"Port of Spain\",\n sv: \"Port of Spain\",\n native: \"Port of Spain\",\n lat: 10.66,\n lon: -61.51,\n },\n TN: { en: \"Tunis\", sv: \"Tunis\", native: \"تونس\", lat: 36.81, lon: 10.17 },\n TR: { en: \"Ankara\", sv: \"Ankara\", native: \"Ankara\", lat: 39.93, lon: 32.86 },\n TM: { en: \"Ashgabat\", sv: \"Asjchabad\", native: \"Aşgabat\", lat: 37.95, lon: 58.38 },\n TV: { en: \"Funafuti\", sv: \"Funafuti\", native: \"Funafuti\", lat: -8.52, lon: 179.2 },\n UG: { en: \"Kampala\", sv: \"Kampala\", native: \"Kampala\", lat: 0.31, lon: 32.58 },\n UA: { en: \"Kyiv\", sv: \"Kiev\", native: \"Київ\", lat: 50.45, lon: 30.52 },\n AE: { en: \"Abu Dhabi\", sv: \"Abu Dhabi\", native: \"أبو ظبي\", lat: 24.45, lon: 54.65 },\n GB: { en: \"London\", sv: \"London\", native: \"London\", lat: 51.51, lon: -0.13 },\n US: {\n en: \"Washington, D.C.\",\n sv: \"Washington, D.C.\",\n native: \"Washington, D.C.\",\n lat: 38.9,\n lon: -77.04,\n },\n UY: { en: \"Montevideo\", sv: \"Montevideo\", native: \"Montevideo\", lat: -34.88, lon: -56.19 },\n UZ: { en: \"Tashkent\", sv: \"Tasjkent\", native: \"Toshkent\", lat: 41.3, lon: 69.28 },\n VU: { en: \"Port Vila\", sv: \"Port Vila\", native: \"Port Vila\", lat: -17.74, lon: 168.31 },\n VA: {\n en: \"Vatican City\",\n sv: \"Vatikanstaden\",\n native: \"Città del Vaticano\",\n lat: 41.9,\n lon: 12.45,\n },\n VE: { en: \"Caracas\", sv: \"Caracas\", native: \"Caracas\", lat: 10.49, lon: -66.9 },\n VN: { en: \"Hanoi\", sv: \"Hanoi\", native: \"Hà Nội\", lat: 21.03, lon: 105.85 },\n YE: { en: \"Sana'a\", sv: \"Sana'a\", native: \"صنعاء\", lat: 15.35, lon: 44.21 },\n ZM: { en: \"Lusaka\", sv: \"Lusaka\", native: \"Lusaka\", lat: -15.39, lon: 28.32 },\n ZW: { en: \"Harare\", sv: \"Harare\", native: \"Harare\", lat: -17.83, lon: 31.05 },\n AX: { en: \"Mariehamn\", sv: \"Mariehamn\", native: \"Mariehamn\", lat: 60.1, lon: 19.94 },\n FO: { en: \"Tórshavn\", sv: \"Torshamn\", native: \"Tórshavn\", lat: 62.01, lon: -6.77 },\n XK: { en: \"Pristina\", sv: \"Pristina\", native: \"Prishtinë\", lat: 42.66, lon: 21.17 },\n GI: { en: \"Gibraltar\", sv: \"Gibraltar\", native: \"Gibraltar\", lat: 36.14, lon: -5.35 },\n GL: { en: \"Nuuk\", sv: \"Nuuk\", native: \"Nuuk\", lat: 64.17, lon: -51.74 },\n GG: {\n en: \"St. Peter Port\",\n sv: \"Saint Peter Port\",\n native: \"St. Peter Port\",\n lat: 49.46,\n lon: -2.54,\n },\n IM: { en: \"Douglas\", sv: \"Douglas\", native: \"Douglas\", lat: 54.15, lon: -4.48 },\n JE: { en: \"St. Helier\", sv: \"Saint Helier\", native: \"St. Helier\", lat: 49.19, lon: -2.1 },\n};\n\n/** Returns the {@link CountryCapital} for the given alpha-2 code, or `null` if unknown. */\nexport function getCountryCapital(alpha2: string): CountryCapital | null {\n const r = RAW[alpha2];\n if (!r) return null;\n return new CountryCapital(r.en, r.sv, r.native, GeoCoordinate.create(r.lat, r.lon));\n}\n","/** EU/EEA/Schengen/Nordic/SEPA membership and currency overrides. */\n\nconst set = (codes: readonly string[]): ReadonlySet<string> => {\n const s = new Set<string>();\n for (const c of codes) s.add(c.toUpperCase());\n return s;\n};\n\nexport const EU_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n]);\n\nexport const EEA_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n]);\n\nexport const SCHENGEN_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n \"CH\",\n]);\n\nexport const NORDIC_COUNTRIES: ReadonlySet<string> = set([\"DK\", \"FI\", \"IS\", \"NO\", \"SE\"]);\n\nexport const SEPA_COUNTRIES: ReadonlySet<string> = set([\n \"AT\",\n \"BE\",\n \"BG\",\n \"HR\",\n \"CY\",\n \"CZ\",\n \"DK\",\n \"EE\",\n \"FI\",\n \"FR\",\n \"DE\",\n \"GR\",\n \"HU\",\n \"IE\",\n \"IT\",\n \"LV\",\n \"LT\",\n \"LU\",\n \"MT\",\n \"NL\",\n \"PL\",\n \"PT\",\n \"RO\",\n \"SK\",\n \"SI\",\n \"ES\",\n \"SE\",\n \"IS\",\n \"LI\",\n \"NO\",\n \"AL\",\n \"AD\",\n \"MD\",\n \"MC\",\n \"ME\",\n \"MK\",\n \"SM\",\n \"RS\",\n \"CH\",\n \"GB\",\n \"VA\",\n \"GG\",\n \"IM\",\n \"JE\",\n]);\n\n/** ISO 4217 currency codes per ISO 3166 country, with overrides for territories. */\nexport const COUNTRY_CURRENCIES: Readonly<Record<string, readonly string[]>> = Object.freeze({\n AF: [\"AFN\"],\n AL: [\"ALL\"],\n DZ: [\"DZD\"],\n AS: [\"USD\"],\n AD: [\"EUR\"],\n AO: [\"AOA\"],\n AG: [\"XCD\"],\n AR: [\"ARS\"],\n AM: [\"AMD\"],\n AW: [\"AWG\"],\n AU: [\"AUD\"],\n AT: [\"EUR\"],\n AZ: [\"AZN\"],\n BS: [\"BSD\"],\n BH: [\"BHD\"],\n BD: [\"BDT\"],\n BB: [\"BBD\"],\n BY: [\"BYN\"],\n BE: [\"EUR\"],\n BZ: [\"BZD\"],\n BJ: [\"XOF\"],\n BM: [\"BMD\"],\n BT: [\"BTN\"],\n BO: [\"BOB\"],\n BA: [\"BAM\"],\n BW: [\"BWP\"],\n BR: [\"BRL\"],\n BN: [\"BND\"],\n BG: [\"BGN\"],\n BF: [\"XOF\"],\n BI: [\"BIF\"],\n CV: [\"CVE\"],\n KH: [\"KHR\"],\n CM: [\"XAF\"],\n CA: [\"CAD\"],\n CF: [\"XAF\"],\n TD: [\"XAF\"],\n CL: [\"CLP\"],\n CN: [\"CNY\"],\n CO: [\"COP\"],\n KM: [\"KMF\"],\n CG: [\"XAF\"],\n CD: [\"CDF\"],\n CR: [\"CRC\"],\n CI: [\"XOF\"],\n HR: [\"EUR\"],\n CU: [\"CUP\"],\n CW: [\"ANG\"],\n CY: [\"EUR\"],\n CZ: [\"CZK\"],\n DK: [\"DKK\"],\n DJ: [\"DJF\"],\n DM: [\"XCD\"],\n DO: [\"DOP\"],\n EC: [\"USD\"],\n EG: [\"EGP\"],\n SV: [\"USD\"],\n GQ: [\"XAF\"],\n ER: [\"ERN\"],\n EE: [\"EUR\"],\n SZ: [\"SZL\"],\n ET: [\"ETB\"],\n FJ: [\"FJD\"],\n FI: [\"EUR\"],\n FR: [\"EUR\"],\n GA: [\"XAF\"],\n GM: [\"GMD\"],\n GE: [\"GEL\"],\n DE: [\"EUR\"],\n GH: [\"GHS\"],\n GI: [\"GIP\"],\n GR: [\"EUR\"],\n GL: [\"DKK\"],\n GD: [\"XCD\"],\n GU: [\"USD\"],\n GT: [\"GTQ\"],\n GG: [\"GBP\"],\n GN: [\"GNF\"],\n GW: [\"XOF\"],\n GY: [\"GYD\"],\n HT: [\"HTG\"],\n HN: [\"HNL\"],\n HK: [\"HKD\"],\n HU: [\"HUF\"],\n IS: [\"ISK\"],\n IN: [\"INR\"],\n ID: [\"IDR\"],\n IR: [\"IRR\"],\n IQ: [\"IQD\"],\n IE: [\"EUR\"],\n IM: [\"GBP\"],\n IL: [\"ILS\"],\n IT: [\"EUR\"],\n JM: [\"JMD\"],\n JP: [\"JPY\"],\n JE: [\"GBP\"],\n JO: [\"JOD\"],\n KZ: [\"KZT\"],\n KE: [\"KES\"],\n KI: [\"AUD\"],\n KP: [\"KPW\"],\n KR: [\"KRW\"],\n KW: [\"KWD\"],\n KG: [\"KGS\"],\n LA: [\"LAK\"],\n LV: [\"EUR\"],\n LB: [\"LBP\"],\n LS: [\"LSL\"],\n LR: [\"LRD\"],\n LY: [\"LYD\"],\n LI: [\"CHF\"],\n LT: [\"EUR\"],\n LU: [\"EUR\"],\n MO: [\"MOP\"],\n MG: [\"MGA\"],\n MW: [\"MWK\"],\n MY: [\"MYR\"],\n MV: [\"MVR\"],\n ML: [\"XOF\"],\n MT: [\"EUR\"],\n MH: [\"USD\"],\n MR: [\"MRU\"],\n MU: [\"MUR\"],\n MX: [\"MXN\"],\n FM: [\"USD\"],\n MD: [\"MDL\"],\n MC: [\"EUR\"],\n MN: [\"MNT\"],\n ME: [\"EUR\"],\n MA: [\"MAD\"],\n MZ: [\"MZN\"],\n MM: [\"MMK\"],\n NA: [\"NAD\"],\n NR: [\"AUD\"],\n NP: [\"NPR\"],\n NL: [\"EUR\"],\n NZ: [\"NZD\"],\n NI: [\"NIO\"],\n NE: [\"XOF\"],\n NG: [\"NGN\"],\n MK: [\"MKD\"],\n NO: [\"NOK\"],\n OM: [\"OMR\"],\n PK: [\"PKR\"],\n PW: [\"USD\"],\n PS: [\"ILS\"],\n PA: [\"PAB\"],\n PG: [\"PGK\"],\n PY: [\"PYG\"],\n PE: [\"PEN\"],\n PH: [\"PHP\"],\n PL: [\"PLN\"],\n PT: [\"EUR\"],\n PR: [\"USD\"],\n QA: [\"QAR\"],\n RO: [\"RON\"],\n RU: [\"RUB\"],\n RW: [\"RWF\"],\n KN: [\"XCD\"],\n LC: [\"XCD\"],\n VC: [\"XCD\"],\n WS: [\"WST\"],\n SM: [\"EUR\"],\n ST: [\"STN\"],\n SA: [\"SAR\"],\n SN: [\"XOF\"],\n RS: [\"RSD\"],\n SC: [\"SCR\"],\n SL: [\"SLE\"],\n SG: [\"SGD\"],\n SK: [\"EUR\"],\n SI: [\"EUR\"],\n SB: [\"SBD\"],\n SO: [\"SOS\"],\n ZA: [\"ZAR\"],\n SS: [\"SSP\"],\n ES: [\"EUR\"],\n LK: [\"LKR\"],\n SD: [\"SDG\"],\n SR: [\"SRD\"],\n SE: [\"SEK\"],\n CH: [\"CHF\"],\n SY: [\"SYP\"],\n TW: [\"TWD\"],\n TJ: [\"TJS\"],\n TZ: [\"TZS\"],\n TH: [\"THB\"],\n TL: [\"USD\"],\n TG: [\"XOF\"],\n TO: [\"TOP\"],\n TT: [\"TTD\"],\n TN: [\"TND\"],\n TR: [\"TRY\"],\n TM: [\"TMT\"],\n TV: [\"AUD\"],\n UG: [\"UGX\"],\n UA: [\"UAH\"],\n AE: [\"AED\"],\n GB: [\"GBP\"],\n US: [\"USD\"],\n UY: [\"UYU\"],\n UZ: [\"UZS\"],\n VU: [\"VUV\"],\n VA: [\"EUR\"],\n VE: [\"VES\"],\n VN: [\"VND\"],\n YE: [\"YER\"],\n ZM: [\"ZMW\"],\n ZW: [\"ZWG\"],\n AX: [\"EUR\"],\n FO: [\"DKK\"],\n XK: [\"EUR\"],\n} as const);\n\n/** ISO 639-1 official language codes per country. */\nexport const COUNTRY_LANGUAGES: Readonly<Record<string, readonly string[]>> = Object.freeze({\n AF: [\"ps\", \"fa\"],\n AL: [\"sq\"],\n DZ: [\"ar\"],\n AD: [\"ca\"],\n AO: [\"pt\"],\n AG: [\"en\"],\n AR: [\"es\"],\n AM: [\"hy\"],\n AU: [\"en\"],\n AT: [\"de\"],\n AZ: [\"az\"],\n BS: [\"en\"],\n BH: [\"ar\"],\n BD: [\"bn\"],\n BB: [\"en\"],\n BY: [\"be\", \"ru\"],\n BE: [\"nl\", \"fr\", \"de\"],\n BZ: [\"en\"],\n BJ: [\"fr\"],\n BT: [\"dz\"],\n BO: [\"es\", \"qu\", \"ay\"],\n BA: [\"bs\", \"hr\", \"sr\"],\n BW: [\"en\", \"tn\"],\n BR: [\"pt\"],\n BN: [\"ms\"],\n BG: [\"bg\"],\n BF: [\"fr\"],\n BI: [\"rn\", \"fr\"],\n CV: [\"pt\"],\n KH: [\"km\"],\n CM: [\"fr\", \"en\"],\n CA: [\"en\", \"fr\"],\n CF: [\"fr\", \"sg\"],\n TD: [\"fr\", \"ar\"],\n CL: [\"es\"],\n CN: [\"zh\"],\n CO: [\"es\"],\n KM: [\"ar\", \"fr\"],\n CG: [\"fr\"],\n CD: [\"fr\"],\n CR: [\"es\"],\n CI: [\"fr\"],\n HR: [\"hr\"],\n CU: [\"es\"],\n CY: [\"el\", \"tr\"],\n CZ: [\"cs\"],\n DK: [\"da\"],\n DJ: [\"fr\", \"ar\"],\n DM: [\"en\"],\n DO: [\"es\"],\n EC: [\"es\"],\n EG: [\"ar\"],\n SV: [\"es\"],\n GQ: [\"es\", \"fr\", \"pt\"],\n ER: [\"ti\", \"ar\", \"en\"],\n EE: [\"et\"],\n SZ: [\"en\", \"ss\"],\n ET: [\"am\"],\n FJ: [\"en\", \"fj\"],\n FI: [\"fi\", \"sv\"],\n FR: [\"fr\"],\n GA: [\"fr\"],\n GM: [\"en\"],\n GE: [\"ka\"],\n DE: [\"de\"],\n GH: [\"en\"],\n GR: [\"el\"],\n GD: [\"en\"],\n GT: [\"es\"],\n GN: [\"fr\"],\n GW: [\"pt\"],\n GY: [\"en\"],\n HT: [\"ht\", \"fr\"],\n HN: [\"es\"],\n HU: [\"hu\"],\n IS: [\"is\"],\n IN: [\"hi\", \"en\"],\n ID: [\"id\"],\n IR: [\"fa\"],\n IQ: [\"ar\", \"ku\"],\n IE: [\"en\", \"ga\"],\n IL: [\"he\", \"ar\"],\n IT: [\"it\"],\n JM: [\"en\"],\n JP: [\"ja\"],\n JO: [\"ar\"],\n KZ: [\"kk\", \"ru\"],\n KE: [\"en\", \"sw\"],\n KI: [\"en\"],\n KP: [\"ko\"],\n KR: [\"ko\"],\n KW: [\"ar\"],\n KG: [\"ky\", \"ru\"],\n LA: [\"lo\"],\n LV: [\"lv\"],\n LB: [\"ar\", \"fr\"],\n LS: [\"en\", \"st\"],\n LR: [\"en\"],\n LY: [\"ar\"],\n LI: [\"de\"],\n LT: [\"lt\"],\n LU: [\"lb\", \"fr\", \"de\"],\n MG: [\"mg\", \"fr\"],\n MW: [\"en\", \"ny\"],\n MY: [\"ms\"],\n MV: [\"dv\"],\n ML: [\"fr\"],\n MT: [\"mt\", \"en\"],\n MH: [\"en\", \"mh\"],\n MR: [\"ar\"],\n MU: [\"en\"],\n MX: [\"es\"],\n MD: [\"ro\"],\n MC: [\"fr\"],\n MN: [\"mn\"],\n ME: [\"sr\"],\n MA: [\"ar\"],\n MZ: [\"pt\"],\n MM: [\"my\"],\n NA: [\"en\"],\n NR: [\"en\", \"na\"],\n NP: [\"ne\"],\n NL: [\"nl\"],\n NZ: [\"en\", \"mi\"],\n NI: [\"es\"],\n NE: [\"fr\"],\n NG: [\"en\"],\n MK: [\"mk\"],\n NO: [\"no\", \"nb\", \"nn\"],\n OM: [\"ar\"],\n PK: [\"ur\", \"en\"],\n PW: [\"en\"],\n PA: [\"es\"],\n PG: [\"en\"],\n PY: [\"es\", \"gn\"],\n PE: [\"es\", \"qu\"],\n PH: [\"tl\", \"en\"],\n PL: [\"pl\"],\n PT: [\"pt\"],\n QA: [\"ar\"],\n RO: [\"ro\"],\n RU: [\"ru\"],\n RW: [\"rw\", \"fr\", \"en\"],\n KN: [\"en\"],\n LC: [\"en\"],\n VC: [\"en\"],\n WS: [\"sm\", \"en\"],\n SM: [\"it\"],\n ST: [\"pt\"],\n SA: [\"ar\"],\n SN: [\"fr\"],\n RS: [\"sr\"],\n SC: [\"en\", \"fr\"],\n SL: [\"en\"],\n SG: [\"en\", \"ms\", \"zh\", \"ta\"],\n SK: [\"sk\"],\n SI: [\"sl\"],\n SB: [\"en\"],\n SO: [\"so\", \"ar\"],\n ZA: [\"en\", \"af\", \"zu\"],\n SS: [\"en\"],\n ES: [\"es\"],\n LK: [\"si\", \"ta\"],\n SD: [\"ar\", \"en\"],\n SR: [\"nl\"],\n SE: [\"sv\"],\n CH: [\"de\", \"fr\", \"it\", \"rm\"],\n SY: [\"ar\"],\n TW: [\"zh\"],\n TJ: [\"tg\"],\n TZ: [\"sw\", \"en\"],\n TH: [\"th\"],\n TL: [\"pt\"],\n TG: [\"fr\"],\n TO: [\"en\", \"to\"],\n TT: [\"en\"],\n TN: [\"ar\"],\n TR: [\"tr\"],\n TM: [\"tk\"],\n TV: [\"en\"],\n UG: [\"en\", \"sw\"],\n UA: [\"uk\"],\n AE: [\"ar\"],\n GB: [\"en\"],\n US: [\"en\"],\n UY: [\"es\"],\n UZ: [\"uz\"],\n VU: [\"en\", \"fr\", \"bi\"],\n VA: [\"it\", \"la\"],\n VE: [\"es\"],\n VN: [\"vi\"],\n YE: [\"ar\"],\n ZM: [\"en\"],\n ZW: [\"en\", \"sn\", \"nd\"],\n AS: [\"en\", \"sm\"],\n AW: [\"nl\"],\n BM: [\"en\"],\n CW: [\"nl\"],\n FO: [\"fo\", \"da\"],\n GI: [\"en\"],\n GL: [\"kl\", \"da\"],\n GG: [\"en\"],\n GU: [\"en\"],\n HK: [\"zh\", \"en\"],\n IM: [\"en\"],\n JE: [\"en\"],\n XK: [\"sq\", \"sr\"],\n MO: [\"zh\", \"pt\"],\n PR: [\"es\", \"en\"],\n} as const);\n\n/** Aliases for Country.tryParse — common alternative names not in the canonical list. */\nexport const COUNTRY_ALIASES: Readonly<Record<string, string>> = Object.freeze({\n USA: \"US\",\n UK: \"GB\",\n Holland: \"NL\",\n \"Czech Republic\": \"CZ\",\n \"Ivory Coast\": \"CI\",\n Burma: \"MM\",\n Swaziland: \"SZ\",\n Persia: \"IR\",\n \"Great Britain\": \"GB\",\n England: \"GB\",\n UAE: \"AE\",\n \"South Korea\": \"KR\",\n \"North Korea\": \"KP\",\n \"Republic of Ireland\": \"IE\",\n Suisse: \"CH\",\n Svizzera: \"CH\",\n Belgique: \"BE\",\n Noreg: \"NO\",\n Vitryssland: \"BY\",\n});\n\n/**\n * Country alpha-2 codes that own each shared phone calling code (`+1` is shared\n * by US, Canada, Caribbean countries; `+44` by UK, Guernsey, Isle of Man,\n * Jersey; `+7` by Russia and Kazakhstan). The first entry is the primary.\n */\nexport const PRIMARY_BY_CALLING_CODE: Readonly<Record<string, string>> = Object.freeze({\n \"1\": \"US\",\n \"44\": \"GB\",\n \"7\": \"RU\",\n});\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Currency } from \"../finance/currency.js\";\nimport { Continent } from \"./continent.js\";\nimport { CountryCapital } from \"./country-capital.js\";\nimport { GeoCoordinate } from \"./geo-coordinate.js\";\nimport { Language } from \"./language.js\";\nimport { COUNTRY_ROWS, type CountryRow } from \"./country-data.js\";\nimport { COUNTRY_COORDINATES } from \"./country-coordinates.js\";\nimport { getCountryCapital } from \"./country-capitals.js\";\nimport {\n COUNTRY_ALIASES,\n COUNTRY_CURRENCIES,\n COUNTRY_LANGUAGES,\n EEA_COUNTRIES,\n EU_COUNTRIES,\n NORDIC_COUNTRIES,\n PRIMARY_BY_CALLING_CODE,\n SCHENGEN_COUNTRIES,\n SEPA_COUNTRIES,\n} from \"./country-metadata.js\";\n\nconst MAX_INPUT_LENGTH = 100;\n\n/** A neighboring country with its distance from a reference point (kilometers). */\nexport interface CountryDistance {\n readonly country: Country;\n readonly distanceKilometers: number;\n}\n\n/**\n * A country identified by its English name, Swedish name, local name (endonym),\n * or ISO 3166-1 codes. Each country exposes its phone calling code, ccTLD,\n * continent, European classifications (EU, EEA, Schengen, Nordics, SEPA), and\n * currency metadata. Parsing accepts English/Swedish/local names, alpha-2 and\n * alpha-3 codes, and common aliases (USA, UK, Holland, etc.).\n */\nexport class Country {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Country\",\n localizedName: \"Land\",\n emoji: \"\\u{1F30D}\",\n sources: Object.freeze([\n \"https://www.iso.org/iso-3166-country-codes.html\",\n \"https://en.wikipedia.org/wiki/ISO_3166-1\",\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://www.iana.org/domains/root/db\",\n \"https://www.wikidata.org/wiki/Property:P625\",\n \"https://www.wikidata.org/wiki/Property:P36\",\n \"https://www.wikidata.org/wiki/Property:P47\",\n ]),\n });\n\n readonly alpha2Code: string;\n readonly alpha3Code: string;\n readonly numericCode: number;\n readonly englishName: string;\n readonly localizedName: string;\n readonly nativeName: string;\n readonly callingCode: string;\n readonly topLevelDomain: string;\n readonly continent: Continent;\n readonly currencyCodes: readonly string[];\n readonly languageCodes: readonly string[];\n\n private constructor(row: CountryRow) {\n this.alpha2Code = row.alpha2;\n this.alpha3Code = row.alpha3;\n this.numericCode = row.numeric;\n this.englishName = row.en;\n this.localizedName = row.sv;\n this.nativeName = row.native;\n this.callingCode = row.callingCode;\n this.topLevelDomain = row.tld;\n this.continent = row.continent;\n this.currencyCodes = COUNTRY_CURRENCIES[row.alpha2] ?? [];\n this.languageCodes = COUNTRY_LANGUAGES[row.alpha2] ?? [];\n }\n\n /** The canonical value of this country: its ISO 3166-1 alpha-2 code. */\n get value(): string {\n return this.alpha2Code;\n }\n\n /** Display name in the current culture (Swedish or English). */\n get displayName(): string {\n return PrimitivesDefaults.useLocalizedDisplayNames ? this.localizedName : this.englishName;\n }\n\n /** Culture-independent display form. Always the English name. */\n get formatted(): string {\n return this.englishName;\n }\n\n /** Geographic coordinate of the country (centroid, from Wikidata P625). */\n get coordinate(): GeoCoordinate {\n const c = COUNTRY_COORDINATES[this.alpha2Code];\n if (!c) throw new Error(`No coordinate for country ${this.alpha2Code}.`);\n return GeoCoordinate.create(c[0], c[1]);\n }\n\n /** Approximate latitude (WGS 84) of the country centroid. */\n get latitude(): number {\n return this.coordinate.latitude;\n }\n\n /** Approximate longitude (WGS 84) of the country centroid. */\n get longitude(): number {\n return this.coordinate.longitude;\n }\n\n /** Capital city, or `null` for entries without a capital (e.g. Antarctica). */\n get capital(): CountryCapital | null {\n return getCountryCapital(this.alpha2Code);\n }\n\n get isInEuropeanUnion(): boolean {\n return EU_COUNTRIES.has(this.alpha2Code);\n }\n get isInEea(): boolean {\n return EEA_COUNTRIES.has(this.alpha2Code);\n }\n get isInSchengen(): boolean {\n return SCHENGEN_COUNTRIES.has(this.alpha2Code);\n }\n get isInNordics(): boolean {\n return NORDIC_COUNTRIES.has(this.alpha2Code);\n }\n get isInSepa(): boolean {\n return SEPA_COUNTRIES.has(this.alpha2Code);\n }\n\n /** True when the euro is among the country's legal tenders. */\n get usesEuro(): boolean {\n return this.currencyCodes.includes(\"EUR\");\n }\n\n /** Primary ISO 4217 currency code, or `null` when unknown. */\n get currencyCode(): string | null {\n return this.currencyCodes[0] ?? null;\n }\n\n /**\n * Primary legal-tender currency, or `null` when unknown. Countries with\n * several legal tenders (Cuba, Panama, Namibia) return the first; use\n * {@link currencies} for the full list.\n */\n get currency(): Currency | null {\n const code = this.currencyCode;\n return code == null ? null : Currency.tryParse(code);\n }\n\n /** All recognized currencies for this country, in priority order. */\n get currencies(): readonly Currency[] {\n return Object.freeze(\n this.currencyCodes\n .map((code) => Currency.tryParse(code))\n .filter((c): c is Currency => c !== null),\n );\n }\n\n /**\n * Primary official language, or `null` when unknown. Countries with several\n * official languages (Belgium, Switzerland) return the most widely spoken;\n * use {@link officialLanguages} for the full list.\n */\n get primaryLanguage(): Language | null {\n const code = this.languageCodes[0];\n return code == null ? null : Language.tryParse(code);\n }\n\n /** All official languages of the country, in priority order. */\n get officialLanguages(): readonly Language[] {\n return Object.freeze(\n this.languageCodes\n .map((code) => Language.tryParse(code))\n .filter((l): l is Language => l !== null),\n );\n }\n\n static tryParse(input: string | null | undefined): Country | null {\n if (input == null) return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const direct = lookupCi(sanitized);\n if (direct) return direct;\n\n if (sanitized.length > 4 && sanitized.slice(0, 4).toLowerCase() === \"the \") {\n const without = sanitized.slice(4);\n const stripped = lookupCi(without);\n if (stripped) return stripped;\n }\n return null;\n }\n\n static parse(input: string): Country {\n const r = Country.tryParse(input);\n if (r === null) throw new Error(\"Unknown country.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Country.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Country.tryParse(input);\n if (r) return r.displayName;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Country.tryParse(input);\n if (r) return r.alpha2Code;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Country.normalize(input) === input;\n }\n\n /** Look up a country by its phone calling code. Primary owner wins for shared codes. */\n static tryFindByCallingCode(callingCode: string | null | undefined): Country | null {\n if (callingCode == null) return null;\n const trimmed = callingCode.trim();\n if (trimmed.length === 0) return null;\n return BY_CALLING_CODE.get(trimmed) ?? null;\n }\n\n /** All known countries. */\n static get all(): readonly Country[] {\n return ALL_COUNTRIES;\n }\n\n /**\n * Returns countries within `radiusKm` of this country, ordered by distance.\n */\n findNeighbors(radiusKm: number): readonly CountryDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n return Country.findNeighbors(this.coordinate, radiusKm).filter((d) => d.country !== this);\n }\n\n /** Returns countries within `radiusKm` of `coordinate`, ordered by distance. */\n static findNeighbors(coordinate: GeoCoordinate, radiusKm: number): readonly CountryDistance[] {\n if (!Number.isFinite(radiusKm) || radiusKm <= 0) {\n throw new RangeError(\"radiusKm must be a positive finite number.\");\n }\n const out: CountryDistance[] = [];\n for (const c of ALL_COUNTRIES) {\n const dist = GeoCoordinate.distanceKilometers(coordinate, c.coordinate);\n if (dist <= radiusKm) out.push({ country: c, distanceKilometers: dist });\n }\n out.sort((a, b) => a.distanceKilometers - b.distanceKilometers);\n return out;\n }\n\n /**\n * Scans unstructured text for country names (4+ chars, word-bounded). Low confidence\n * because country names can occur in non-geographic contexts.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<Country>[] {\n if (!text) return [];\n const out: TextCandidate<Country>[] = [];\n SCAN_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN_PATTERN.exec(text)) !== null) {\n const country = Country.tryParse(m[0]);\n if (!country) continue;\n out.push(\n new TextCandidate<Country>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"Country\",\n category: TextCandidateCategory.Geography,\n normalizedForm: country.toNormalizedString(),\n formattedForm: country.toString(),\n maskedForm: country.localizedName,\n confidence: TextMatchConfidence.Low,\n value: country,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.alpha2Code;\n }\n toString(): string {\n return this.displayName;\n }\n toDisplayString(): string {\n return this.displayName;\n }\n toEnglishString(): string {\n return this.englishName;\n }\n toNativeString(): string {\n return this.nativeName;\n }\n\n equals(other: Country | null | undefined): boolean {\n return other != null && this.alpha2Code === other.alpha2Code;\n }\n compareTo(other: Country | null | undefined): number {\n if (other == null) return 1;\n return this.alpha2Code < other.alpha2Code ? -1 : this.alpha2Code > other.alpha2Code ? 1 : 0;\n }\n\n static get Sweden(): Country {\n return getByAlpha2(\"SE\");\n }\n static get Norway(): Country {\n return getByAlpha2(\"NO\");\n }\n static get Finland(): Country {\n return getByAlpha2(\"FI\");\n }\n static get Denmark(): Country {\n return getByAlpha2(\"DK\");\n }\n static get Iceland(): Country {\n return getByAlpha2(\"IS\");\n }\n static get Germany(): Country {\n return getByAlpha2(\"DE\");\n }\n static get Poland(): Country {\n return getByAlpha2(\"PL\");\n }\n static get Estonia(): Country {\n return getByAlpha2(\"EE\");\n }\n static get Lithuania(): Country {\n return getByAlpha2(\"LT\");\n }\n static get Latvia(): Country {\n return getByAlpha2(\"LV\");\n }\n static get Romania(): Country {\n return getByAlpha2(\"RO\");\n }\n static get Bulgaria(): Country {\n return getByAlpha2(\"BG\");\n }\n static get CzechRepublic(): Country {\n return getByAlpha2(\"CZ\");\n }\n static get Spain(): Country {\n return getByAlpha2(\"ES\");\n }\n static get Netherlands(): Country {\n return getByAlpha2(\"NL\");\n }\n static get Greece(): Country {\n return getByAlpha2(\"GR\");\n }\n static get Italy(): Country {\n return getByAlpha2(\"IT\");\n }\n static get Slovenia(): Country {\n return getByAlpha2(\"SI\");\n }\n static get Croatia(): Country {\n return getByAlpha2(\"HR\");\n }\n static get Portugal(): Country {\n return getByAlpha2(\"PT\");\n }\n static get Hungary(): Country {\n return getByAlpha2(\"HU\");\n }\n static get France(): Country {\n return getByAlpha2(\"FR\");\n }\n static get Slovakia(): Country {\n return getByAlpha2(\"SK\");\n }\n static get Belgium(): Country {\n return getByAlpha2(\"BE\");\n }\n static get UnitedKingdom(): Country {\n return getByAlpha2(\"GB\");\n }\n static get Austria(): Country {\n return getByAlpha2(\"AT\");\n }\n static get Cyprus(): Country {\n return getByAlpha2(\"CY\");\n }\n static get Switzerland(): Country {\n return getByAlpha2(\"CH\");\n }\n static get Ireland(): Country {\n return getByAlpha2(\"IE\");\n }\n static get Luxembourg(): Country {\n return getByAlpha2(\"LU\");\n }\n static get Malta(): Country {\n return getByAlpha2(\"MT\");\n }\n static get Liechtenstein(): Country {\n return getByAlpha2(\"LI\");\n }\n\n /** @internal */\n static _fromRow(row: CountryRow): Country {\n return new Country(row);\n }\n}\n\nconst ALL_COUNTRIES: readonly Country[] = COUNTRY_ROWS.map((r) => Country._fromRow(r));\n\nconst BY_ALPHA2 = new Map<string, Country>();\nconst BY_NAME = new Map<string, Country>();\nconst BY_CALLING_CODE = new Map<string, Country>();\n\nfor (const c of ALL_COUNTRIES) {\n BY_ALPHA2.set(c.alpha2Code.toUpperCase(), c);\n BY_NAME.set(c.alpha2Code.toUpperCase(), c);\n BY_NAME.set(c.alpha3Code.toUpperCase(), c);\n BY_NAME.set(c.englishName.toLowerCase(), c);\n if (!BY_NAME.has(c.localizedName.toLowerCase())) BY_NAME.set(c.localizedName.toLowerCase(), c);\n if (\n c.nativeName.toLowerCase() !== c.englishName.toLowerCase() &&\n !BY_NAME.has(c.nativeName.toLowerCase())\n ) {\n BY_NAME.set(c.nativeName.toLowerCase(), c);\n }\n if (!BY_CALLING_CODE.has(c.callingCode)) BY_CALLING_CODE.set(c.callingCode, c);\n}\n\nfor (const [aliasOrCode, alpha2] of Object.entries(COUNTRY_ALIASES)) {\n const target = BY_ALPHA2.get(alpha2.toUpperCase());\n if (target) BY_NAME.set(aliasOrCode.toLowerCase(), target);\n}\n\nfor (const [code, alpha2] of Object.entries(PRIMARY_BY_CALLING_CODE)) {\n const target = BY_ALPHA2.get(alpha2.toUpperCase());\n if (target) BY_CALLING_CODE.set(code, target);\n}\n\nconst SCAN_PATTERN: RegExp = (() => {\n const names = [...BY_NAME.keys()]\n .filter((n) => n.length >= 4)\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n return new RegExp(`(?<![\\\\p{L}\\\\p{N}_])(?:${names.join(\"|\")})(?![\\\\p{L}\\\\p{N}_])`, \"giu\");\n})();\n\nfunction getByAlpha2(code: string): Country {\n const c = BY_ALPHA2.get(code.toUpperCase());\n if (!c) throw new Error(`Unknown country code ${code}.`);\n return c;\n}\n\nfunction lookupCi(input: string): Country | null {\n const upper = input.toUpperCase();\n const a2 = BY_ALPHA2.get(upper);\n if (a2) return a2;\n const lower = input.toLowerCase();\n return BY_NAME.get(lower) ?? BY_NAME.get(upper) ?? null;\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 100;\n\nconst NAME_PATTERN =\n /^(?:[\\p{L}\\p{M}]{2,}|['\\p{L}\\p{M}]{2,}|[\\p{Lo}])(?:['\\p{Zs}-][\\p{L}\\p{M}]+)*$/u;\n\n/**\n * The postal city (`postort`) is the locality associated with a postal code.\n * Normalization applies Swedish-aware title casing.\n */\nexport class AddressCity {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"City\",\n localizedName: \"Postort\",\n emoji: \"\\u{1F3D9}\\uFE0F\",\n sources: Object.freeze([\"https://www.postnord.se/\"]),\n });\n\n readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): AddressCity | null {\n if (input == null || input.trim() === \"\") return null;\n const cleaned = collapseWhitespace(input);\n if (cleaned.length === 0 || cleaned.length > MAX_INPUT_LENGTH) return null;\n const capitalized = capitalizeEachWord(cleaned);\n if ([...capitalized].some(isDisallowed)) return null;\n if (!NAME_PATTERN.test(capitalized)) return null;\n return new AddressCity(capitalized);\n }\n\n static parse(input: string): AddressCity {\n const r = AddressCity.tryParse(input);\n if (r === null) throw new Error(\"Invalid city name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return AddressCity.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressCity.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return AddressCity.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && AddressCity.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: AddressCity | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: AddressCity | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction capitalizeEachWord(input: string): string {\n return input\n .split(\" \")\n .filter(Boolean)\n .map((w) => capitalizeHyphenated(w))\n .join(\" \");\n}\n\nfunction capitalizeHyphenated(word: string): string {\n return word.split(\"-\").map(capitalizeWord).join(\"-\");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const culture = PrimitivesDefaults.culture;\n const lowered = word.toLocaleLowerCase(culture);\n for (let i = 0; i < lowered.length; i++) {\n if (/\\p{L}/u.test(lowered[i]!)) {\n return lowered.slice(0, i) + lowered[i]!.toLocaleUpperCase(culture) + lowered.slice(i + 1);\n }\n }\n return lowered;\n}\n\nfunction isDisallowed(c: string): boolean {\n return /[\\p{Cc}\\p{Cf}\\p{Cs}\\p{Co}\\p{Cn}]/u.test(c);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\nconst ADDRESS_PATTERN = /^[\\p{L}0-9\\s,.:'/-]+$/u;\nconst CARE_OF = /^c[/.]o\\.?\\s+/i;\nconst APARTMENT = /[,\\s]+(?:lgh\\.?|lägenhet|apt\\.?)\\s*(\\d+\\w*)\\s*$/iu;\nconst BOX = /^(?:p\\.?o\\.?\\s*)?box\\s+(\\d{1,7})\\s*$/i;\nconst STREET_NUMBER = /^(.*?)\\s+(\\d+[A-ZÅÄÖ]*)$/u;\n\n/**\n * A street address (`gatuadress`). Extracts care-of (c/o), apartment number\n * (lgh/apt), and post box (Box) when present.\n */\nexport class AddressStreet {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Street Address\",\n localizedName: \"Gatuadress\",\n emoji: \"\\u{1F6E3}\\uFE0F\",\n sources: Object.freeze([\"https://www.lantmateriet.se/\"]),\n });\n\n readonly street: string;\n readonly streetName: string | null;\n readonly streetNumber: string | null;\n readonly apartmentNumber: string | null;\n readonly careOf: string | null;\n readonly postBox: string | null;\n\n private constructor(\n street: string,\n streetName: string | null,\n streetNumber: string | null,\n apartmentNumber: string | null,\n careOf: string | null,\n postBox: string | null,\n ) {\n this.street = street;\n this.streetName = streetName;\n this.streetNumber = streetNumber;\n this.apartmentNumber = apartmentNumber;\n this.careOf = careOf;\n this.postBox = postBox;\n }\n\n get isPostBox(): boolean {\n return this.postBox !== null;\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { city?: string | null; zipCode?: string | null },\n ): AddressStreet | null {\n if (input == null || input.trim() === \"\") return null;\n\n let text = collapseWhitespace(input);\n if (text.length === 0 || text.length > MAX_INPUT_LENGTH) return null;\n\n let careOf: string | null = null;\n const co = text.match(CARE_OF);\n if (co) {\n const after = text.slice(co[0].length);\n const comma = after.indexOf(\",\");\n if (comma >= 0) {\n careOf = after.slice(0, comma).trim();\n text = after.slice(comma + 1).trim();\n } else {\n careOf = after.trim();\n text = \"\";\n }\n if (careOf.trim() === \"\") careOf = null;\n }\n\n if (text.trim() !== \"\") {\n const boxText = collapseWhitespace(text.replace(/,/g, \" \"));\n const boxMatch = boxText.match(BOX);\n if (boxMatch) {\n const postBox = boxMatch[1]!;\n return new AddressStreet(`Box ${postBox}`, null, null, null, careOf, postBox);\n }\n }\n\n if (text.trim() === \"\") {\n if (careOf !== null) {\n return new AddressStreet(`c/o ${careOf}`, null, null, null, careOf, null);\n }\n return null;\n }\n\n let apartment: string | null = null;\n const apt = text.match(APARTMENT);\n if (apt) {\n apartment = apt[1]!;\n text = text.slice(0, apt.index!).trim();\n }\n\n const normalized = normalizeStreet(text, options?.city ?? null, options?.zipCode ?? null);\n if (!validateStreet(normalized)) return null;\n\n let streetName: string | null = null;\n let streetNumber: string | null = null;\n const num = normalized.match(STREET_NUMBER);\n if (num) {\n streetName = num[1]!;\n streetNumber = num[2]!;\n }\n\n return new AddressStreet(normalized, streetName, streetNumber, apartment, careOf, null);\n }\n\n static parse(input: string): AddressStreet {\n const r = AddressStreet.tryParse(input);\n if (r === null) throw new Error(\"Invalid street address.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return AddressStreet.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressStreet.tryParse(input);\n if (r) return r.street;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return AddressStreet.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && AddressStreet.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.street;\n }\n toString(): string {\n return this.street;\n }\n\n equals(other: AddressStreet | null | undefined): boolean {\n return other != null && this.street === other.street;\n }\n compareTo(other: AddressStreet | null | undefined): number {\n if (other == null) return 1;\n return this.street < other.street ? -1 : this.street > other.street ? 1 : 0;\n }\n}\n\nfunction normalizeStreet(input: string, city: string | null, zip: string | null): string {\n let cleaned = collapseWhitespace(input);\n if (cleaned === \"\") return \"\";\n cleaned = collapseWhitespace(cleaned.replace(/,/g, \" \"));\n cleaned = cleaned.replace(/(\\p{L})(\\d+\\p{L}*)$/u, \"$1 $2\");\n cleaned = collapseWhitespace(cleaned);\n let stripped = removeTrailingCityAndZip(cleaned, city, zip);\n if (shouldSentenceCase(stripped)) stripped = toSentenceCase(stripped);\n stripped = uppercaseHouseNumberSuffixes(stripped);\n return stripped;\n}\n\nfunction validateStreet(addr: string): boolean {\n if (!addr || addr.trim() === \"\") return false;\n if (/[\\p{Cc}]/u.test(addr)) return false;\n if (addr !== addr.trim()) return false;\n if (addr.includes(\" \")) return false;\n if (addr.length < 5 || addr.length > 50) return false;\n if (/[\\p{Cn}]/u.test(addr)) return false;\n return ADDRESS_PATTERN.test(addr);\n}\n\nfunction shouldSentenceCase(input: string): boolean {\n if (!input || input.trim() === \"\") return false;\n const letters = [...input].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return false;\n const allUpper = letters.every((c) => c === c.toLocaleUpperCase(PrimitivesDefaults.culture));\n let firstLetterIndex = -1;\n for (let i = 0; i < input.length; i++) {\n if (/\\p{L}/u.test(input[i]!)) {\n firstLetterIndex = i;\n break;\n }\n }\n if (firstLetterIndex === -1) return allUpper;\n const startsWithUpper =\n input[firstLetterIndex] ===\n input[firstLetterIndex]!.toLocaleUpperCase(PrimitivesDefaults.culture);\n return allUpper || !startsWithUpper;\n}\n\nfunction toSentenceCase(input: string): string {\n if (!input || input.trim() === \"\") return \"\";\n const culture = PrimitivesDefaults.culture;\n const lowered = input.toLocaleLowerCase(culture);\n let out = lowered;\n for (let i = 0; i < lowered.length; i++) {\n if (/\\p{L}/u.test(lowered[i]!)) {\n out = lowered.slice(0, i) + lowered[i]!.toLocaleUpperCase(culture) + lowered.slice(i + 1);\n break;\n }\n }\n return uppercaseHouseNumberSuffixes(out);\n}\n\nfunction uppercaseHouseNumberSuffixes(input: string): string {\n return input.replace(\n /(\\d+)(\\p{L}+)(?=[^\\p{L}\\d]|$)/gu,\n (_, d: string, s: string) => d + s.toLocaleUpperCase(PrimitivesDefaults.culture),\n );\n}\n\nfunction removeTrailingCityAndZip(street: string, city: string | null, zip: string | null): string {\n const cityNorm = city == null ? \"\" : collapseWhitespace(city);\n const zipNorm = zip == null ? \"\" : collapseWhitespace(zip);\n const cityU = cityNorm.toUpperCase();\n const zipU = zipNorm.toUpperCase();\n const zipNoSpaceU = zipNorm.replace(/ /g, \"\").toUpperCase();\n const orig = collapseWhitespace(street.replace(/,/g, \" \"));\n const upper = orig.toUpperCase();\n\n const has = (s: string) => s.length > 0;\n const removeTail = (s: string, tail: number) =>\n tail <= 0 || tail > s.length ? s : collapseWhitespace(s.slice(0, s.length - tail));\n\n if (has(cityU) && has(zipU) && upper.endsWith(` ${zipU} ${cityU}`))\n return removeTail(orig, (zipU + \" \" + cityU).length);\n if (has(cityU) && has(zipNoSpaceU) && upper.endsWith(` ${zipNoSpaceU} ${cityU}`))\n return removeTail(orig, (zipNoSpaceU + \" \" + cityU).length);\n if (has(cityU) && has(zipU) && upper.endsWith(` ${cityU} ${zipU}`))\n return removeTail(orig, (cityU + \" \" + zipU).length);\n if (has(cityU) && has(zipNoSpaceU) && upper.endsWith(` ${cityU} ${zipNoSpaceU}`))\n return removeTail(orig, (cityU + \" \" + zipNoSpaceU).length);\n if (has(cityU) && upper.endsWith(` ${cityU}`)) return removeTail(orig, cityU.length);\n if (has(zipU) && upper.endsWith(` ${zipU}`)) return removeTail(orig, zipU.length);\n if (has(zipNoSpaceU) && upper.endsWith(` ${zipNoSpaceU}`))\n return removeTail(orig, zipNoSpaceU.length);\n return orig;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { keepDigits, sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Country } from \"../geography/index.js\";\n\nconst MAX_INPUT_LENGTH = 20;\n\nconst SWEDISH_DIGITS = /^\\d{5}$/;\nconst INTERNATIONAL =\n /^(?:[0-9]{3}|[0-9]{4}|[0-9]{3}\\s?[0-9]{2}|[0-9]{6}|[0-9]{7}|[0-9]{4}\\s?[A-Z]{2}|[A-Z]{3}\\s?[0-9]{4}|980[0-9]{2}|(?:[A-Z][0-9]|[A-Z][0-9][A-Z]|[A-Z]{2}[0-9]|[A-Z]{2}[0-9][A-Z])\\s?[0-9][A-Z]{2}|[A-Z0-9]{7}|[A-Z]{2}[0-9]{3}|LT-?[0-9]{5}|LV-?[0-9]{4}|MD-?[0-9]{4}|DK[-\\s]?[0-9]{4})$/;\n\nconst SCAN = /(?<!\\d)\\d{3}\\s?\\d{2}(?!\\d)/g;\n\n/**\n * A postal code (`postnummer`). Swedish 5-digit codes (formatted `NNN NN`) and\n * many international formats (Danish `DK-9000`, Dutch `1012 AB`, British `W1A 1AB`)\n * are accepted.\n */\nexport class AddressZipCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Zip Code\",\n localizedName: \"Postnummer\",\n emoji: \"\\u{1F4EE}\",\n sources: Object.freeze([\n \"https://www.postnord.se/\",\n \"https://sv.wikipedia.org/wiki/Postnummer_i_Sverige\",\n ]),\n });\n\n readonly value: string;\n readonly formatted: string;\n readonly country: Country | null;\n\n private constructor(value: string, formatted: string, country: Country | null) {\n this.value = value;\n this.formatted = formatted;\n this.country = country;\n }\n\n get isSwedish(): boolean {\n return this.country?.alpha2Code === \"SE\";\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { country?: Country | null },\n ): AddressZipCode | null {\n if (input == null) return null;\n const sanitized = sanitizeInput(input).trim();\n if (sanitized.length === 0 || sanitized.length > MAX_INPUT_LENGTH) return null;\n\n const country = options?.country ?? null;\n const effectiveCountry = country?.alpha2Code ?? PrimitivesDefaults.countryAlpha2Code;\n\n if (country?.alpha2Code === \"SE\") return AddressZipCode.tryParseSwedish(sanitized);\n\n if (country) {\n const intl = AddressZipCode.tryParseInternational(sanitized, country);\n if (intl) return intl;\n return null;\n }\n\n if (effectiveCountry === \"SE\") {\n return (\n AddressZipCode.tryParseSwedish(sanitized) ?? AddressZipCode.tryParseInternational(sanitized)\n );\n }\n return (\n AddressZipCode.tryParseInternational(sanitized) ?? AddressZipCode.tryParseSwedish(sanitized)\n );\n }\n\n static parse(input: string, options?: { country?: Country | null }): AddressZipCode {\n const r = AddressZipCode.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid zip code.\");\n return r;\n }\n\n static isValid(\n input: string | null | undefined,\n options?: { country?: Country | null },\n ): boolean {\n return AddressZipCode.tryParse(input, options) !== null;\n }\n\n /** Parse as a Swedish 5-digit postal code only. */\n static tryParseSwedish(input: string | null | undefined): AddressZipCode | null {\n if (input == null) return null;\n let cleaned = input.toString();\n for (let i = 0; i < cleaned.length; i++) {\n if (/\\p{L}/u.test(cleaned[i]!)) {\n cleaned = cleaned.slice(0, i).trimEnd();\n break;\n }\n }\n if (cleaned.length === 0) return null;\n const digits = keepDigits(cleaned);\n if (!SWEDISH_DIGITS.test(digits)) return null;\n const formatted = `${digits.slice(0, 3)} ${digits.slice(3)}`;\n return new AddressZipCode(digits, formatted, Country.Sweden);\n }\n\n /** Parse as a non-Swedish international postal code. */\n static tryParseInternational(\n input: string | null | undefined,\n country: Country | null = null,\n ): AddressZipCode | null {\n if (input == null) return null;\n const trimmed = input.toString();\n if (trimmed.length === 0) return null;\n if (/[\\p{Cc}]/u.test(trimmed)) return null;\n if (![...trimmed].every((c) => /[\\p{L}\\p{N}]/u.test(c) || /\\s/.test(c) || c === \"-\")) {\n return null;\n }\n const normalized = normalizeInternational(trimmed);\n if (!normalized) return null;\n if (!INTERNATIONAL.test(normalized)) return null;\n const resolved = country ?? inferCountryFromPrefix(normalized);\n return new AddressZipCode(normalized, normalized, resolved);\n }\n\n static format(\n input: string | null | undefined,\n options?: { country?: Country | null; fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressZipCode.tryParse(input, options);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { country?: Country | null; fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = AddressZipCode.tryParse(input, options);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const trimmed = input.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && AddressZipCode.normalize(input) === input;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<AddressZipCode>[] {\n if (!text) return [];\n const out: TextCandidate<AddressZipCode>[] = [];\n SCAN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN.exec(text)) !== null) {\n const zip = AddressZipCode.tryParseSwedish(m[0]);\n if (!zip) continue;\n out.push(\n new TextCandidate<AddressZipCode>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"AddressZipCode\",\n category: TextCandidateCategory.Contact,\n normalizedForm: zip.toNormalizedString(),\n formattedForm: zip.toString(),\n maskedForm: maskZip(zip),\n confidence: TextMatchConfidence.Low,\n value: zip,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n\n equals(other: AddressZipCode | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: AddressZipCode | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction normalizeInternational(input: string): string {\n let cleaned = input.trim().toUpperCase().replace(/\\s+/g, \"\");\n const digits = keepDigits(cleaned);\n if (cleaned.startsWith(\"DK\") && digits.length === 4) return `DK-${digits}`;\n if (cleaned.startsWith(\"LV\") && digits.length === 4) return `LV-${digits}`;\n if (cleaned.startsWith(\"MD\") && digits.length === 4) return `MD-${digits}`;\n if (cleaned.startsWith(\"AD\") && digits.length === 3) return `AD${digits}`;\n cleaned = cleaned.replace(/[^A-Z0-9-]/g, \"\");\n if (/^\\d+-\\d+$/.test(cleaned)) return cleaned.replace(/-/g, \"\");\n return cleaned;\n}\n\nfunction inferCountryFromPrefix(normalized: string): Country | null {\n if (normalized.startsWith(\"DK-\")) return Country.Denmark;\n if (normalized.startsWith(\"LV-\")) return Country.Latvia;\n if (normalized.startsWith(\"MD-\")) return Country.tryParse(\"MD\");\n if (normalized.startsWith(\"AD\") && normalized.length === 5 && /^\\d+$/.test(normalized.slice(2))) {\n return Country.tryParse(\"AD\");\n }\n return null;\n}\n\n/** Internal masking for zip codes used in scan results. */\nexport function maskZip(zip: AddressZipCode): string {\n const f = zip.formatted;\n return f.replace(/\\d/g, \"*\");\n}\n","import type { Country } from \"../geography/index.js\";\nimport type { Address } from \"./address.js\";\nimport type { ICountryAddress } from \"./country-address.js\";\n\n/**\n * A country-specific address implementation, registered by the module that\n * defines it.\n *\n * `Address` lives below the country-specific address types in the import graph,\n * so it cannot reference them directly. Each implementation registers itself on\n * module load instead, mirroring the static registry the .NET `Address` type\n * builds at type-initialization time.\n *\n * Registration happens in `registerDefaultCountryAddresses()`, which every\n * package entry point calls via `contact/index.ts`. Code inside this package\n * that deep-imports `address.ts` alone will only see the countries it\n * registered itself.\n */\nexport interface CountryAddressRegistration {\n readonly country: Country;\n readonly tryWrap: (address: Address) => ICountryAddress | null;\n readonly formatZip: (value: string) => string | null;\n}\n\nconst registry = new Map<string, CountryAddressRegistration>();\n\n/** Registration order determines the order of `Address.supportedCountryAddressTypes`. */\nexport function registerCountryAddress(registration: CountryAddressRegistration): void {\n registry.set(registration.country.alpha2Code.toUpperCase(), registration);\n}\n\nexport function getCountryAddressRegistration(\n alpha2Code: string,\n): CountryAddressRegistration | null {\n return registry.get(alpha2Code.toUpperCase()) ?? null;\n}\n\nexport function getRegisteredCountryAddressCountries(): readonly Country[] {\n return Object.freeze([...registry.values()].map((r) => r.country));\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { Country } from \"../geography/index.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\nimport type { ICountryAddress } from \"./country-address.js\";\nimport {\n getCountryAddressRegistration,\n getRegisteredCountryAddressCountries,\n} from \"./country-address-registry.js\";\n\nconst MAX_INPUT_LENGTH = 1000;\n\n/** A complete address combining street, zip, city and country. */\nexport class Address {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Address\",\n localizedName: \"Adress\",\n emoji: \"\\u{1F3E0}\",\n sources: Object.freeze([\n \"https://www.postnord.se/\",\n \"https://www.lantmateriet.se/\",\n \"https://www.iso.org/iso-3166-country-codes.html\",\n ]),\n });\n\n readonly street: AddressStreet;\n readonly zipCode: AddressZipCode | null;\n readonly city: AddressCity | null;\n readonly country: Country | null;\n\n constructor(\n street: AddressStreet,\n zipCode: AddressZipCode | null = null,\n city: AddressCity | null = null,\n country: Country | null = null,\n ) {\n this.street = street;\n this.zipCode = zipCode;\n this.city = city;\n this.country = country;\n }\n\n get careOf(): string | null {\n return this.street.careOf;\n }\n get apartmentNumber(): string | null {\n return this.street.apartmentNumber;\n }\n get postBox(): string | null {\n return this.street.postBox;\n }\n get isPostBox(): boolean {\n return this.street.isPostBox;\n }\n get value(): string {\n return this.toNormalizedString();\n }\n get formatted(): string {\n return this.toString();\n }\n\n static tryParse(input: string | null | undefined): Address | null;\n static tryParse(parts: {\n street: string | null | undefined;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n }): Address | null;\n static tryParse(arg: unknown): Address | null {\n if (typeof arg === \"object\" && arg !== null) {\n const p = arg as {\n street?: string | null;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n };\n const cityM = p.city != null && p.city.trim() !== \"\" ? AddressCity.tryParse(p.city) : null;\n const zipM =\n p.zipCode != null && p.zipCode.trim() !== \"\" ? AddressZipCode.tryParse(p.zipCode) : null;\n const countryM =\n p.country != null && p.country.trim() !== \"\" ? Country.tryParse(p.country) : null;\n if (p.zipCode != null && p.zipCode.trim() !== \"\" && zipM === null) return null;\n if (p.city != null && p.city.trim() !== \"\" && cityM === null) return null;\n if (p.country != null && p.country.trim() !== \"\" && countryM === null) return null;\n const streetM = AddressStreet.tryParse(p.street, {\n city: cityM?.value ?? null,\n zipCode: zipM?.formatted ?? zipM?.value ?? null,\n });\n if (streetM === null) return null;\n return new Address(streetM, zipM, cityM, countryM);\n }\n\n const input = arg as string | null | undefined;\n if (input == null || input.trim() === \"\") return null;\n const trimmed = input.trim();\n if (trimmed.length > MAX_INPUT_LENGTH) return null;\n\n const segments = splitSegments(trimmed);\n if (segments.length === 0) return null;\n\n let country: Country | null = null;\n country = consumeCountry(segments, country);\n\n let zipCode: AddressZipCode | null = null;\n let city: AddressCity | null = null;\n if (segments.length > 0) {\n const r = consumeZipAndCity(segments);\n if (r) {\n zipCode = r.zipCode;\n city = r.city;\n }\n }\n\n let streetText = segments.join(\", \");\n if (zipCode === null || city === null) {\n const ext = extractTrailingZipCity(streetText);\n if (ext) {\n streetText = ext.street;\n zipCode = zipCode ?? ext.zipCode;\n city = city ?? ext.city;\n }\n }\n\n if (streetText.trim() === \"\") return null;\n const street = AddressStreet.tryParse(streetText, {\n city: city?.value ?? null,\n zipCode: zipCode?.formatted ?? zipCode?.value ?? null,\n });\n if (street === null) return null;\n return new Address(street, zipCode, city, country);\n }\n\n static parse(input: string): Address {\n const r = Address.tryParse(input);\n if (r === null) throw new Error(\"Invalid address.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return Address.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Address.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = Address.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && Address.normalize(input) === input;\n }\n\n /**\n * Scans unstructured text for potential Swedish-style addresses.\n *\n * Results are heuristic candidates and can include false positives. Zip-code\n * anchored matches receive medium confidence, while street-only matches\n * receive low confidence.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<Address>[] {\n if (text.length === 0) return [];\n const results: TextCandidate<Address>[] = [];\n const covered: Array<[number, number]> = [];\n\n collectAddressMatches(\n text,\n ZIP_ANCHORED_SCAN_PATTERN,\n TextMatchConfidence.Medium,\n results,\n covered,\n );\n collectAddressMatches(\n text,\n STREET_ONLY_SCAN_PATTERN,\n TextMatchConfidence.Low,\n results,\n covered,\n );\n\n return results.sort((a, b) => a.startIndex - b.startIndex);\n }\n\n toNormalizedString(): string {\n const parts: string[] = [this.buildStreetLine()];\n if (this.zipCode) parts.push(this.zipCode.value);\n if (this.city) parts.push(this.city.value);\n if (this.country) parts.push(this.country.alpha2Code);\n return parts.join(\", \");\n }\n\n toMultilineString(): string {\n const useEnglish = !PrimitivesDefaults.useLocalizedDisplayNames;\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.buildStreetCoreLine());\n const locality = this.buildLocalityLine();\n if (locality) lines.push(locality);\n if (this.country && (!isSweden(this.country) || useEnglish)) {\n lines.push(useEnglish ? this.country.englishName : this.country.displayName);\n }\n return lines.join(\"\\n\");\n }\n\n toDisplayString(): string {\n return this.buildSingleLine(!PrimitivesDefaults.useLocalizedDisplayNames);\n }\n toEnglishString(): string {\n return this.buildSingleLine(true);\n }\n toNativeString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n const locality = this.buildLocalityLine();\n if (locality) parts.push(locality);\n if (this.country && !isSweden(this.country)) parts.push(this.country.nativeName);\n return parts.join(\", \");\n }\n\n toString(): string {\n return this.toDisplayString();\n }\n\n toDomesticString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n const locality = this.buildDomesticLocalityLine();\n if (locality) parts.push(locality);\n return parts.join(\", \");\n }\n\n /**\n * Multi-line form without the country line, using the country's own zip-code\n * formatting when a country-specific address type is registered.\n */\n toDomesticMultilineString(): string {\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.buildStreetCoreLine());\n const locality = this.buildDomesticLocalityLine();\n if (locality) lines.push(locality);\n return lines.join(\"\\n\");\n }\n\n /**\n * Wraps this address in its country-specific type when the country is known\n * and an implementation is registered, otherwise `null`.\n */\n asCountryAddress(): ICountryAddress | null {\n if (this.country === null) return null;\n return getCountryAddressRegistration(this.country.alpha2Code)?.tryWrap(this) ?? null;\n }\n\n /** Countries that have a dedicated country-specific address type. */\n static get supportedCountryAddressTypes(): readonly Country[] {\n return getRegisteredCountryAddressCountries();\n }\n\n private buildStreetLine(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n return parts.join(\", \");\n }\n\n private buildStreetCoreLine(): string {\n if (this.apartmentNumber) return `${this.street.street} lgh ${this.apartmentNumber}`;\n return this.street.street;\n }\n\n private buildLocalityLine(): string | null {\n let s = \"\";\n if (this.zipCode) s += this.zipCode.formatted;\n if (this.city) {\n if (s.length > 0) s += \" \";\n s += this.city.value;\n }\n return s.length === 0 ? null : s;\n }\n\n private buildDomesticLocalityLine(): string | null {\n let s = this.countryFormattedZip() ?? this.zipCode?.formatted ?? \"\";\n if (this.city) {\n if (s.length > 0) s += \" \";\n s += this.city.value;\n }\n return s.length === 0 ? null : s;\n }\n\n private countryFormattedZip(): string | null {\n if (this.zipCode === null || this.country === null) return null;\n return (\n getCountryAddressRegistration(this.country.alpha2Code)?.formatZip(this.zipCode.value) ?? null\n );\n }\n\n private buildSingleLine(useEnglish: boolean): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n const locality = this.buildLocalityLine();\n if (locality) parts.push(locality);\n if (this.country && (!isSweden(this.country) || useEnglish)) {\n parts.push(useEnglish ? this.country.englishName : this.country.displayName);\n }\n return parts.join(\", \");\n }\n}\n\nfunction isSweden(c: Country): boolean {\n return c.alpha2Code.toUpperCase() === \"SE\";\n}\n\nconst STREET_SUFFIX_PATTERN = String.raw`(?:gatan|gata|vägen|väg|allén|allé|torget|torg|platsen|plats|stigen|stig|gränden|gränd|gången|gång|leden|led|backen|backe|kajen|kaj|bron|plan|stråket|terrassen|ringen|parken|hamnen)`;\n\nconst STREET_NAME_PATTERN =\n String.raw`(?:[\\p{Lu}ÅÄÖ][\\p{Ll}\\p{M}'-]+\\s+)*[\\p{Lu}ÅÄÖ][\\p{Ll}\\p{M}'-]*` +\n STREET_SUFFIX_PATTERN;\n\nconst ZIP_ANCHORED_SCAN_PATTERN = new RegExp(\n String.raw`(?<candidate>(?:c\\/o\\s+[\\p{L}\\p{M} .'-]+,\\s*)?` +\n STREET_NAME_PATTERN +\n String.raw`\\s+\\d{1,4}[\\p{L}]?,?\\s+\\d{3}\\s?\\d{2}\\s+[\\p{Lu}ÅÄÖ][\\p{L}\\p{M}'-]+(?:\\s+[\\p{Lu}ÅÄÖ][\\p{L}\\p{M}'-]+)*(?:,\\s*(?:SE|Sverige|Sweden))?)`,\n \"gu\",\n);\n\nconst STREET_ONLY_SCAN_PATTERN = new RegExp(\n String.raw`(?<candidate>` + STREET_NAME_PATTERN + String.raw`\\s+\\d{1,4}[\\p{L}]?)`,\n \"gu\",\n);\n\nfunction collectAddressMatches(\n text: string,\n pattern: RegExp,\n confidence: TextMatchConfidence,\n results: TextCandidate<Address>[],\n covered: Array<[number, number]>,\n): void {\n pattern.lastIndex = 0;\n for (const match of text.matchAll(pattern)) {\n const candidateText = match.groups?.candidate ?? match[0];\n const startIndex = match.index ?? 0;\n const endIndex = startIndex + candidateText.length;\n if (covered.some(([start, end]) => startIndex < end && start < endIndex)) continue;\n\n const value = Address.tryParse(candidateText);\n if (!value) continue;\n\n covered.push([startIndex, endIndex]);\n results.push(\n new TextCandidate({\n startIndex,\n length: candidateText.length,\n originalText: candidateText,\n typeName: \"Address\",\n category: TextCandidateCategory.Contact,\n normalizedForm: value.toNormalizedString(),\n formattedForm: value.toString(),\n maskedForm: maskAddressForScan(value),\n confidence,\n value,\n }),\n );\n }\n}\n\nfunction maskAddressForScan(address: Address): string {\n return address.toString().replace(/\\d/g, \"*\");\n}\n\nfunction splitSegments(input: string): string[] {\n return input\n .replace(/\\r/g, \"\\n\")\n .split(/[\\n,]/)\n .map((s) => collapseWhitespace(s))\n .filter((s) => s !== \"\");\n}\n\nfunction consumeCountry(segments: string[], current: Country | null): Country | null {\n if (segments.length === 0 || current !== null) return current;\n const last = segments[segments.length - 1]!;\n const direct = Country.tryParse(last);\n if (direct) {\n segments.pop();\n return direct;\n }\n const tokens = last.split(\" \").filter((t) => t !== \"\");\n for (let n = Math.min(5, tokens.length); n >= 1; n--) {\n const suffix = tokens.slice(tokens.length - n).join(\" \");\n const parsed = Country.tryParse(suffix);\n if (!parsed) continue;\n const prefix = tokens.slice(0, tokens.length - n).join(\" \");\n if (prefix.trim() === \"\") segments.pop();\n else segments[segments.length - 1] = prefix;\n return parsed;\n }\n return current;\n}\n\nfunction consumeZipAndCity(\n segments: string[],\n): { zipCode: AddressZipCode; city: AddressCity } | null {\n if (segments.length === 0) return null;\n const last = segments[segments.length - 1]!;\n const r = parseZipAndCity(last);\n if (!r) return null;\n segments.pop();\n return r;\n}\n\nfunction parseZipAndCity(input: string): { zipCode: AddressZipCode; city: AddressCity } | null {\n const normalized = collapseWhitespace(input);\n if (normalized === \"\") return null;\n const tokens = normalized.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 2) return null;\n\n for (let n = Math.min(3, tokens.length - 1); n >= 1; n--) {\n const zip = tokens.slice(0, n).join(\" \");\n const city = tokens.slice(n).join(\" \");\n const z = AddressZipCode.tryParse(zip);\n const c = AddressCity.tryParse(city);\n if (z && c) return { zipCode: z, city: c };\n }\n for (let n = Math.min(3, tokens.length - 1); n >= 1; n--) {\n const cityP = tokens.slice(0, tokens.length - n).join(\" \");\n const zipS = tokens.slice(tokens.length - n).join(\" \");\n const z = AddressZipCode.tryParse(zipS);\n const c = AddressCity.tryParse(cityP);\n if (z && c) return { zipCode: z, city: c };\n }\n return null;\n}\n\nfunction extractTrailingZipCity(\n input: string,\n): { street: string; zipCode: AddressZipCode; city: AddressCity } | null {\n const normalized = collapseWhitespace(input);\n if (normalized === \"\") return null;\n const tokens = normalized.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 3) return null;\n for (let zipStart = tokens.length - 2; zipStart >= 1; zipStart--) {\n for (let zipCount = 1; zipCount <= Math.min(3, tokens.length - zipStart - 1); zipCount++) {\n const zip = tokens.slice(zipStart, zipStart + zipCount).join(\" \");\n const city = tokens.slice(zipStart + zipCount).join(\" \");\n const street = tokens.slice(0, zipStart).join(\" \");\n const z = AddressZipCode.tryParse(zip);\n if (!z) continue;\n const c = AddressCity.tryParse(city);\n if (!c) continue;\n if (street.trim() === \"\") continue;\n return { street, zipCode: z, city: c };\n }\n }\n return null;\n}\n","import { Country } from \"../geography/index.js\";\nimport { Address } from \"./address.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\n\n/** Common interface for all country-specific zip code types. */\nexport interface ICountryAddressZipCode {\n readonly country: Country;\n readonly value: string;\n readonly formatted: string;\n readonly zipCode: AddressZipCode;\n toNormalizedString(): string;\n toString(): string;\n}\n\n/** Common interface for all country-specific address types. */\nexport interface ICountryAddress {\n readonly country: Country;\n readonly street: AddressStreet;\n readonly countryZipCode: ICountryAddressZipCode;\n readonly city: AddressCity;\n readonly address: Address;\n readonly careOf: string | null;\n readonly postBox: string | null;\n readonly isPostBox: boolean;\n readonly value: string;\n readonly formatted: string;\n toNormalizedString(): string;\n toMultilineString(): string;\n toString(): string;\n}\n\n/** Abstract base class for country-specific zip code types. */\nexport abstract class CountryAddressZipCodeBase implements ICountryAddressZipCode {\n readonly value: string;\n readonly formatted: string;\n readonly zipCode: AddressZipCode;\n\n abstract get country(): Country;\n\n protected constructor(value: string, formatted: string, zipCode: AddressZipCode) {\n this.value = value;\n this.formatted = formatted;\n this.zipCode = zipCode;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n}\n\n/** Abstract base class for country-specific address types. */\nexport abstract class CountryAddressBase implements ICountryAddress {\n readonly street: AddressStreet;\n readonly city: AddressCity;\n readonly address: Address;\n\n abstract get countryZipCode(): ICountryAddressZipCode;\n\n get country(): Country {\n return this.address.country!;\n }\n get careOf(): string | null {\n return this.street.careOf;\n }\n get postBox(): string | null {\n return this.street.postBox;\n }\n get isPostBox(): boolean {\n return this.street.isPostBox;\n }\n get value(): string {\n return this.toNormalizedString();\n }\n get formatted(): string {\n return this.toString();\n }\n\n protected constructor(street: AddressStreet, city: AddressCity, address: Address) {\n this.street = street;\n this.city = city;\n this.address = address;\n }\n\n toNormalizedString(): string {\n return this.address.toNormalizedString();\n }\n\n toString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.street.street);\n parts.push(`${this.countryZipCode.formatted} ${this.city.value}`);\n return parts.join(\", \");\n }\n\n toMultilineString(): string {\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.street.street);\n lines.push(`${this.countryZipCode.formatted} ${this.city.value}`);\n return lines.join(\"\\n\");\n }\n}\n\n/**\n * Validates and unwraps a generic {@link Address} for a specific country, then constructs\n * a typed country-specific address. Used by every `XxxAddress.tryParse` implementation.\n */\nexport function tryWrapCountryAddress<TZip, TAddr>(\n address: Address,\n alpha2: string,\n defaultCountry: Country,\n tryParseZip: (value: string) => TZip | null,\n factory: (street: AddressStreet, zip: TZip, city: AddressCity, address: Address) => TAddr,\n): TAddr | null {\n if (address.country && address.country.alpha2Code.toUpperCase() !== alpha2.toUpperCase()) {\n return null;\n }\n if (address.zipCode === null || address.city === null) return null;\n const zip = tryParseZip(address.zipCode.value);\n if (zip === null) return null;\n const withCountry =\n address.country !== null\n ? address\n : new Address(address.street, address.zipCode, address.city, defaultCountry);\n return factory(address.street, zip, address.city, withCountry);\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { Address } from \"./address.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport {\n CountryAddressBase,\n ICountryAddress,\n ICountryAddressZipCode,\n tryWrapCountryAddress,\n} from \"./country-address.js\";\nimport { CountryZipCodeStatic } from \"./country-zip-code-factory.js\";\n\nexport interface CountryAddressConfig<TZip extends ICountryAddressZipCode> {\n englishName: string;\n localizedName: string;\n emoji: string;\n sources: readonly string[];\n country: Country;\n invalidMessage: string;\n zipCode: CountryZipCodeStatic<TZip>;\n}\n\nclass CountryAddress<TZip extends ICountryAddressZipCode> extends CountryAddressBase {\n readonly zipCode: TZip;\n constructor(street: AddressStreet, zipCode: TZip, city: AddressCity, address: Address) {\n super(street, city, address);\n this.zipCode = zipCode;\n }\n override get countryZipCode(): ICountryAddressZipCode {\n return this.zipCode;\n }\n}\n\nexport interface CountryAddressStatic<TZip extends ICountryAddressZipCode> {\n readonly typeInfo: PrimitiveTypeInfo;\n readonly country: Country;\n /** The country's zip-code type. Used by the country-address registry. */\n readonly zipCodeType: CountryZipCodeStatic<TZip>;\n /** Wraps an already-parsed {@link Address}. Used by the country-address registry. */\n tryWrap(address: Address): (ICountryAddress & { readonly zipCode: TZip }) | null;\n tryParse(input: string | null | undefined): (ICountryAddress & { readonly zipCode: TZip }) | null;\n tryParseStructured(parts: {\n street: string | null | undefined;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n }): (ICountryAddress & { readonly zipCode: TZip }) | null;\n parse(input: string): ICountryAddress;\n isValid(input: string | null | undefined): boolean;\n format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null;\n normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null;\n isNormalized(input: string | null | undefined): boolean;\n}\n\nexport function defineCountryAddress<TZip extends ICountryAddressZipCode>(\n config: CountryAddressConfig<TZip>,\n): CountryAddressStatic<TZip> {\n const typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: config.englishName,\n localizedName: config.localizedName,\n emoji: config.emoji,\n sources: Object.freeze([...config.sources]),\n });\n\n const tryWrap = (address: Address): CountryAddress<TZip> | null =>\n tryWrapCountryAddress(\n address,\n config.country.alpha2Code,\n config.country,\n (v) => config.zipCode.tryParse(v),\n (s, z, c, a) => new CountryAddress<TZip>(s, z, c, a),\n );\n\n const tryParse = (input: string | null | undefined): CountryAddress<TZip> | null => {\n const a = Address.tryParse(input);\n if (a === null) return null;\n return tryWrap(a);\n };\n\n const stat: CountryAddressStatic<TZip> = {\n typeInfo,\n country: config.country,\n zipCodeType: config.zipCode,\n tryWrap,\n tryParse,\n tryParseStructured(parts) {\n const a = Address.tryParse(parts);\n if (a === null) return null;\n return tryWrap(a);\n },\n parse(input) {\n const r = tryParse(input);\n if (r === null) throw new Error(config.invalidMessage);\n return r;\n },\n isValid(input) {\n return tryParse(input) !== null;\n },\n format(input, options) {\n const r = tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n },\n normalize(input, options) {\n const r = tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n },\n isNormalized(input) {\n return input != null && stat.normalize(input) === input;\n },\n };\n return stat;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\nimport { CountryAddressZipCodeBase, ICountryAddressZipCode } from \"./country-address.js\";\n\nexport interface CountryZipCodeConfig {\n englishName: string;\n localizedName: string;\n emoji: string;\n sources: readonly string[];\n country: Country;\n invalidMessage: string;\n parseRaw: (input: string) => { value: string; formatted: string } | null;\n}\n\nexport interface CountryZipCodeStatic<T extends ICountryAddressZipCode> {\n readonly typeInfo: PrimitiveTypeInfo;\n readonly country: Country;\n tryParse(input: string | null | undefined): T | null;\n parse(input: string): T;\n isValid(input: string | null | undefined): boolean;\n format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null;\n normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null;\n isNormalized(input: string | null | undefined): boolean;\n}\n\nclass CountryZipCode extends CountryAddressZipCodeBase {\n readonly _country: Country;\n constructor(value: string, formatted: string, zipCode: AddressZipCode, country: Country) {\n super(value, formatted, zipCode);\n this._country = country;\n }\n override get country(): Country {\n return this._country;\n }\n}\n\n/**\n * Build a country-specific zip code class with static `tryParse`, `parse`,\n * `isValid`, `format`, `normalize`, `isNormalized`, and an `instanceof` guard.\n */\nexport function defineCountryZipCode(config: CountryZipCodeConfig): {\n Class: typeof CountryZipCode;\n static: CountryZipCodeStatic<CountryZipCode>;\n} {\n const typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: config.englishName,\n localizedName: config.localizedName,\n emoji: config.emoji,\n sources: Object.freeze([...config.sources]),\n });\n\n function tryParse(input: string | null | undefined): CountryZipCode | null {\n if (input == null || input.trim() === \"\") return null;\n const r = config.parseRaw(input);\n if (r === null) return null;\n const az = AddressZipCode.tryParseInternational(r.formatted, config.country);\n if (az === null) return null;\n return new CountryZipCode(r.value, r.formatted, az, config.country);\n }\n\n const stat: CountryZipCodeStatic<CountryZipCode> = {\n typeInfo,\n country: config.country,\n tryParse,\n parse(input: string): CountryZipCode {\n const r = tryParse(input);\n if (r === null) throw new Error(config.invalidMessage);\n return r;\n },\n isValid(input) {\n return tryParse(input) !== null;\n },\n format(input, options) {\n const r = tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n },\n normalize(input, options) {\n const r = tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n },\n isNormalized(input) {\n return input != null && stat.normalize(input) === input;\n },\n };\n return { Class: CountryZipCode, static: stat };\n}\n\nconst onlyDigits = (s: string): string => [...s].filter((c) => c >= \"0\" && c <= \"9\").join(\"\");\n\n/** Helper: digits-only with fixed length, formatted == value. */\nexport function fixedDigits(length: number) {\n return (input: string): { value: string; formatted: string } | null => {\n const d = onlyDigits(input);\n if (d.length !== length) return null;\n return { value: d, formatted: d };\n };\n}\n\n/** Helper: digits-only, formatted with separator at given position (e.g. NN-NNN). */\nexport function digitsWithSeparator(length: number, splitAt: number, sep: string) {\n return (input: string): { value: string; formatted: string } | null => {\n const d = onlyDigits(input);\n if (d.length !== length) return null;\n return { value: d, formatted: d.slice(0, splitAt) + sep + d.slice(splitAt) };\n };\n}\n\n/** Helper: fixed digits, value is digits, formatted has space at split. */\nexport function digitsWithSpace(length: number, splitAt: number) {\n return digitsWithSeparator(length, splitAt, \" \");\n}\n\n/** Helper: digits with prefix like `LV-NNNN`, value compact (no prefix), formatted with prefix. */\nexport function digitsWithPrefix(length: number, prefix: string) {\n return (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().replace(prefix, \"\").replace(/[\\s-]/g, \"\");\n const d = onlyDigits(cleaned);\n if (d.length !== length) return null;\n return { value: d, formatted: `${prefix}${d}` };\n };\n}\n\nexport { onlyDigits };\n","import { Country } from \"../geography/index.js\";\nimport {\n defineCountryZipCode,\n digitsWithPrefix,\n digitsWithSeparator,\n digitsWithSpace,\n fixedDigits,\n onlyDigits,\n} from \"./country-zip-code-factory.js\";\n\nconst dutch = (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().replace(/-/g, \"\").replace(\"NL\", \"\");\n const m = /^\\s*(\\d{4})\\s*([A-Z]{2})\\s*$/.exec(cleaned);\n if (!m) return null;\n return { value: `${m[1]}${m[2]}`, formatted: `${m[1]} ${m[2]}` };\n};\n\nconst british = (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().trim().replace(/\\s+/g, \"\");\n const m = /^([A-Z]{1,2}\\d[A-Z\\d]?)(\\d[A-Z]{2})$/.exec(cleaned);\n if (!m) return null;\n return { value: cleaned, formatted: `${m[1]} ${m[2]}` };\n};\n\nconst irish = (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().trim().replace(/\\s+/g, \"\");\n const m = /^([A-Z]\\d{2})([A-Z\\d]{4})$/.exec(cleaned);\n if (!m) return null;\n return { value: cleaned, formatted: `${m[1]} ${m[2]}` };\n};\n\nconst maltese = (input: string): { value: string; formatted: string } | null => {\n const cleaned = input.toUpperCase().trim().replace(/\\s+/g, \"\");\n const m = /^([A-Z]{3})(\\d{4})$/.exec(cleaned);\n if (!m) return null;\n return { value: cleaned, formatted: `${m[1]} ${m[2]}` };\n};\n\nconst portuguese = (input: string): { value: string; formatted: string } | null => {\n const d = onlyDigits(input);\n if (d.length !== 7) return null;\n return { value: d, formatted: `${d.slice(0, 4)}-${d.slice(4)}` };\n};\n\nconst SwedishLessZipFactory = (\n englishName: string,\n localizedName: string,\n emoji: string,\n sources: readonly string[],\n country: Country,\n invalidMessage: string,\n parseRaw: (input: string) => { value: string; formatted: string } | null,\n) =>\n defineCountryZipCode({\n englishName,\n localizedName,\n emoji,\n sources,\n country,\n invalidMessage,\n parseRaw,\n });\n\nexport const NorwegianAddressZipCode = SwedishLessZipFactory(\n \"Norwegian Zip Code\",\n \"Norskt postnummer\",\n \"\\u{1F1F3}\\u{1F1F4}\",\n [\"https://www.posten.no/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Norway\"],\n Country.Norway,\n \"Invalid Norwegian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const FinnishAddressZipCode = SwedishLessZipFactory(\n \"Finnish Zip Code\",\n \"Finskt postnummer\",\n \"\\u{1F1EB}\\u{1F1EE}\",\n [\"https://www.posti.fi/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Finland\"],\n Country.Finland,\n \"Invalid Finnish zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const DanishAddressZipCode = SwedishLessZipFactory(\n \"Danish Zip Code\",\n \"Danskt postnummer\",\n \"\\u{1F1E9}\\u{1F1F0}\",\n [\"https://www.postnord.dk/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Denmark\"],\n Country.Denmark,\n \"Invalid Danish zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const GermanAddressZipCode = SwedishLessZipFactory(\n \"German Zip Code\",\n \"Tyskt postnummer\",\n \"\\u{1F1E9}\\u{1F1EA}\",\n [\"https://www.deutschepost.de/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Germany\"],\n Country.Germany,\n \"Invalid German zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const PolishAddressZipCode = SwedishLessZipFactory(\n \"Polish Zip Code\",\n \"Polskt postnummer\",\n \"\\u{1F1F5}\\u{1F1F1}\",\n [\"https://www.poczta-polska.pl/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Poland\"],\n Country.Poland,\n \"Invalid Polish zip code. Expected 5-digit format (NN-NNN).\",\n digitsWithSeparator(5, 2, \"-\"),\n).static;\n\nexport const EstonianAddressZipCode = SwedishLessZipFactory(\n \"Estonian Zip Code\",\n \"Estniskt postnummer\",\n \"\\u{1F1EA}\\u{1F1EA}\",\n [\"https://www.omniva.ee/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Estonia\"],\n Country.Estonia,\n \"Invalid Estonian zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const LithuanianAddressZipCode = SwedishLessZipFactory(\n \"Lithuanian Zip Code\",\n \"Litauiskt postnummer\",\n \"\\u{1F1F1}\\u{1F1F9}\",\n [\"https://www.post.lt/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Lithuania\"],\n Country.Lithuania,\n \"Invalid Lithuanian zip code. Expected format LT-NNNNN.\",\n digitsWithPrefix(5, \"LT-\"),\n).static;\n\nexport const RomanianAddressZipCode = SwedishLessZipFactory(\n \"Romanian Zip Code\",\n \"Rumänskt postnummer\",\n \"\\u{1F1F7}\\u{1F1F4}\",\n [\"https://www.posta-romana.ro/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Romania\"],\n Country.Romania,\n \"Invalid Romanian zip code. Expected 6-digit format (NNNNNN).\",\n fixedDigits(6),\n).static;\n\nexport const BulgarianAddressZipCode = SwedishLessZipFactory(\n \"Bulgarian Zip Code\",\n \"Bulgariskt postnummer\",\n \"\\u{1F1E7}\\u{1F1EC}\",\n [\"https://www.bgpost.bg/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Bulgaria\"],\n Country.Bulgaria,\n \"Invalid Bulgarian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const LatvianAddressZipCode = SwedishLessZipFactory(\n \"Latvian Zip Code\",\n \"Lettiskt postnummer\",\n \"\\u{1F1F1}\\u{1F1FB}\",\n [\"https://www.pasts.lv/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Latvia\"],\n Country.Latvia,\n \"Invalid Latvian zip code. Expected format LV-NNNN.\",\n digitsWithPrefix(4, \"LV-\"),\n).static;\n\nexport const CzechAddressZipCode = SwedishLessZipFactory(\n \"Czech Zip Code\",\n \"Tjeckiskt postnummer\",\n \"\\u{1F1E8}\\u{1F1FF}\",\n [\n \"https://www.ceskaposta.cz/\",\n \"https://en.wikipedia.org/wiki/Postal_codes_in_the_Czech_Republic\",\n ],\n Country.tryParse(\"CZ\")!,\n \"Invalid Czech zip code. Expected 5-digit format (NNN NN).\",\n digitsWithSpace(5, 3),\n).static;\n\nexport const SpanishAddressZipCode = SwedishLessZipFactory(\n \"Spanish Zip Code\",\n \"Spanskt postnummer\",\n \"\\u{1F1EA}\\u{1F1F8}\",\n [\"https://www.correos.es/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Spain\"],\n Country.tryParse(\"ES\")!,\n \"Invalid Spanish zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const DutchAddressZipCode = SwedishLessZipFactory(\n \"Dutch Zip Code\",\n \"Nederländskt postnummer\",\n \"\\u{1F1F3}\\u{1F1F1}\",\n [\"https://www.postnl.nl/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_the_Netherlands\"],\n Country.tryParse(\"NL\")!,\n \"Invalid Dutch zip code. Expected format NNNN AA (e.g. 1012 AB).\",\n dutch,\n).static;\n\nexport const GreekAddressZipCode = SwedishLessZipFactory(\n \"Greek Zip Code\",\n \"Grekiskt postnummer\",\n \"\\u{1F1EC}\\u{1F1F7}\",\n [\"https://www.elta.gr/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Greece\"],\n Country.tryParse(\"GR\")!,\n \"Invalid Greek zip code. Expected 5-digit format (NNN NN).\",\n digitsWithSpace(5, 3),\n).static;\n\nexport const ItalianAddressZipCode = SwedishLessZipFactory(\n \"Italian Zip Code\",\n \"Italienskt postnummer\",\n \"\\u{1F1EE}\\u{1F1F9}\",\n [\"https://www.poste.it/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Italy\"],\n Country.tryParse(\"IT\")!,\n \"Invalid Italian zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const SlovenianAddressZipCode = SwedishLessZipFactory(\n \"Slovenian Zip Code\",\n \"Slovenskt postnummer\",\n \"\\u{1F1F8}\\u{1F1EE}\",\n [\"https://www.posta.si/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Slovenia\"],\n Country.tryParse(\"SI\")!,\n \"Invalid Slovenian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const CroatianAddressZipCode = SwedishLessZipFactory(\n \"Croatian Zip Code\",\n \"Kroatiskt postnummer\",\n \"\\u{1F1ED}\\u{1F1F7}\",\n [\"https://www.posta.hr/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Croatia\"],\n Country.tryParse(\"HR\")!,\n \"Invalid Croatian zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const PortugueseAddressZipCode = SwedishLessZipFactory(\n \"Portuguese Zip Code\",\n \"Portugisiskt postnummer\",\n \"\\u{1F1F5}\\u{1F1F9}\",\n [\"https://www.ctt.pt/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Portugal\"],\n Country.tryParse(\"PT\")!,\n \"Invalid Portuguese zip code. Expected format NNNN-NNN (e.g. 1100-148).\",\n portuguese,\n).static;\n\nexport const HungarianAddressZipCode = SwedishLessZipFactory(\n \"Hungarian Zip Code\",\n \"Ungerskt postnummer\",\n \"\\u{1F1ED}\\u{1F1FA}\",\n [\"https://www.posta.hu/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Hungary\"],\n Country.tryParse(\"HU\")!,\n \"Invalid Hungarian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const FrenchAddressZipCode = SwedishLessZipFactory(\n \"French Zip Code\",\n \"Franskt postnummer\",\n \"\\u{1F1EB}\\u{1F1F7}\",\n [\"https://www.laposte.fr/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_France\"],\n Country.tryParse(\"FR\")!,\n \"Invalid French zip code. Expected 5-digit format (NNNNN).\",\n fixedDigits(5),\n).static;\n\nexport const SlovakAddressZipCode = SwedishLessZipFactory(\n \"Slovak Zip Code\",\n \"Slovakiskt postnummer\",\n \"\\u{1F1F8}\\u{1F1F0}\",\n [\"https://www.posta.sk/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Slovakia\"],\n Country.tryParse(\"SK\")!,\n \"Invalid Slovak zip code. Expected 5-digit format (NNN NN).\",\n digitsWithSpace(5, 3),\n).static;\n\nexport const BelgianAddressZipCode = SwedishLessZipFactory(\n \"Belgian Zip Code\",\n \"Belgiskt postnummer\",\n \"\\u{1F1E7}\\u{1F1EA}\",\n [\"https://www.bpost.be/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Belgium\"],\n Country.tryParse(\"BE\")!,\n \"Invalid Belgian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const BritishAddressZipCode = SwedishLessZipFactory(\n \"British Postcode\",\n \"Brittiskt postnummer\",\n \"\\u{1F1EC}\\u{1F1E7}\",\n [\"https://www.royalmail.com/\", \"https://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom\"],\n Country.tryParse(\"GB\")!,\n \"Invalid British postcode (e.g. SW1A 1AA).\",\n british,\n).static;\n\nexport const AustrianAddressZipCode = SwedishLessZipFactory(\n \"Austrian Zip Code\",\n \"Österrikiskt postnummer\",\n \"\\u{1F1E6}\\u{1F1F9}\",\n [\"https://www.post.at/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Austria\"],\n Country.tryParse(\"AT\")!,\n \"Invalid Austrian zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const CypriotAddressZipCode = SwedishLessZipFactory(\n \"Cypriot Zip Code\",\n \"Cypriotiskt postnummer\",\n \"\\u{1F1E8}\\u{1F1FE}\",\n [\"https://www.cypruspost.post/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Cyprus\"],\n Country.tryParse(\"CY\")!,\n \"Invalid Cypriot zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const IcelandicAddressZipCode = SwedishLessZipFactory(\n \"Icelandic Zip Code\",\n \"Isländskt postnummer\",\n \"\\u{1F1EE}\\u{1F1F8}\",\n [\"https://www.postur.is/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Iceland\"],\n Country.tryParse(\"IS\")!,\n \"Invalid Icelandic zip code. Expected 3-digit format (NNN).\",\n fixedDigits(3),\n).static;\n\nexport const SwissAddressZipCode = SwedishLessZipFactory(\n \"Swiss Zip Code\",\n \"Schweiziskt postnummer\",\n \"\\u{1F1E8}\\u{1F1ED}\",\n [\"https://www.post.ch/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Switzerland\"],\n Country.tryParse(\"CH\")!,\n \"Invalid Swiss zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const IrishAddressZipCode = SwedishLessZipFactory(\n \"Irish Eircode\",\n \"Iriskt postnummer\",\n \"\\u{1F1EE}\\u{1F1EA}\",\n [\"https://www.eircode.ie/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Ireland\"],\n Country.tryParse(\"IE\")!,\n \"Invalid Irish Eircode (e.g. D02 XR20).\",\n irish,\n).static;\n\nexport const LuxembourgishAddressZipCode = SwedishLessZipFactory(\n \"Luxembourgish Zip Code\",\n \"Luxemburgskt postnummer\",\n \"\\u{1F1F1}\\u{1F1FA}\",\n [\"https://www.post.lu/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Luxembourg\"],\n Country.tryParse(\"LU\")!,\n \"Invalid Luxembourgish zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n\nexport const MalteseAddressZipCode = SwedishLessZipFactory(\n \"Maltese Zip Code\",\n \"Maltesiskt postnummer\",\n \"\\u{1F1F2}\\u{1F1F9}\",\n [\"https://www.maltapost.com/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Malta\"],\n Country.tryParse(\"MT\")!,\n \"Invalid Maltese zip code (e.g. VLT 1535).\",\n maltese,\n).static;\n\nexport const LiechtensteinAddressZipCode = SwedishLessZipFactory(\n \"Liechtenstein Zip Code\",\n \"Liechtensteinskt postnummer\",\n \"\\u{1F1F1}\\u{1F1EE}\",\n [\"https://www.post.li/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Liechtenstein\"],\n Country.tryParse(\"LI\")!,\n \"Invalid Liechtenstein zip code. Expected 4-digit format (NNNN).\",\n fixedDigits(4),\n).static;\n","import { Country } from \"../geography/index.js\";\nimport { defineCountryAddress } from \"./country-address-factory.js\";\nimport * as Z from \"./country-zip-codes.js\";\n\nexport const NorwegianAddress = defineCountryAddress({\n englishName: \"Norwegian Address\",\n localizedName: \"Norsk adress\",\n emoji: \"\\u{1F1F3}\\u{1F1F4}\",\n sources: [\"https://www.posten.no/\", \"https://en.wikipedia.org/wiki/Postal_codes_in_Norway\"],\n country: Country.Norway,\n invalidMessage: \"Invalid Norwegian address.\",\n zipCode: Z.NorwegianAddressZipCode,\n});\n\nexport const FinnishAddress = defineCountryAddress({\n englishName: \"Finnish Address\",\n localizedName: \"Finsk adress\",\n emoji: \"\\u{1F1EB}\\u{1F1EE}\",\n sources: [\"https://www.posti.fi/\"],\n country: Country.Finland,\n invalidMessage: \"Invalid Finnish address.\",\n zipCode: Z.FinnishAddressZipCode,\n});\n\nexport const DanishAddress = defineCountryAddress({\n englishName: \"Danish Address\",\n localizedName: \"Dansk adress\",\n emoji: \"\\u{1F1E9}\\u{1F1F0}\",\n sources: [\"https://www.postnord.dk/\"],\n country: Country.Denmark,\n invalidMessage: \"Invalid Danish address.\",\n zipCode: Z.DanishAddressZipCode,\n});\n\nexport const GermanAddress = defineCountryAddress({\n englishName: \"German Address\",\n localizedName: \"Tysk adress\",\n emoji: \"\\u{1F1E9}\\u{1F1EA}\",\n sources: [\"https://www.deutschepost.de/\"],\n country: Country.Germany,\n invalidMessage: \"Invalid German address.\",\n zipCode: Z.GermanAddressZipCode,\n});\n\nexport const PolishAddress = defineCountryAddress({\n englishName: \"Polish Address\",\n localizedName: \"Polsk adress\",\n emoji: \"\\u{1F1F5}\\u{1F1F1}\",\n sources: [\"https://www.poczta-polska.pl/\"],\n country: Country.tryParse(\"PL\")!,\n invalidMessage: \"Invalid Polish address.\",\n zipCode: Z.PolishAddressZipCode,\n});\n\nexport const EstonianAddress = defineCountryAddress({\n englishName: \"Estonian Address\",\n localizedName: \"Estnisk adress\",\n emoji: \"\\u{1F1EA}\\u{1F1EA}\",\n sources: [\"https://www.omniva.ee/\"],\n country: Country.tryParse(\"EE\")!,\n invalidMessage: \"Invalid Estonian address.\",\n zipCode: Z.EstonianAddressZipCode,\n});\n\nexport const LithuanianAddress = defineCountryAddress({\n englishName: \"Lithuanian Address\",\n localizedName: \"Litauisk adress\",\n emoji: \"\\u{1F1F1}\\u{1F1F9}\",\n sources: [\"https://www.post.lt/\"],\n country: Country.tryParse(\"LT\")!,\n invalidMessage: \"Invalid Lithuanian address.\",\n zipCode: Z.LithuanianAddressZipCode,\n});\n\nexport const RomanianAddress = defineCountryAddress({\n englishName: \"Romanian Address\",\n localizedName: \"Rumänsk adress\",\n emoji: \"\\u{1F1F7}\\u{1F1F4}\",\n sources: [\"https://www.posta-romana.ro/\"],\n country: Country.tryParse(\"RO\")!,\n invalidMessage: \"Invalid Romanian address.\",\n zipCode: Z.RomanianAddressZipCode,\n});\n\nexport const BulgarianAddress = defineCountryAddress({\n englishName: \"Bulgarian Address\",\n localizedName: \"Bulgarisk adress\",\n emoji: \"\\u{1F1E7}\\u{1F1EC}\",\n sources: [\"https://www.bgpost.bg/\"],\n country: Country.tryParse(\"BG\")!,\n invalidMessage: \"Invalid Bulgarian address.\",\n zipCode: Z.BulgarianAddressZipCode,\n});\n\nexport const LatvianAddress = defineCountryAddress({\n englishName: \"Latvian Address\",\n localizedName: \"Lettisk adress\",\n emoji: \"\\u{1F1F1}\\u{1F1FB}\",\n sources: [\"https://www.pasts.lv/\"],\n country: Country.tryParse(\"LV\")!,\n invalidMessage: \"Invalid Latvian address.\",\n zipCode: Z.LatvianAddressZipCode,\n});\n\nexport const CzechAddress = defineCountryAddress({\n englishName: \"Czech Address\",\n localizedName: \"Tjeckisk adress\",\n emoji: \"\\u{1F1E8}\\u{1F1FF}\",\n sources: [\"https://www.ceskaposta.cz/\"],\n country: Country.tryParse(\"CZ\")!,\n invalidMessage: \"Invalid Czech address.\",\n zipCode: Z.CzechAddressZipCode,\n});\n\nexport const SpanishAddress = defineCountryAddress({\n englishName: \"Spanish Address\",\n localizedName: \"Spansk adress\",\n emoji: \"\\u{1F1EA}\\u{1F1F8}\",\n sources: [\"https://www.correos.es/\"],\n country: Country.tryParse(\"ES\")!,\n invalidMessage: \"Invalid Spanish address.\",\n zipCode: Z.SpanishAddressZipCode,\n});\n\nexport const DutchAddress = defineCountryAddress({\n englishName: \"Dutch Address\",\n localizedName: \"Nederländsk adress\",\n emoji: \"\\u{1F1F3}\\u{1F1F1}\",\n sources: [\"https://www.postnl.nl/\"],\n country: Country.tryParse(\"NL\")!,\n invalidMessage: \"Invalid Dutch address.\",\n zipCode: Z.DutchAddressZipCode,\n});\n\nexport const GreekAddress = defineCountryAddress({\n englishName: \"Greek Address\",\n localizedName: \"Grekisk adress\",\n emoji: \"\\u{1F1EC}\\u{1F1F7}\",\n sources: [\"https://www.elta.gr/\"],\n country: Country.tryParse(\"GR\")!,\n invalidMessage: \"Invalid Greek address.\",\n zipCode: Z.GreekAddressZipCode,\n});\n\nexport const ItalianAddress = defineCountryAddress({\n englishName: \"Italian Address\",\n localizedName: \"Italiensk adress\",\n emoji: \"\\u{1F1EE}\\u{1F1F9}\",\n sources: [\"https://www.poste.it/\"],\n country: Country.tryParse(\"IT\")!,\n invalidMessage: \"Invalid Italian address.\",\n zipCode: Z.ItalianAddressZipCode,\n});\n\nexport const SlovenianAddress = defineCountryAddress({\n englishName: \"Slovenian Address\",\n localizedName: \"Slovensk adress\",\n emoji: \"\\u{1F1F8}\\u{1F1EE}\",\n sources: [\"https://www.posta.si/\"],\n country: Country.tryParse(\"SI\")!,\n invalidMessage: \"Invalid Slovenian address.\",\n zipCode: Z.SlovenianAddressZipCode,\n});\n\nexport const CroatianAddress = defineCountryAddress({\n englishName: \"Croatian Address\",\n localizedName: \"Kroatisk adress\",\n emoji: \"\\u{1F1ED}\\u{1F1F7}\",\n sources: [\"https://www.posta.hr/\"],\n country: Country.tryParse(\"HR\")!,\n invalidMessage: \"Invalid Croatian address.\",\n zipCode: Z.CroatianAddressZipCode,\n});\n\nexport const PortugueseAddress = defineCountryAddress({\n englishName: \"Portuguese Address\",\n localizedName: \"Portugisisk adress\",\n emoji: \"\\u{1F1F5}\\u{1F1F9}\",\n sources: [\"https://www.ctt.pt/\"],\n country: Country.tryParse(\"PT\")!,\n invalidMessage: \"Invalid Portuguese address.\",\n zipCode: Z.PortugueseAddressZipCode,\n});\n\nexport const HungarianAddress = defineCountryAddress({\n englishName: \"Hungarian Address\",\n localizedName: \"Ungersk adress\",\n emoji: \"\\u{1F1ED}\\u{1F1FA}\",\n sources: [\"https://www.posta.hu/\"],\n country: Country.tryParse(\"HU\")!,\n invalidMessage: \"Invalid Hungarian address.\",\n zipCode: Z.HungarianAddressZipCode,\n});\n\nexport const FrenchAddress = defineCountryAddress({\n englishName: \"French Address\",\n localizedName: \"Fransk adress\",\n emoji: \"\\u{1F1EB}\\u{1F1F7}\",\n sources: [\"https://www.laposte.fr/\"],\n country: Country.tryParse(\"FR\")!,\n invalidMessage: \"Invalid French address.\",\n zipCode: Z.FrenchAddressZipCode,\n});\n\nexport const SlovakAddress = defineCountryAddress({\n englishName: \"Slovak Address\",\n localizedName: \"Slovakisk adress\",\n emoji: \"\\u{1F1F8}\\u{1F1F0}\",\n sources: [\"https://www.posta.sk/\"],\n country: Country.tryParse(\"SK\")!,\n invalidMessage: \"Invalid Slovak address.\",\n zipCode: Z.SlovakAddressZipCode,\n});\n\nexport const BelgianAddress = defineCountryAddress({\n englishName: \"Belgian Address\",\n localizedName: \"Belgisk adress\",\n emoji: \"\\u{1F1E7}\\u{1F1EA}\",\n sources: [\"https://www.bpost.be/\"],\n country: Country.tryParse(\"BE\")!,\n invalidMessage: \"Invalid Belgian address.\",\n zipCode: Z.BelgianAddressZipCode,\n});\n\nexport const BritishAddress = defineCountryAddress({\n englishName: \"British Address\",\n localizedName: \"Brittisk adress\",\n emoji: \"\\u{1F1EC}\\u{1F1E7}\",\n sources: [\"https://www.royalmail.com/\"],\n country: Country.tryParse(\"GB\")!,\n invalidMessage: \"Invalid British address.\",\n zipCode: Z.BritishAddressZipCode,\n});\n\nexport const AustrianAddress = defineCountryAddress({\n englishName: \"Austrian Address\",\n localizedName: \"Österrikisk adress\",\n emoji: \"\\u{1F1E6}\\u{1F1F9}\",\n sources: [\"https://www.post.at/\"],\n country: Country.tryParse(\"AT\")!,\n invalidMessage: \"Invalid Austrian address.\",\n zipCode: Z.AustrianAddressZipCode,\n});\n\nexport const CypriotAddress = defineCountryAddress({\n englishName: \"Cypriot Address\",\n localizedName: \"Cypriotisk adress\",\n emoji: \"\\u{1F1E8}\\u{1F1FE}\",\n sources: [\"https://www.cypruspost.post/\"],\n country: Country.tryParse(\"CY\")!,\n invalidMessage: \"Invalid Cypriot address.\",\n zipCode: Z.CypriotAddressZipCode,\n});\n\nexport const IcelandicAddress = defineCountryAddress({\n englishName: \"Icelandic Address\",\n localizedName: \"Isländsk adress\",\n emoji: \"\\u{1F1EE}\\u{1F1F8}\",\n sources: [\"https://www.postur.is/\"],\n country: Country.tryParse(\"IS\")!,\n invalidMessage: \"Invalid Icelandic address.\",\n zipCode: Z.IcelandicAddressZipCode,\n});\n\nexport const SwissAddress = defineCountryAddress({\n englishName: \"Swiss Address\",\n localizedName: \"Schweizisk adress\",\n emoji: \"\\u{1F1E8}\\u{1F1ED}\",\n sources: [\"https://www.post.ch/\"],\n country: Country.tryParse(\"CH\")!,\n invalidMessage: \"Invalid Swiss address.\",\n zipCode: Z.SwissAddressZipCode,\n});\n\nexport const IrishAddress = defineCountryAddress({\n englishName: \"Irish Address\",\n localizedName: \"Irisk adress\",\n emoji: \"\\u{1F1EE}\\u{1F1EA}\",\n sources: [\"https://www.eircode.ie/\"],\n country: Country.tryParse(\"IE\")!,\n invalidMessage: \"Invalid Irish address.\",\n zipCode: Z.IrishAddressZipCode,\n});\n\nexport const LuxembourgishAddress = defineCountryAddress({\n englishName: \"Luxembourgish Address\",\n localizedName: \"Luxemburgsk adress\",\n emoji: \"\\u{1F1F1}\\u{1F1FA}\",\n sources: [\"https://www.post.lu/\"],\n country: Country.tryParse(\"LU\")!,\n invalidMessage: \"Invalid Luxembourgish address.\",\n zipCode: Z.LuxembourgishAddressZipCode,\n});\n\nexport const MalteseAddress = defineCountryAddress({\n englishName: \"Maltese Address\",\n localizedName: \"Maltesisk adress\",\n emoji: \"\\u{1F1F2}\\u{1F1F9}\",\n sources: [\"https://www.maltapost.com/\"],\n country: Country.tryParse(\"MT\")!,\n invalidMessage: \"Invalid Maltese address.\",\n zipCode: Z.MalteseAddressZipCode,\n});\n\nexport const LiechtensteinAddress = defineCountryAddress({\n englishName: \"Liechtenstein Address\",\n localizedName: \"Liechtensteinsk adress\",\n emoji: \"\\u{1F1F1}\\u{1F1EE}\",\n sources: [\"https://www.post.li/\"],\n country: Country.tryParse(\"LI\")!,\n invalidMessage: \"Invalid Liechtenstein address.\",\n zipCode: Z.LiechtensteinAddressZipCode,\n});\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\n\nconst DIGITS = /^\\d{5}$/;\n\n/** A Swedish postal code (`postnummer`) — strictly 5 digits, formatted `NNN NN`. */\nexport class SwedishAddressZipCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Swedish Zip Code\",\n localizedName: \"Svenskt postnummer\",\n emoji: \"\\u{1F1F8}\\u{1F1EA}\",\n sources: Object.freeze([\n \"https://www.postnord.se/\",\n \"https://sv.wikipedia.org/wiki/Postnummer_i_Sverige\",\n ]),\n });\n\n readonly value: string;\n readonly formatted: string;\n readonly zipCode: AddressZipCode;\n\n get country(): Country {\n return Country.Sweden;\n }\n\n private constructor(value: string, formatted: string, zipCode: AddressZipCode) {\n this.value = value;\n this.formatted = formatted;\n this.zipCode = zipCode;\n }\n\n static tryParse(input: string | null | undefined): SwedishAddressZipCode | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = [...input].filter((c) => c >= \"0\" && c <= \"9\").join(\"\");\n if (!DIGITS.test(digits)) return null;\n const formatted = `${digits.slice(0, 3)} ${digits.slice(3)}`;\n const az = AddressZipCode.tryParse(formatted, { country: Country.Sweden });\n if (az === null) return null;\n return new SwedishAddressZipCode(digits, formatted, az);\n }\n\n static parse(input: string): SwedishAddressZipCode {\n const r = SwedishAddressZipCode.tryParse(input);\n if (r === null) throw new Error(\"Invalid Swedish zip code. Expected 5-digit format (NNN NN).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishAddressZipCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddressZipCode.tryParse(input);\n if (r) return r.formatted;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddressZipCode.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishAddressZipCode.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.formatted;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { Country } from \"../geography/index.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { Address } from \"./address.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport type { ICountryAddressZipCode } from \"./country-address.js\";\nimport { SwedishAddressZipCode } from \"./swedish-address-zip-code.js\";\n\n/** A Swedish address — street + 5-digit zip + city, all within Sweden. */\nexport class SwedishAddress {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Swedish Address\",\n localizedName: \"Svensk adress\",\n emoji: \"\\u{1F1F8}\\u{1F1EA}\",\n sources: Object.freeze([\"https://www.postnord.se/\", \"https://www.lantmateriet.se/\"]),\n });\n\n readonly street: AddressStreet;\n readonly zipCode: SwedishAddressZipCode;\n readonly city: AddressCity;\n readonly address: Address;\n\n get country(): Country {\n return Country.Sweden;\n }\n /** The zip code as the country-agnostic {@link ICountryAddressZipCode} view. */\n get countryZipCode(): ICountryAddressZipCode {\n return this.zipCode;\n }\n get careOf(): string | null {\n return this.street.careOf;\n }\n get postBox(): string | null {\n return this.street.postBox;\n }\n get isPostBox(): boolean {\n return this.street.isPostBox;\n }\n get apartmentNumber(): string | null {\n return this.street.apartmentNumber;\n }\n get value(): string {\n return this.toNormalizedString();\n }\n get formatted(): string {\n return this.toString();\n }\n\n private constructor(\n street: AddressStreet,\n zipCode: SwedishAddressZipCode,\n city: AddressCity,\n address: Address,\n ) {\n this.street = street;\n this.zipCode = zipCode;\n this.city = city;\n this.address = address;\n }\n\n static tryParse(input: string | null | undefined): SwedishAddress | null;\n static tryParse(parts: {\n street: string | null | undefined;\n zipCode?: string | null;\n city?: string | null;\n country?: string | null;\n }): SwedishAddress | null;\n static tryParse(arg: unknown): SwedishAddress | null {\n const address =\n typeof arg === \"object\" && arg !== null\n ? Address.tryParse(arg as never)\n : Address.tryParse(arg as string | null | undefined);\n if (address === null) return null;\n return SwedishAddress.tryWrap(address);\n }\n\n static parse(input: string): SwedishAddress {\n const r = SwedishAddress.tryParse(input);\n if (r === null) {\n throw new Error(\n \"Invalid Swedish address. Requires street, 5-digit zip code, and city within Sweden.\",\n );\n }\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishAddress.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddress.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishAddress.tryParse(input);\n if (r) return r.toNormalizedString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishAddress.normalize(input) === input;\n }\n\n /**\n * Scans unstructured text for potential Swedish addresses.\n *\n * Results are heuristic candidates and can include false positives. Only\n * address candidates with a Swedish zip code and city are returned.\n */\n static findCandidatesInText(text: string): readonly TextCandidate<SwedishAddress>[] {\n if (text.length === 0) return [];\n const results: TextCandidate<SwedishAddress>[] = [];\n\n for (const candidate of Address.findCandidatesInText(text)) {\n const value = SwedishAddress.tryWrap(candidate.value);\n if (!value) continue;\n results.push(\n new TextCandidate({\n startIndex: candidate.startIndex,\n length: candidate.length,\n originalText: candidate.originalText,\n typeName: \"SwedishAddress\",\n category: TextCandidateCategory.Contact,\n normalizedForm: value.toNormalizedString(),\n formattedForm: value.toString(),\n maskedForm: candidate.maskedForm,\n confidence: candidate.confidence,\n value,\n }),\n );\n }\n\n return results;\n }\n\n toNormalizedString(): string {\n return this.address.toNormalizedString();\n }\n\n toString(): string {\n const parts: string[] = [];\n if (this.careOf) parts.push(`c/o ${this.careOf}`);\n parts.push(this.buildStreetCoreLine());\n parts.push(`${this.zipCode.formatted} ${this.city.value}`);\n return parts.join(\", \");\n }\n\n toMultilineString(): string {\n const lines: string[] = [];\n if (this.careOf) lines.push(`c/o ${this.careOf}`);\n lines.push(this.buildStreetCoreLine());\n lines.push(`${this.zipCode.formatted} ${this.city.value}`);\n return lines.join(\"\\n\");\n }\n\n private buildStreetCoreLine(): string {\n if (this.apartmentNumber) return `${this.street.street} lgh ${this.apartmentNumber}`;\n return this.street.street;\n }\n\n /** Wraps an already-parsed {@link Address}. Used by the country-address registry. */\n static tryWrap(address: Address): SwedishAddress | null {\n if (address.country && address.country.alpha2Code.toUpperCase() !== \"SE\") return null;\n if (address.zipCode === null || !address.zipCode.isSwedish) return null;\n if (address.city === null) return null;\n const swedishZip = SwedishAddressZipCode.tryParse(address.zipCode.value);\n if (swedishZip === null) return null;\n const withCountry =\n address.country !== null\n ? address\n : new Address(address.street, address.zipCode, address.city, Country.Sweden);\n return new SwedishAddress(address.street, swedishZip, address.city, withCountry);\n }\n}\n","import { Country } from \"../geography/index.js\";\nimport * as A from \"./country-addresses.js\";\nimport { registerCountryAddress } from \"./country-address-registry.js\";\nimport { SwedishAddress } from \"./swedish-address.js\";\nimport { SwedishAddressZipCode } from \"./swedish-address-zip-code.js\";\n\nlet registered = false;\n\n/**\n * Registers every built-in country-specific address type so that\n * `Address.asCountryAddress()` and `Address.supportedCountryAddressTypes`\n * resolve them.\n *\n * This is an explicit call rather than module-load side effects because the\n * package declares `sideEffects: false`; a bundler is free to drop a module\n * that is only imported for its side effects.\n */\nexport function registerDefaultCountryAddresses(): void {\n if (registered) return;\n registered = true;\n\n // Sweden first, matching the .NET registry order.\n registerCountryAddress({\n country: Country.Sweden,\n tryWrap: (address) => SwedishAddress.tryWrap(address),\n formatZip: (value) => SwedishAddressZipCode.format(value),\n });\n\n for (const countryAddress of [\n A.NorwegianAddress,\n A.FinnishAddress,\n A.DanishAddress,\n A.GermanAddress,\n A.PolishAddress,\n A.EstonianAddress,\n A.LithuanianAddress,\n A.RomanianAddress,\n A.BulgarianAddress,\n A.LatvianAddress,\n A.CzechAddress,\n A.SpanishAddress,\n A.DutchAddress,\n A.GreekAddress,\n A.ItalianAddress,\n A.SlovenianAddress,\n A.CroatianAddress,\n A.PortugueseAddress,\n A.HungarianAddress,\n A.FrenchAddress,\n A.SlovakAddress,\n A.BelgianAddress,\n A.BritishAddress,\n A.AustrianAddress,\n A.CypriotAddress,\n A.IcelandicAddress,\n A.SwissAddress,\n A.IrishAddress,\n A.LuxembourgishAddress,\n A.MalteseAddress,\n A.LiechtensteinAddress,\n ]) {\n registerCountryAddress({\n country: countryAddress.country,\n tryWrap: (address) => countryAddress.tryWrap(address),\n formatZip: (value) => countryAddress.zipCodeType.format(value),\n });\n }\n}\n","/**\n * Shared helpers for organization-number / VAT validation. Internal to the\n * `organization/` namespace.\n */\n\n/** Validates ISO 17442 / ISO 7064 Mod-97 checksum (used by LEI and IBAN). */\nexport function isValidIso7064Mod97(input: string): boolean {\n if (!input) return false;\n let s = \"\";\n for (const c of input) {\n if (c >= \"0\" && c <= \"9\") s += c;\n else if (c >= \"A\" && c <= \"Z\") s += String(c.charCodeAt(0) - 55);\n else if (c >= \"a\" && c <= \"z\") s += String(c.charCodeAt(0) - 87);\n else return false;\n }\n // Compute s % 97 using running modulo to avoid BigInt overhead.\n let mod = 0;\n for (let i = 0; i < s.length; i++) {\n mod = (mod * 10 + (s.charCodeAt(i) - 0x30)) % 97;\n }\n return mod === 1;\n}\n\n/** Removes spaces, dashes and non-breaking spaces. */\nexport function cleanSeparators(input: string): string {\n if (!input) return \"\";\n let out = \"\";\n for (const c of input) {\n if (c !== \" \" && c !== \"-\" && c !== \"\\u00A0\") out += c;\n }\n return out;\n}\n\n/** Trims and uppercases, removing a trailing `(PUBL)` suffix. */\nexport function cleanName(name: string | null | undefined): string {\n if (name == null || name.trim() === \"\") return \"\";\n let s = name.trim().toUpperCase();\n if (s.endsWith(\"(PUBL)\")) s = s.slice(0, -6).trim();\n return s;\n}\n\nexport function nameContains(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) if (haystack.indexOf(n) >= 0) return true;\n return false;\n}\n\nexport function nameContainsStandalone(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) {\n if (haystack === n) return true;\n if (haystack.startsWith(n + \" \")) return true;\n if (haystack.endsWith(\" \" + n)) return true;\n if (haystack.indexOf(\" \" + n + \" \") >= 0) return true;\n }\n return false;\n}\n\nexport function nameEndsWith(haystack: string, ...needles: readonly string[]): boolean {\n if (!haystack) return false;\n for (const n of needles) if (haystack.endsWith(n)) return true;\n return false;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"../internal/input-sanitization.js\";\nimport { nameContains, nameContainsStandalone } from \"./organization-validation-utils.js\";\nimport { SwedishOrganizationType } from \"./swedish-organization-type.js\";\n\nconst MAX_INPUT_LENGTH = 300;\n\n/** Pattern matching strict Swedish company-name characters (Bolagsverket). */\nconst COMPANY_NAME_PATTERN = /^[\\p{L}\\d\\s\\-'&.,/:()+]+$/u;\n\nconst ORG_SUFFIX_TOKENS: readonly string[] = [\"AB\", \"HB\", \"KB\", \"BRF\", \"HSB\", \"EF\"];\nconst ORG_SUFFIX_PHRASES: readonly string[] = [\n \" EK.FÖR.\",\n \" EK FÖR\",\n \" EKONOMISK FÖRENING\",\n \" IDEELL FÖRENING\",\n \" SAMFÄLLIGHETSFÖRENING\",\n \" RIKSFÖRBUND\",\n];\nconst ORG_PREFIXES: readonly string[] = [\"STIFTELSEN \", \"BRF \", \"HSB \"];\nconst ORG_KEYWORDS: readonly string[] = [\n \" KOMMUN\",\n \" REGION\",\n \" LANDSTING\",\n \" MYNDIGHET\",\n \" STIFTELSE\",\n \" FÖRENING\",\n];\n\nconst KNOWN_ABBREVIATIONS = new Set([\"AB\", \"HB\", \"KB\", \"BRF\", \"HSB\", \"EF\"]);\n\nconst KNOWN_GOVERNMENT_AGENCIES: ReadonlySet<string> = new Set([\n \"SKATTEVERKET\",\n \"TULLVERKET\",\n \"KRONOFOGDEN\",\n \"STATISTISKA CENTRALBYRÅN\",\n \"KRIMINALVÅRDEN\",\n \"MIGRATIONSVERKET\",\n \"DOMSTOLSVERKET\",\n \"BROTTSFÖREBYGGANDE RÅDET\",\n \"FÖRSÄKRINGSKASSAN\",\n \"SOCIALSTYRELSEN\",\n \"SKOLVERKET\",\n \"CENTRALA STUDIESTÖDSNÄMNDEN\",\n \"UNIVERSITETS- OCH HÖGSKOLERÅDET\",\n \"BOLAGSVERKET\",\n \"TRAFIKVERKET\",\n \"TRANSPORTSTYRELSEN\",\n \"TILLVÄXTVERKET\",\n \"PATENT- OCH REGISTRERINGSVERKET\",\n \"ARBETSFÖRMEDLINGEN\",\n \"ARBETSMILJÖVERKET\",\n \"NATURVÅRDSVERKET\",\n \"FÖRSVARSMAKTEN\",\n \"POST- OCH TELESTYRELSEN\",\n \"SJÖFARTSVERKET\",\n \"RIKSBANKEN\",\n \"RIKSREVISIONEN\",\n \"RIKSGÄLDEN\",\n \"RIKSGÄLDSKONTORET\",\n \"EKONOMISTYRNINGSVERKET\",\n \"JORDBRUKSVERKET\",\n \"LIVSMEDELSVERKET\",\n \"LANTMÄTERIET\",\n \"BOVERKET\",\n \"KONSUMENTVERKET\",\n \"RIKSARKIVET\",\n \"KUNGLIGA BIBLIOTEKET\",\n \"KEMIKALIEINSPEKTIONEN\",\n \"INTEGRITETSSKYDDSMYNDIGHETEN\",\n \"ELSÄKERHETSVERKET\",\n \"HAVS- OCH VATTENMYNDIGHETEN\",\n \"SKOGSSTYRELSEN\",\n \"VALMYNDIGHETEN\",\n \"LÄNSSTYRELSEN\",\n \"DATAINSPEKTIONEN\",\n \"KONKURRENSVERKET\",\n \"UPPHANDLINGSMYNDIGHETEN\",\n]);\n\n/** A Swedish organization name (`organisationsnamn` / `företagsnamn`). */\nexport class SwedishOrganizationName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Organization Name\",\n localizedName: \"Organisationsnamn\",\n emoji: \"\\u{1F3F7}\\uFE0F\",\n sources: Object.freeze([\"https://bolagsverket.se\"]),\n });\n\n readonly value: string;\n readonly casingNormalizedValue: string;\n readonly hasOrganizationIndicators: boolean;\n readonly inferredSwedishOrganizationType: SwedishOrganizationType;\n\n private constructor(\n value: string,\n casingNormalized: string,\n hasIndicators: boolean,\n inferredType: SwedishOrganizationType,\n ) {\n this.value = value;\n this.casingNormalizedValue = casingNormalized;\n this.hasOrganizationIndicators = hasIndicators;\n this.inferredSwedishOrganizationType = inferredType;\n }\n\n static tryParse(input: string | null | undefined): SwedishOrganizationName | null {\n const normalized = collapseWhitespace(input);\n if (normalized.length === 0 || normalized.length > MAX_INPUT_LENGTH) return null;\n if (!validateName(normalized)) return null;\n\n const forInference = stripPublSuffix(normalized);\n const hasIndicators = detectOrganizationIndicators(forInference);\n const inferred = inferTypeFromName(forInference);\n const casing = SwedishOrganizationName.normalizeCasing(normalized);\n return new SwedishOrganizationName(normalized, casing, hasIndicators, inferred);\n }\n\n static parse(input: string): SwedishOrganizationName {\n const r = SwedishOrganizationName.tryParse(input);\n if (r === null) throw new Error(\"Invalid organization name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return SwedishOrganizationName.tryParse(input) !== null;\n }\n\n static isKnownGovernmentAgency(name: string | null | undefined): boolean {\n if (name == null || name.trim() === \"\") return false;\n return KNOWN_GOVERNMENT_AGENCIES.has(collapseWhitespace(name).toUpperCase());\n }\n\n static inferSwedishOrganizationType(name: string | null | undefined): SwedishOrganizationType {\n if (name == null || name.trim() === \"\") return SwedishOrganizationType.Unknown;\n return inferTypeFromName(stripPublSuffix(collapseWhitespace(name)));\n }\n\n static normalizeCasing(name: string): string {\n const letters = [...name].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return name;\n const allLower = letters.every((c) => c === c.toLowerCase());\n const allUpper = letters.every((c) => c === c.toUpperCase());\n if (!allLower && !allUpper) return name;\n\n return name\n .split(\" \")\n .map((w) => (KNOWN_ABBREVIATIONS.has(w.toUpperCase()) ? w.toUpperCase() : capitalizeWord(w)))\n .join(\" \");\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = SwedishOrganizationName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return SwedishOrganizationName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && SwedishOrganizationName.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: SwedishOrganizationName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: SwedishOrganizationName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n\nfunction stripPublSuffix(name: string): string {\n const trimmed = name.trimEnd();\n if (trimmed.toUpperCase().endsWith(\"(PUBL)\")) return trimmed.slice(0, -6).trimEnd();\n return name;\n}\n\nfunction validateName(value: string): boolean {\n if (value.length < 2 || value.length > 200) return false;\n for (const c of value) {\n const code = c.charCodeAt(0);\n if (code < 0x20 || code === 0x7f) return false;\n }\n return COMPANY_NAME_PATTERN.test(value);\n}\n\nfunction detectOrganizationIndicators(collapsed: string): boolean {\n const upper = collapsed.toUpperCase();\n if (!upper) return false;\n const words = upper.split(\" \");\n if (words.length > 0 && ORG_SUFFIX_TOKENS.includes(words[words.length - 1]!)) return true;\n for (const p of ORG_SUFFIX_PHRASES) if (upper.endsWith(p)) return true;\n for (const p of ORG_PREFIXES) if (upper.startsWith(p)) return true;\n for (const k of ORG_KEYWORDS) if (upper.indexOf(k) >= 0) return true;\n if (KNOWN_GOVERNMENT_AGENCIES.has(upper)) return true;\n return false;\n}\n\nfunction inferTypeFromName(collapsed: string): SwedishOrganizationType {\n const upper = collapsed.toUpperCase();\n if (!upper) return SwedishOrganizationType.Unknown;\n\n const words = upper.split(\" \");\n const lastWord = words.length > 0 ? words[words.length - 1]! : \"\";\n\n if (lastWord === \"AB\") return SwedishOrganizationType.Aktiebolag;\n if (lastWord === \"KB\" || nameContains(upper, \"KOMMANDITBOLAG\"))\n return SwedishOrganizationType.Kommanditbolag;\n if (lastWord === \"HB\" || nameContains(upper, \"HANDELSBOLAG\"))\n return SwedishOrganizationType.Handelsbolag;\n\n if (\n nameContainsStandalone(upper, \"BRF\") ||\n nameContains(upper, \"BOSTADSRÄTTSFÖRENING\", \"BOSTADSRATTSFORENING\")\n )\n return SwedishOrganizationType.Bostadsrattsforening;\n\n if (\n nameContains(\n upper,\n \"SAMFÄLLIGHETSFÖRENING\",\n \"SAMFALLIGHETSFORENING\",\n \"SAMFALLIGHETSSFORENING\",\n \"SAMFÄLLIGHET\",\n \"SAMFALLIGHET\",\n )\n )\n return SwedishOrganizationType.Samfallighetsforening;\n\n if (lastWord === \"HSB\" || upper.startsWith(\"HSB \"))\n return SwedishOrganizationType.EkonomiskForening;\n\n if (\n upper.endsWith(\" EK.FÖR.\") ||\n upper.endsWith(\" EK FÖR\") ||\n nameContains(upper, \"EKONOMISK FÖRENING\")\n )\n return SwedishOrganizationType.EkonomiskForening;\n\n if (nameContains(upper, \"IDEELL FÖRENING\")) return SwedishOrganizationType.IdeellForening;\n\n if (upper.startsWith(\"STIFTELSEN \") || nameContains(upper, \"STIFTELSE\"))\n return SwedishOrganizationType.Stiftelse;\n\n if (nameContains(upper, \"KOMMUN\")) return SwedishOrganizationType.Kommun;\n if (nameContains(upper, \"REGION\", \"LANDSTING\")) return SwedishOrganizationType.Region;\n if (nameContains(upper, \"FÖRSAMLING\", \"FORSAMLING\")) return SwedishOrganizationType.Forsamling;\n if (nameContains(upper, \"MYNDIGHET\")) return SwedishOrganizationType.OffentligSektor;\n if (KNOWN_GOVERNMENT_AGENCIES.has(upper)) return SwedishOrganizationType.OffentligSektor;\n if (nameContains(upper, \"DÖDSBO\", \"DODSBO\")) return SwedishOrganizationType.Dodsbo;\n\n if (lastWord === \"EF\" || nameContains(upper, \"ENSKILD FIRMA\"))\n return SwedishOrganizationType.EnskildFirma;\n if (nameContains(upper, \"PRIVATPERSON\")) return SwedishOrganizationType.Privatperson;\n\n if (nameContainsStandalone(upper, \"EUROPABOLAG\", \"SE-BOLAG\"))\n return SwedishOrganizationType.Europabolag;\n if (nameContainsStandalone(upper, \"EUROPEISK EKONOMISK INTRESSEGRUPPERING\", \"EEIG\"))\n return SwedishOrganizationType.EuropeiskEkonomiskIntressegruppering;\n if (nameContainsStandalone(upper, \"SCE\") || nameContains(upper, \"EUROPEISK KOOPERATIV FÖRENING\"))\n return SwedishOrganizationType.SCEForening;\n if (nameContainsStandalone(upper, \"FILIAL\")) return SwedishOrganizationType.Filial;\n\n if (nameContains(upper, \"RIKSFÖRBUND\", \"FÖRENING\")) return SwedishOrganizationType.IdeellForening;\n\n return SwedishOrganizationType.Unknown;\n}\n\n/** Mask an organization name, keeping only the first letter of each word, e.g. `Volvo AB` -> `V**** A*`. */\nexport function maskSwedishOrganizationName(value: SwedishOrganizationName): string {\n return value.value\n .split(\" \")\n .filter((part) => part.length > 0)\n .map((part) => (part.length <= 1 ? \"*\" : part[0]! + \"*\".repeat(part.length - 1)))\n .join(\" \");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const lowered = word.toLocaleLowerCase(\"sv-SE\");\n return lowered[0]!.toLocaleUpperCase(\"sv-SE\") + lowered.slice(1);\n}\n","import { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { collapseWhitespace as baseCollapse } from \"../internal/input-sanitization.js\";\n\n// Single-letter name parts (e.g. \"B N\" returned by an identity provider) are\n// not officially valid full names in most jurisdictions, but they appear in\n// real-world data from Skatteverket, BankID and other identity providers.\n// Normalization must preserve them rather than discard the name.\nexport const SINGLE_PART_PATTERN =\n /^(?:[\\p{L}\\p{M}]+|['\\p{L}\\p{M}]{2,}|[\\p{Lo}])(?:['\\p{Zs}-][\\p{L}\\p{M}]+)*$/u;\n\nexport const FULL_NAME_PATTERN = /^[\\p{L}\\p{M}][\\p{L}\\p{M}']*(?:\\s+[\\p{L}\\p{M}][\\p{L}\\p{M}']*)+$/u;\n\nconst HONORIFICS = [\n \"fröken\",\n \"froken\",\n \"froeken\",\n \"prof\",\n \"miss\",\n \"mrs\",\n \"mr\",\n \"ms\",\n \"dr\",\n \"herr\",\n \"fru\",\n];\n\nexport function collapseWhitespace(input: string | null | undefined): string {\n let result = baseCollapse(input);\n result = result.replace(/\\s*-\\s*/g, \"-\");\n const parts = result\n .split(\" \")\n .map((p) => p.replace(/^\\.+|\\.+$/g, \"\"))\n .filter((p) => p.length > 0);\n result = parts.join(\" \");\n return stripLeadingHonorific(result);\n}\n\nfunction stripLeadingHonorific(input: string): string {\n const lower = input.toLowerCase();\n for (const h of HONORIFICS) {\n if (input.length <= h.length) continue;\n if (!lower.startsWith(h)) continue;\n if (input[h.length] !== \" \") continue;\n return input.slice(h.length + 1);\n }\n return input;\n}\n\n/**\n * If every letter in `input` has the same case (all lower or all upper),\n * capitalize each word and hyphenated sub-word. Otherwise keep original casing.\n */\nexport function normalizeCasing(input: string): string {\n const letters = [...input].filter((c) => /\\p{L}/u.test(c));\n if (letters.length === 0) return input;\n const culture = PrimitivesDefaults.culture;\n const allLower = letters.every((c) => c === c.toLocaleLowerCase(culture));\n const allUpper = letters.every((c) => c === c.toLocaleUpperCase(culture));\n return allLower || allUpper ? capitalizeEachWord(input) : input;\n}\n\nexport function validateNamePart(value: string | null | undefined): boolean {\n if (value == null || value.trim() === \"\") return false;\n if (/[\\p{Cc}]/u.test(value)) return false;\n if (/[\\p{Cn}]/u.test(value)) return false;\n return SINGLE_PART_PATTERN.test(value);\n}\n\nexport function validateGivenNames(value: string | null | undefined): boolean {\n if (value == null || value.trim() === \"\") return false;\n const parts = value.split(\" \").filter((p) => p !== \"\");\n return parts.length > 0 && parts.every(validateNamePart);\n}\n\nfunction capitalizeEachWord(input: string): string {\n return input.split(\" \").filter(Boolean).map(capitalizeHyphenated).join(\" \");\n}\n\nfunction capitalizeHyphenated(word: string): string {\n return word.split(\"-\").map(capitalizeWord).join(\"-\");\n}\n\nfunction capitalizeWord(word: string): string {\n if (!word) return word;\n const culture = PrimitivesDefaults.culture;\n const lowered = word.toLocaleLowerCase(culture);\n for (let i = 0; i < lowered.length; i++) {\n if (/\\p{L}/u.test(lowered[i]!)) {\n return lowered.slice(0, i) + lowered[i]!.toLocaleUpperCase(culture) + lowered.slice(i + 1);\n }\n }\n return lowered;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport {\n collapseWhitespace,\n normalizeCasing,\n validateGivenNames,\n} from \"./person-name-normalization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\n/** A person's given names (`förnamn`). */\nexport class PersonGivenName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Given Name\",\n localizedName: \"Förnamn\",\n emoji: \"\\u{270F}\\uFE0F\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly value: string;\n readonly names: readonly string[];\n readonly preferredName: string | null;\n\n private constructor(value: string, names: readonly string[], preferredName: string | null) {\n this.value = value;\n this.names = Object.freeze([...names]);\n this.preferredName = preferredName;\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { preferredName?: string | null },\n ): PersonGivenName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const normalized = normalizeCasing(collapsed);\n if (!validateGivenNames(normalized)) return null;\n const names = normalized.split(\" \").filter((p) => p !== \"\");\n let preferred: string | null = null;\n const preferredInput = options?.preferredName ?? null;\n if (preferredInput != null && preferredInput.trim() !== \"\") {\n const np = normalizeCasing(collapseWhitespace(preferredInput));\n const found = names.find((n) => n.toLowerCase() === np.toLowerCase()) ?? null;\n if (found === null) return null;\n preferred = found;\n }\n return new PersonGivenName(normalized, names, preferred);\n }\n\n static parse(input: string, options?: { preferredName?: string | null }): PersonGivenName {\n const r = PersonGivenName.tryParse(input, options);\n if (r === null) throw new Error(\"Invalid given name(s).\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonGivenName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonGivenName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return PersonGivenName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonGivenName.normalize(input) === input;\n }\n\n withPreferredName(preferredName: string): PersonGivenName {\n const found = this.names.find((n) => n.toLowerCase() === preferredName.toLowerCase()) ?? null;\n if (found === null) {\n throw new Error(\"Preferred name must be one of the given names.\");\n }\n return new PersonGivenName(this.value, this.names, found);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonGivenName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonGivenName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport {\n collapseWhitespace,\n normalizeCasing,\n validateNamePart,\n} from \"./person-name-normalization.js\";\n\nconst MAX_INPUT_LENGTH = 200;\n\n/** A person's family name (`efternamn`). */\nexport class PersonFamilyName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Family Name\",\n localizedName: \"Efternamn\",\n emoji: \"\\u{1F4DB}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n static tryParse(input: string | null | undefined): PersonFamilyName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const normalized = normalizeCasing(collapsed);\n if (!validateNamePart(normalized)) return null;\n return new PersonFamilyName(normalized);\n }\n\n static parse(input: string): PersonFamilyName {\n const r = PersonFamilyName.tryParse(input);\n if (r === null) throw new Error(\"Invalid family name.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonFamilyName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonFamilyName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return PersonFamilyName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonFamilyName.normalize(input) === input;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonFamilyName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonFamilyName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { collapseWhitespace } from \"./person-name-normalization.js\";\nimport { PersonGivenName } from \"./person-given-name.js\";\nimport { PersonFamilyName } from \"./person-family-name.js\";\n\nconst MAX_INPUT_LENGTH = 500;\n\n/** A person's full name (`fullständigt namn`). */\nexport class PersonFullName {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Full Name\",\n localizedName: \"Fullständigt namn\",\n emoji: \"\\u{1F4C7}\",\n sources: Object.freeze([\n \"https://skatteverket.se/privat/folkbokforing/namn.4.18e1b10334ebe8bc80004083.html\",\n \"https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20161013-om-personnamn_sfs-2016-1013/\",\n ]),\n });\n\n readonly givenName: PersonGivenName;\n readonly familyName: PersonFamilyName;\n readonly value: string;\n\n get preferredName(): string | null {\n return this.givenName.preferredName;\n }\n\n private constructor(given: PersonGivenName, family: PersonFamilyName, value: string) {\n this.givenName = given;\n this.familyName = family;\n this.value = value;\n }\n\n static create(givenName: PersonGivenName, familyName: PersonFamilyName): PersonFullName {\n return new PersonFullName(givenName, familyName, `${givenName.value} ${familyName.value}`);\n }\n\n static tryParse(\n input: string | null | undefined,\n options?: { preferredName?: string | null },\n ): PersonFullName | null {\n const collapsed = collapseWhitespace(input);\n if (collapsed.length === 0 || collapsed.length > MAX_INPUT_LENGTH) return null;\n const tokens = collapsed.split(\" \").filter((t) => t !== \"\");\n if (tokens.length < 2) return null;\n const givenPart = tokens.slice(0, tokens.length - 1).join(\" \");\n const given = PersonGivenName.tryParse(givenPart, options);\n if (given === null) return null;\n const family = PersonFamilyName.tryParse(tokens[tokens.length - 1]!);\n if (family === null) return null;\n return new PersonFullName(given, family, `${given.value} ${family.value}`);\n }\n\n static parse(input: string, options?: { preferredName?: string | null }): PersonFullName {\n const r = PersonFullName.tryParse(input, options);\n if (r === null) {\n throw new Error(\"Invalid full name. Must contain at least given name(s) and a family name.\");\n }\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PersonFullName.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PersonFullName.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n return PersonFullName.format(input, options);\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PersonFullName.normalize(input) === input;\n }\n\n withPreferredName(preferredName: string): PersonFullName {\n const given = this.givenName.withPreferredName(preferredName);\n return new PersonFullName(given, this.familyName, this.value);\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return this.value;\n }\n\n equals(other: PersonFullName | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PersonFullName | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { SwedishOrganizationName } from \"../organization/swedish-organization-name.js\";\nimport { PersonFullName } from \"../person/person-full-name.js\";\nimport { Address } from \"./address.js\";\n\n/** A contact address combining optional person name, organization name, and postal address. */\nexport class ContactAddress {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Contact Address\",\n localizedName: \"Kontaktuppgift\",\n emoji: \"\\u{1F4EC}\",\n sources: Object.freeze([]),\n });\n\n readonly personName: PersonFullName | null;\n readonly organizationName: SwedishOrganizationName | null;\n readonly address: Address | null;\n\n get hasPersonName(): boolean {\n return this.personName !== null;\n }\n\n get hasOrganizationName(): boolean {\n return this.organizationName !== null;\n }\n\n get hasAddress(): boolean {\n return this.address !== null;\n }\n\n private constructor(\n personName: PersonFullName | null,\n organizationName: SwedishOrganizationName | null,\n address: Address | null,\n ) {\n this.personName = personName;\n this.organizationName = organizationName;\n this.address = address;\n }\n\n static create(\n personName: PersonFullName | null = null,\n organizationName: SwedishOrganizationName | null = null,\n address: Address | null = null,\n ): ContactAddress {\n if (personName === null && organizationName === null && address === null) {\n throw new Error(\"At least one of personName, organizationName, or address must be provided.\");\n }\n return new ContactAddress(personName, organizationName, address);\n }\n\n static builder(): ContactAddressBuilder {\n return new ContactAddressBuilder();\n }\n\n toMultilineString(): string {\n const lines: string[] = [];\n if (this.personName) lines.push(this.personName.value);\n if (this.organizationName) lines.push(this.organizationName.value);\n if (this.address) lines.push(this.address.toMultilineString());\n return lines.join(\"\\n\");\n }\n\n toDisplayString(): string {\n return this.buildSingleLine(!PrimitivesDefaults.useLocalizedDisplayNames);\n }\n\n toEnglishString(): string {\n return this.buildSingleLine(true);\n }\n\n toNativeString(): string {\n const parts = this.buildNameParts();\n if (this.address) parts.push(this.address.toNativeString());\n return parts.join(\", \");\n }\n\n toString(): string {\n return this.toDisplayString();\n }\n\n private buildSingleLine(useEnglish: boolean): string {\n const parts = this.buildNameParts();\n if (this.address) {\n parts.push(useEnglish ? this.address.toEnglishString() : this.address.toDisplayString());\n }\n return parts.join(\", \");\n }\n\n private buildNameParts(): string[] {\n const parts: string[] = [];\n if (this.personName) parts.push(this.personName.value);\n if (this.organizationName) parts.push(this.organizationName.value);\n return parts;\n }\n}\n\n/** Fluent builder for creating a ContactAddress from parsed instances or raw strings. */\nexport class ContactAddressBuilder {\n private personName: PersonFullName | null = null;\n private organizationName: SwedishOrganizationName | null = null;\n private address: Address | null = null;\n\n withPersonName(value: string | PersonFullName | null | undefined): ContactAddressBuilder {\n if (value instanceof PersonFullName) this.personName = value;\n else {\n const parsed = PersonFullName.tryParse(value);\n if (parsed) this.personName = parsed;\n }\n return this;\n }\n\n withOrganizationName(\n value: string | SwedishOrganizationName | null | undefined,\n ): ContactAddressBuilder {\n if (value instanceof SwedishOrganizationName) this.organizationName = value;\n else {\n const parsed = SwedishOrganizationName.tryParse(value);\n if (parsed) this.organizationName = parsed;\n }\n return this;\n }\n\n withAddress(value: string | Address | null | undefined): ContactAddressBuilder;\n withAddress(\n street: string | null | undefined,\n zipCode: string | null | undefined,\n city: string | null | undefined,\n country?: string | null,\n ): ContactAddressBuilder;\n withAddress(\n valueOrStreet: string | Address | null | undefined,\n zipCode?: string | null,\n city?: string | null,\n country?: string | null,\n ): ContactAddressBuilder {\n if (valueOrStreet instanceof Address) {\n this.address = valueOrStreet;\n return this;\n }\n\n const parsed =\n zipCode !== undefined || city !== undefined || country !== undefined\n ? Address.tryParse({ street: valueOrStreet, zipCode, city, country })\n : Address.tryParse(valueOrStreet);\n if (parsed) this.address = parsed;\n return this;\n }\n\n tryBuild(): ContactAddress | null {\n if (this.personName === null && this.organizationName === null && this.address === null) {\n return null;\n }\n return ContactAddress.create(this.personName, this.organizationName, this.address);\n }\n\n build(): ContactAddress {\n const result = this.tryBuild();\n if (result === null) {\n throw new Error(\n \"At least one of person name, organization name, or address must be provided.\",\n );\n }\n return result;\n }\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\n\nconst CODE_TO_COUNTRY: Readonly<Record<string, string>> = Object.freeze({\n \"1\": \"US\",\n \"7\": \"RU\",\n \"20\": \"EG\",\n \"27\": \"ZA\",\n \"30\": \"GR\",\n \"31\": \"NL\",\n \"32\": \"BE\",\n \"33\": \"FR\",\n \"34\": \"ES\",\n \"36\": \"HU\",\n \"39\": \"IT\",\n \"40\": \"RO\",\n \"41\": \"CH\",\n \"43\": \"AT\",\n \"44\": \"GB\",\n \"45\": \"DK\",\n \"46\": \"SE\",\n \"47\": \"NO\",\n \"48\": \"PL\",\n \"49\": \"DE\",\n \"51\": \"PE\",\n \"52\": \"MX\",\n \"53\": \"CU\",\n \"54\": \"AR\",\n \"55\": \"BR\",\n \"56\": \"CL\",\n \"57\": \"CO\",\n \"58\": \"VE\",\n \"60\": \"MY\",\n \"61\": \"AU\",\n \"62\": \"ID\",\n \"63\": \"PH\",\n \"64\": \"NZ\",\n \"65\": \"SG\",\n \"66\": \"TH\",\n \"81\": \"JP\",\n \"82\": \"KR\",\n \"84\": \"VN\",\n \"86\": \"CN\",\n \"90\": \"TR\",\n \"91\": \"IN\",\n \"92\": \"PK\",\n \"93\": \"AF\",\n \"94\": \"LK\",\n \"95\": \"MM\",\n \"98\": \"IR\",\n \"211\": \"SS\",\n \"212\": \"MA\",\n \"213\": \"DZ\",\n \"216\": \"TN\",\n \"218\": \"LY\",\n \"220\": \"GM\",\n \"221\": \"SN\",\n \"222\": \"MR\",\n \"223\": \"ML\",\n \"224\": \"GN\",\n \"225\": \"CI\",\n \"226\": \"BF\",\n \"227\": \"NE\",\n \"228\": \"TG\",\n \"229\": \"BJ\",\n \"230\": \"MU\",\n \"231\": \"LR\",\n \"232\": \"SL\",\n \"233\": \"GH\",\n \"234\": \"NG\",\n \"235\": \"TD\",\n \"236\": \"CF\",\n \"237\": \"CM\",\n \"238\": \"CV\",\n \"239\": \"ST\",\n \"240\": \"GQ\",\n \"241\": \"GA\",\n \"242\": \"CG\",\n \"243\": \"CD\",\n \"244\": \"AO\",\n \"245\": \"GW\",\n \"248\": \"SC\",\n \"249\": \"SD\",\n \"250\": \"RW\",\n \"251\": \"ET\",\n \"252\": \"SO\",\n \"253\": \"DJ\",\n \"254\": \"KE\",\n \"255\": \"TZ\",\n \"256\": \"UG\",\n \"257\": \"BI\",\n \"258\": \"MZ\",\n \"260\": \"ZM\",\n \"261\": \"MG\",\n \"263\": \"ZW\",\n \"264\": \"NA\",\n \"265\": \"MW\",\n \"266\": \"LS\",\n \"267\": \"BW\",\n \"268\": \"SZ\",\n \"269\": \"KM\",\n \"291\": \"ER\",\n \"297\": \"AW\",\n \"298\": \"FO\",\n \"299\": \"GL\",\n \"350\": \"GI\",\n \"351\": \"PT\",\n \"352\": \"LU\",\n \"353\": \"IE\",\n \"354\": \"IS\",\n \"355\": \"AL\",\n \"356\": \"MT\",\n \"357\": \"CY\",\n \"358\": \"FI\",\n \"359\": \"BG\",\n \"370\": \"LT\",\n \"371\": \"LV\",\n \"372\": \"EE\",\n \"373\": \"MD\",\n \"374\": \"AM\",\n \"375\": \"BY\",\n \"376\": \"AD\",\n \"377\": \"MC\",\n \"378\": \"SM\",\n \"379\": \"VA\",\n \"380\": \"UA\",\n \"381\": \"RS\",\n \"382\": \"ME\",\n \"383\": \"XK\",\n \"385\": \"HR\",\n \"386\": \"SI\",\n \"387\": \"BA\",\n \"389\": \"MK\",\n \"420\": \"CZ\",\n \"421\": \"SK\",\n \"423\": \"LI\",\n \"501\": \"BZ\",\n \"502\": \"GT\",\n \"503\": \"SV\",\n \"504\": \"HN\",\n \"505\": \"NI\",\n \"506\": \"CR\",\n \"507\": \"PA\",\n \"509\": \"HT\",\n \"591\": \"BO\",\n \"592\": \"GY\",\n \"593\": \"EC\",\n \"595\": \"PY\",\n \"597\": \"SR\",\n \"598\": \"UY\",\n \"599\": \"CW\",\n \"670\": \"TL\",\n \"673\": \"BN\",\n \"674\": \"NR\",\n \"675\": \"PG\",\n \"676\": \"TO\",\n \"677\": \"SB\",\n \"678\": \"VU\",\n \"679\": \"FJ\",\n \"680\": \"PW\",\n \"685\": \"WS\",\n \"686\": \"KI\",\n \"688\": \"TV\",\n \"691\": \"FM\",\n \"692\": \"MH\",\n \"850\": \"KP\",\n \"852\": \"HK\",\n \"853\": \"MO\",\n \"855\": \"KH\",\n \"856\": \"LA\",\n \"880\": \"BD\",\n \"886\": \"TW\",\n \"960\": \"MV\",\n \"961\": \"LB\",\n \"962\": \"JO\",\n \"963\": \"SY\",\n \"964\": \"IQ\",\n \"965\": \"KW\",\n \"966\": \"SA\",\n \"967\": \"YE\",\n \"968\": \"OM\",\n \"970\": \"PS\",\n \"971\": \"AE\",\n \"972\": \"IL\",\n \"973\": \"BH\",\n \"974\": \"QA\",\n \"975\": \"BT\",\n \"976\": \"MN\",\n \"977\": \"NP\",\n \"992\": \"TJ\",\n \"993\": \"TM\",\n \"994\": \"AZ\",\n \"995\": \"GE\",\n \"996\": \"KG\",\n \"998\": \"UZ\",\n});\n\n/** A phone country calling code (`landsnummer`) e.g. `+46` for Sweden. */\nexport class PhoneCallingCode {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Calling Code\",\n localizedName: \"Landsnummer\",\n emoji: \"\\u{1F4DE}\",\n sources: Object.freeze([\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://en.wikipedia.org/wiki/List_of_country_calling_codes\",\n ]),\n });\n\n readonly value: string;\n readonly countryCode: string | null;\n\n private constructor(value: string, countryCode: string | null) {\n this.value = value;\n this.countryCode = countryCode;\n }\n\n /** @internal */\n static _new(value: string, countryCode: string | null): PhoneCallingCode {\n return new PhoneCallingCode(value, countryCode);\n }\n\n /** @internal */\n static fromResolvedDigits(digits: string): PhoneCallingCode {\n return new PhoneCallingCode(digits, CODE_TO_COUNTRY[digits] ?? null);\n }\n\n static tryParse(input: string | null | undefined): PhoneCallingCode | null {\n if (input == null || input.trim() === \"\") return null;\n const digits = extractDigits(input.trim());\n if (digits === null) return null;\n const country = CODE_TO_COUNTRY[digits];\n if (country == null) return null;\n return new PhoneCallingCode(digits, country);\n }\n\n static parse(input: string): PhoneCallingCode {\n const r = PhoneCallingCode.tryParse(input);\n if (r === null) throw new Error(\"Unknown phone calling code.\");\n return r;\n }\n\n static isValid(input: string | null | undefined): boolean {\n return PhoneCallingCode.tryParse(input) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PhoneCallingCode.tryParse(input);\n if (r) return r.toString();\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: { fallbackToTrimmedInputWhenInvalid?: boolean },\n ): string | null {\n const r = PhoneCallingCode.tryParse(input);\n if (r) return r.value;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PhoneCallingCode.normalize(input) === input;\n }\n\n static get all(): readonly PhoneCallingCode[] {\n return ALL;\n }\n\n toNormalizedString(): string {\n return this.value;\n }\n toString(): string {\n return `+${this.value}`;\n }\n\n equals(other: PhoneCallingCode | null | undefined): boolean {\n return other != null && this.value === other.value;\n }\n compareTo(other: PhoneCallingCode | null | undefined): number {\n if (other == null) return 1;\n return this.value < other.value ? -1 : this.value > other.value ? 1 : 0;\n }\n\n /** Sweden (+46). */\n static get Sweden(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+46\");\n }\n /** Norway (+47). */\n static get Norway(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+47\");\n }\n /** Finland (+358). */\n static get Finland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+358\");\n }\n /** Denmark (+45). */\n static get Denmark(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+45\");\n }\n /** Germany (+49). */\n static get Germany(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+49\");\n }\n /** Poland (+48). */\n static get Poland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+48\");\n }\n /** Estonia (+372). */\n static get Estonia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+372\");\n }\n /** Lithuania (+370). */\n static get Lithuania(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+370\");\n }\n /** Romania (+40). */\n static get Romania(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+40\");\n }\n /** Bulgaria (+359). */\n static get Bulgaria(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+359\");\n }\n /** Latvia (+371). */\n static get Latvia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+371\");\n }\n /** Czech Republic (+420). */\n static get CzechRepublic(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+420\");\n }\n /** Spain (+34). */\n static get Spain(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+34\");\n }\n /** Netherlands (+31). */\n static get Netherlands(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+31\");\n }\n /** Greece (+30). */\n static get Greece(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+30\");\n }\n /** Italy (+39). */\n static get Italy(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+39\");\n }\n /** Slovenia (+386). */\n static get Slovenia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+386\");\n }\n /** Croatia (+385). */\n static get Croatia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+385\");\n }\n /** Portugal (+351). */\n static get Portugal(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+351\");\n }\n /** Hungary (+36). */\n static get Hungary(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+36\");\n }\n /** France (+33). */\n static get France(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+33\");\n }\n /** Slovakia (+421). */\n static get Slovakia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+421\");\n }\n /** Belgium (+32). */\n static get Belgium(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+32\");\n }\n /** United Kingdom (+44). */\n static get UnitedKingdom(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+44\");\n }\n /** Austria (+43). */\n static get Austria(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+43\");\n }\n /** Cyprus (+357). */\n static get Cyprus(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+357\");\n }\n /** Iceland (+354). */\n static get Iceland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+354\");\n }\n /** Switzerland (+41). */\n static get Switzerland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+41\");\n }\n /** Ireland (+353). */\n static get Ireland(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+353\");\n }\n /** Luxembourg (+352). */\n static get Luxembourg(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+352\");\n }\n /** Malta (+356). */\n static get Malta(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+356\");\n }\n /** Liechtenstein (+423). */\n static get Liechtenstein(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+423\");\n }\n /** United States (+1). */\n static get UnitedStates(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+1\");\n }\n /** Russia (+7). */\n static get Russia(): PhoneCallingCode {\n return PhoneCallingCode.parse(\"+7\");\n }\n}\n\nconst ALL: readonly PhoneCallingCode[] = Object.entries(CODE_TO_COUNTRY).map(([code, cc]) =>\n PhoneCallingCode._new(code, cc),\n);\n\nfunction extractDigits(input: string): string | null {\n if (input.startsWith(\"+\")) return input.slice(1);\n if (input.startsWith(\"00\") && input.length > 2) return input.slice(2);\n if (input.length >= 1 && input.length <= 3 && /^\\d+$/.test(input)) return input;\n return null;\n}\n","import { PrimitiveTypeInfo } from \"../primitive-type-info.js\";\nimport { PrimitivesDefaults } from \"../primitives-defaults.js\";\nimport { sanitizeInput } from \"../internal/input-sanitization.js\";\nimport { TextCandidateCategory } from \"../text-scanning/text-candidate-category.js\";\nimport { TextCandidate } from \"../text-scanning/text-candidate.js\";\nimport { TextMatchConfidence } from \"../text-scanning/text-match-confidence.js\";\nimport { Country } from \"../geography/index.js\";\nimport { PhoneCallingCode } from \"./phone-calling-code.js\";\n\nconst MAX_INPUT_LENGTH = 50;\nconst URI_PREFIXES = [\"callto:\", \"tel:\", \"sms:\", \"call:\"];\n\nconst TWO_DIGIT_CODES = new Set([\n \"20\",\n \"27\",\n \"30\",\n \"31\",\n \"32\",\n \"33\",\n \"34\",\n \"36\",\n \"39\",\n \"40\",\n \"41\",\n \"43\",\n \"44\",\n \"45\",\n \"46\",\n \"47\",\n \"48\",\n \"49\",\n \"51\",\n \"52\",\n \"53\",\n \"54\",\n \"55\",\n \"56\",\n \"57\",\n \"58\",\n \"60\",\n \"61\",\n \"62\",\n \"63\",\n \"64\",\n \"65\",\n \"66\",\n \"81\",\n \"82\",\n \"84\",\n \"86\",\n \"90\",\n \"91\",\n \"92\",\n \"93\",\n \"94\",\n \"95\",\n \"98\",\n]);\n\nconst LEADING_ZERO_SIGNIFICANT = new Set([\"39\"]);\n\nconst SCAN =\n /(?:(?:\\+|00)\\d{1,3}[\\s-]\\(?\\d{1,4}\\)?[\\s-]?\\d[\\d\\s-]{5,12}\\d)|(?:(?:\\+|00)\\d{7,15})|(?:0\\d{1,3}[\\s-]?\\d[\\d\\s-]{5,10}\\d)/g;\n\n/**\n * A phone number (`telefonnummer`). Stored normalized as `00` + country code +\n * subscriber digits (e.g. `0046701740633`). Use {@link toE164String} for the\n * `+`-prefixed E.164 form.\n */\nexport class PhoneNumber {\n static readonly typeInfo: PrimitiveTypeInfo = Object.freeze({\n englishName: \"Phone Number\",\n localizedName: \"Telefonnummer\",\n emoji: \"\\u{1F4DE}\",\n sources: Object.freeze([\n \"https://pts.se/\",\n \"https://www.itu.int/rec/T-REC-E.164/\",\n \"https://en.wikipedia.org/wiki/E.164\",\n ]),\n });\n\n readonly digits: string;\n readonly countryCallingCode: PhoneCallingCode;\n readonly country: Country | null;\n readonly isSwedish: boolean;\n readonly isMobile: boolean;\n\n private constructor(digits: string, isSwedish: boolean, isMobile: boolean) {\n this.digits = digits;\n this.isSwedish = isSwedish;\n this.isMobile = isMobile;\n this.countryCallingCode = PhoneCallingCode.fromResolvedDigits(resolveCallingCode(digits));\n this.country = Country.tryFindByCallingCode(this.countryCallingCode.value);\n }\n\n get isSwedishTestPhoneNumber(): boolean {\n if (!this.isSwedish) return false;\n const local = this.digits.slice(4);\n return (\n isInPtsRange(local, \"7017406\", 5, 99) ||\n isInPtsRange(local, \"3139006\", 0, 99) ||\n isInPtsRange(local, \"4062804\", 0, 99) ||\n isInPtsRange(local, \"8465004\", 0, 99) ||\n isInPtsRange(local, \"9803192\", 0, 99)\n );\n }\n\n get formatted(): string {\n return this.isSwedish ? this.toLocalString() : this.toDisplayInternationalString();\n }\n\n static tryParse(\n input: string | null | undefined,\n defaultCallingCode?: string | PhoneCallingCode | Country | null,\n ): PhoneNumber | null {\n if (input == null || input.trim() === \"\") return null;\n const dcc = resolveDefaultCallingCode(defaultCallingCode);\n if (!dcc) return null;\n\n let cleaned = sanitizeInput(input).trim();\n if (cleaned.length > MAX_INPUT_LENGTH) return null;\n\n for (const prefix of URI_PREFIXES) {\n if (cleaned.toLowerCase().startsWith(prefix)) {\n cleaned = cleaned.slice(prefix.length).trimStart();\n break;\n }\n }\n\n const hasPlus = cleaned.startsWith(\"+\");\n const withOAs0 = cleaned.replace(/O/g, \"0\");\n const digitsOnly = withOAs0.replace(/[^\\d]/g, \"\");\n if (digitsOnly === \"\") return null;\n\n let e164: string;\n if (hasPlus) {\n if (digitsOnly.length < 7 || digitsOnly.length > 15) return null;\n e164 = stripTrunkZeroAfterCallingCode(digitsOnly);\n } else if (digitsOnly.startsWith(\"00\")) {\n const cn = digitsOnly.slice(2);\n if (cn.length < 7 || cn.length > 15) return null;\n e164 = stripTrunkZeroAfterCallingCode(cn);\n } else if (digitsOnly.startsWith(dcc) && digitsOnly.length >= dcc.length + 7) {\n const subscriber = digitsOnly.slice(dcc.length);\n e164 = dcc + stripSingleTrunkZero(dcc, subscriber);\n } else if (digitsOnly.startsWith(\"0\")) {\n const subscriber = stripSingleTrunkZero(dcc, digitsOnly);\n const total = dcc.length + subscriber.length;\n if (total < 7 || total > 15) return null;\n e164 = dcc + subscriber;\n } else if (dcc === \"46\" && digitsOnly.length === 9 && digitsOnly.startsWith(\"7\")) {\n e164 = \"46\" + digitsOnly;\n } else {\n return null;\n }\n\n if (e164.length < 7 || e164.length > 15) return null;\n const isSwedish = e164.startsWith(\"46\");\n if (isSwedish) {\n const local = e164.slice(2);\n if (local.length < 7 || local.length > 9) return null;\n }\n const isMobile = isSwedish && e164.slice(2).startsWith(\"7\");\n return new PhoneNumber(\"00\" + e164, isSwedish, isMobile);\n }\n\n static parse(\n input: string,\n defaultCallingCode?: string | PhoneCallingCode | Country | null,\n ): PhoneNumber {\n const r = PhoneNumber.tryParse(input, defaultCallingCode);\n if (r === null) throw new Error(\"Invalid phone number.\");\n return r;\n }\n\n static isValid(\n input: string | null | undefined,\n defaultCallingCode?: string | PhoneCallingCode | Country | null,\n ): boolean {\n return PhoneNumber.tryParse(input, defaultCallingCode) !== null;\n }\n\n static format(\n input: string | null | undefined,\n options?: {\n defaultCallingCode?: string | PhoneCallingCode | Country | null;\n fallbackToTrimmedInputWhenInvalid?: boolean;\n },\n ): string | null {\n const dcc =\n resolveDefaultCallingCode(options?.defaultCallingCode) ??\n PrimitivesDefaults.defaultCallingCode;\n const r = PhoneNumber.tryParse(input, dcc);\n if (r) {\n return r.countryCallingCode.value === dcc\n ? r.toLocalString()\n : r.toDisplayInternationalString();\n }\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null && input.trim() !== \"\") {\n return input.trim();\n }\n return null;\n }\n\n static normalize(\n input: string | null | undefined,\n options?: {\n defaultCallingCode?: string | PhoneCallingCode | Country | null;\n fallbackToTrimmedInputWhenInvalid?: boolean;\n },\n ): string | null {\n const r = PhoneNumber.tryParse(input, options?.defaultCallingCode);\n if (r) return r.digits;\n if (options?.fallbackToTrimmedInputWhenInvalid && input != null) {\n const t = input.trim();\n return t.length > 0 ? t : null;\n }\n return null;\n }\n\n static isNormalized(input: string | null | undefined): boolean {\n return input != null && PhoneNumber.normalize(input) === input;\n }\n\n static findCandidatesInText(text: string): readonly TextCandidate<PhoneNumber>[] {\n if (!text) return [];\n const out: TextCandidate<PhoneNumber>[] = [];\n SCAN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = SCAN.exec(text)) !== null) {\n const phone = PhoneNumber.tryParse(m[0]);\n if (!phone) continue;\n out.push(\n new TextCandidate<PhoneNumber>({\n startIndex: m.index,\n length: m[0].length,\n originalText: m[0],\n typeName: \"PhoneNumber\",\n category: TextCandidateCategory.Contact,\n normalizedForm: phone.toNormalizedString(),\n formattedForm: phone.toString(),\n maskedForm: maskPhoneNumber(phone),\n confidence: TextMatchConfidence.Medium,\n value: phone,\n }),\n );\n }\n return out;\n }\n\n toNormalizedString(): string {\n return this.digits;\n }\n\n toLocalString(defaultCallingCode?: PhoneCallingCode | Country): string {\n if (defaultCallingCode) {\n const dcc =\n defaultCallingCode instanceof PhoneCallingCode\n ? defaultCallingCode.value\n : defaultCallingCode.callingCode;\n return this.countryCallingCode.value === dcc\n ? this.toLocalString()\n : this.toDisplayInternationalString();\n }\n const subscriber = this.digits.slice(2 + this.countryCallingCode.value.length);\n if (this.isSwedish) return formatSwedishLocal(\"0\" + subscriber);\n return \"0\" + subscriber;\n }\n\n toE164String(): string {\n return \"+\" + this.digits.slice(2);\n }\n toInternationalString(): string {\n return this.toE164String();\n }\n\n toDisplayInternationalString(): string {\n const subscriber = this.digits.slice(2 + this.countryCallingCode.value.length);\n return (\n \"+\" +\n this.countryCallingCode.value +\n \" \" +\n formatInternationalSubscriberDigits(this.countryCallingCode.value, subscriber)\n );\n }\n\n toString(): string {\n return this.formatted;\n }\n\n equals(other: PhoneNumber | null | undefined): boolean {\n return other != null && this.digits === other.digits;\n }\n compareTo(other: PhoneNumber | null | undefined): number {\n if (other == null) return 1;\n return this.digits < other.digits ? -1 : this.digits > other.digits ? 1 : 0;\n }\n}\n\n/** Mask a phone number, keeping country code and last 4 digits visible. */\nexport function maskPhoneNumber(p: PhoneNumber): string {\n const f = p.toE164String();\n if (f.length <= 5) return f.replace(/\\d/g, \"*\");\n const cc = \"+\" + p.countryCallingCode.value;\n const subscriber = f.slice(cc.length);\n if (subscriber.length <= 4) return cc + \"*\".repeat(subscriber.length);\n return cc + \"*\".repeat(subscriber.length - 4) + subscriber.slice(-4);\n}\n\nfunction resolveDefaultCallingCode(\n d: string | PhoneCallingCode | Country | null | undefined,\n): string | null {\n if (d == null) return PrimitivesDefaults.defaultCallingCode;\n if (typeof d === \"string\") return d;\n if (d instanceof PhoneCallingCode) return d.value;\n return d.callingCode;\n}\n\nfunction resolveCallingCode(digits: string): string {\n return resolveCallingCodeFromE164(digits.slice(2));\n}\n\nfunction resolveCallingCodeFromE164(e164: string): string {\n if (e164.length === 0) return \"\";\n if (e164[0] === \"1\" || e164[0] === \"7\") return e164.slice(0, 1);\n if (e164.length >= 2 && TWO_DIGIT_CODES.has(e164.slice(0, 2))) return e164.slice(0, 2);\n return e164.length >= 3 ? e164.slice(0, 3) : e164;\n}\n\nfunction stripTrunkZeroAfterCallingCode(e164: string): string {\n const cc = resolveCallingCodeFromE164(e164);\n if (cc.length === 0 || cc.length >= e164.length) return e164;\n const subscriber = e164.slice(cc.length);\n return cc + stripSingleTrunkZero(cc, subscriber);\n}\n\nfunction stripSingleTrunkZero(callingCode: string, subscriber: string): string {\n if (subscriber.length === 0 || subscriber[0] !== \"0\") return subscriber;\n if (LEADING_ZERO_SIGNIFICANT.has(callingCode)) return subscriber;\n return subscriber.slice(1);\n}\n\nfunction isInPtsRange(local: string, prefix: string, from: number, to: number): boolean {\n if (!local.startsWith(prefix)) return false;\n const suffix = local.slice(prefix.length);\n if (suffix.length !== 2) return false;\n const n = parseInt(suffix, 10);\n return Number.isFinite(n) && n >= from && n <= to;\n}\n\nfunction formatInternationalSubscriberDigits(callingCode: string, digits: string): string {\n if (callingCode === \"1\" && digits.length === 10) {\n return `${digits.slice(0, 3)} ${digits.slice(3, 6)} ${digits.slice(6, 10)}`;\n }\n switch (digits.length) {\n case 7:\n return `${digits.slice(0, 3)} ${digits.slice(3, 5)} ${digits.slice(5, 7)}`;\n case 8:\n return `${digits.slice(0, 2)} ${digits.slice(2, 4)} ${digits.slice(4, 6)} ${digits.slice(6, 8)}`;\n case 9:\n return `${digits.slice(0, 2)} ${digits.slice(2, 5)} ${digits.slice(5, 7)} ${digits.slice(7, 9)}`;\n case 10:\n return `${digits.slice(0, 2)} ${digits.slice(2, 6)} ${digits.slice(6, 10)}`;\n case 11:\n return `${digits.slice(0, 3)} ${digits.slice(3, 7)} ${digits.slice(7, 11)}`;\n default:\n return digits;\n }\n}\n\nfunction formatSwedishLocal(number: string): string {\n const digits = number.replace(/^0+/, \"\");\n if (digits.length === 9) {\n return `0${digits.slice(0, 3)}-${digits.slice(3, 5)} ${digits.slice(5, 7)} ${digits.slice(7, 9)}`;\n }\n if (digits.length === 7) {\n const area = digits.slice(0, 1);\n const rest = digits.slice(1);\n return `0${area}-${rest.slice(0, 2)} ${rest.slice(2, 4)} ${rest.slice(4, 6)}`;\n }\n if (digits.length === 8) {\n const area = digits.slice(0, 1);\n const rest = digits.slice(1);\n return `0${area}-${rest.slice(0, 2)} ${rest.slice(2, 4)} ${rest.slice(4, 7)}`;\n }\n return number;\n}\n","/**\n * PTS (Post- och telestyrelsen) reserves phone number ranges for use in fiction\n * and testing — these numbers are never assigned to real subscribers.\n *\n * {@link PhoneNumberTestData} enumerates every reserved number;\n * `PhoneNumber.isSwedishTestPhoneNumber` checks whether a parsed number falls in\n * a reserved range.\n *\n * Source: https://pts.se/internet-och-telefoni/telefonnummer-och-adressering/telefonnummer-till-bocker-och-filmer/\n */\nfunction generateRange(prefix: string, from: number, to: number): readonly string[] {\n const result: string[] = [];\n for (let i = from; i <= to; i++) {\n result.push(prefix + String(i).padStart(2, \"0\"));\n }\n return Object.freeze(result);\n}\n\nexport const PhoneNumberTestData = {\n /** Mobile: 070-174 06 05 through 070-174 06 99 (95 numbers). */\n get mobile(): readonly string[] {\n return generateRange(\"07017406\", 5, 99);\n },\n\n /** Landline Gothenburg: 031-390 06 00 through 031-390 06 99 (100 numbers). */\n get landlineGothenburg(): readonly string[] {\n return generateRange(\"03139006\", 0, 99);\n },\n\n /** Landline Malmö: 040-628 04 00 through 040-628 04 99 (100 numbers). */\n get landlineMalmo(): readonly string[] {\n return generateRange(\"04062804\", 0, 99);\n },\n\n /** Landline Stockholm: 08-4650 04 00 through 08-4650 04 99 (100 numbers). */\n get landlineStockholm(): readonly string[] {\n return generateRange(\"08465004\", 0, 99);\n },\n\n /** Landline Kiruna: 0980-31 92 00 through 0980-31 92 99 (100 numbers). */\n get landlineKiruna(): readonly string[] {\n return generateRange(\"09803192\", 0, 99);\n },\n\n /** All reserved test phone numbers across all ranges (495 numbers). */\n get all(): readonly string[] {\n return Object.freeze([\n ...PhoneNumberTestData.mobile,\n ...PhoneNumberTestData.landlineGothenburg,\n ...PhoneNumberTestData.landlineMalmo,\n ...PhoneNumberTestData.landlineStockholm,\n ...PhoneNumberTestData.landlineKiruna,\n ]);\n },\n};\n","import { Address } from \"./address.js\";\nimport { AddressCity } from \"./address-city.js\";\nimport { AddressStreet } from \"./address-street.js\";\nimport { AddressZipCode } from \"./address-zip-code.js\";\nimport { PhoneNumber } from \"./phone-number.js\";\nimport { SwedishAddress } from \"./swedish-address.js\";\nimport { SwedishAddressZipCode } from \"./swedish-address-zip-code.js\";\n\nconst MASK = \"*\";\n\n/** Mask each digit in a zip code while preserving spaces, e.g. `114 53` → `*** **`. */\nexport function maskAddressZipCode(zip: AddressZipCode): string {\n return [...zip.formatted].map((c) => (c === \" \" ? \" \" : MASK)).join(\"\");\n}\n\n/** Mask Swedish zip code (delegates to the wrapped `AddressZipCode`). */\nexport function maskSwedishAddressZipCode(zip: SwedishAddressZipCode): string {\n return maskAddressZipCode(zip.zipCode);\n}\n\n/** Mask city name showing only the first character, e.g. `Stockholm` → `S********`. */\nexport function maskAddressCity(city: AddressCity): string {\n const v = city.value;\n if (v.length <= 1) return MASK.repeat(v.length);\n return v[0]! + MASK.repeat(v.length - 1);\n}\n\n/** Mask street keeping street name but masking the house number, e.g. `Storgatan 12` → `Storgatan **`. */\nexport function maskAddressStreet(street: AddressStreet): string {\n if (street.streetName === null) return MASK.repeat(street.street.length);\n if (street.streetNumber === null) return street.streetName;\n return `${street.streetName} ${MASK.repeat(street.streetNumber.length)}`;\n}\n\n/**\n * Mask a complete address, preserving street name, city, and country while masking\n * house number, apartment number, and zip code.\n */\nexport function maskAddress(address: Address): string {\n let out = \"\";\n if (address.careOf) out += `c/o ${maskKeepFirst(address.careOf, 1)}, `;\n if (address.isPostBox && address.postBox) {\n out += `Box ${MASK.repeat(address.postBox.length)}`;\n } else {\n if (address.street.streetName !== null) out += address.street.streetName;\n else out += address.street.street;\n if (address.street.streetNumber !== null) {\n out += ` ${MASK.repeat(address.street.streetNumber.length)}`;\n }\n if (address.apartmentNumber) {\n out += ` lgh ${MASK.repeat(address.apartmentNumber.length)}`;\n }\n }\n if (address.zipCode !== null) {\n out += \", \";\n out += maskAddressZipCode(address.zipCode);\n }\n if (address.city !== null) {\n out += address.zipCode !== null ? \" \" : \", \";\n out += address.city.value;\n }\n if (address.country !== null) {\n out += \", \";\n out += address.country.localizedName;\n }\n return out;\n}\n\n/** Mask a Swedish address (delegates to the wrapped generic `Address`). */\nexport function maskSwedishAddress(address: SwedishAddress): string {\n return maskAddress(address.address);\n}\n\n/**\n * Mask a phone number, keeping country/area code prefix and the last\n * `visibleDigitsAtEnd` digits visible.\n */\nexport function maskPhoneNumberDetailed(phone: PhoneNumber, visibleDigitsAtEnd = 2): string {\n const formatted = phone.toString();\n\n let visiblePrefix: number;\n if (phone.isSwedish) {\n const local = phone.toLocalString();\n const dash = local.indexOf(\"-\");\n visiblePrefix = dash > 0 ? countDigits(local.slice(0, dash)) : 3;\n } else {\n visiblePrefix = phone.countryCallingCode.value.length;\n }\n\n const totalDigits = countDigits(formatted);\n const revealEnd = Math.min(\n Math.max(0, visibleDigitsAtEnd),\n Math.max(0, totalDigits - visiblePrefix),\n );\n const maskEnd = totalDigits - revealEnd;\n\n let digitIdx = 0;\n let out = \"\";\n for (const c of formatted) {\n if (c >= \"0\" && c <= \"9\") {\n if (digitIdx >= visiblePrefix && digitIdx < maskEnd) out += MASK;\n else out += c;\n digitIdx++;\n } else {\n out += c;\n }\n }\n return out;\n}\n\nfunction countDigits(s: string): number {\n let n = 0;\n for (const c of s) if (c >= \"0\" && c <= \"9\") n++;\n return n;\n}\n\nfunction maskKeepFirst(value: string, visible: number): string {\n if (value.length <= visible) return value;\n return value.slice(0, visible) + MASK.repeat(value.length - visible);\n}\n","import { Address } from \"./address.js\";\nimport { PhoneNumber } from \"./phone-number.js\";\nimport { SwedishAddress } from \"./swedish-address.js\";\n\n/** Google Maps search URL for an address. */\nexport function getGoogleMapsUrl(address: Address | SwedishAddress): URL {\n return new URL(\n `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address.toString())}`,\n );\n}\n\n/** Bing Maps search URL for an address. */\nexport function getBingMapsUrl(address: Address | SwedishAddress): URL {\n return new URL(`https://www.bing.com/maps?q=${encodeURIComponent(address.toString())}`);\n}\n\n/** Hitta.se search URL for a phone number. */\nexport function getHittaUrl(phone: PhoneNumber): URL {\n return new URL(\n `https://www.hitta.se/sök?vad=${encodeURIComponent(phone.toInternationalString())}`,\n );\n}\n","import { Address } from \"./address.js\";\nimport { PhoneNumber } from \"./phone-number.js\";\nimport { SwedishAddress } from \"./swedish-address.js\";\n\n/** Returns a `tel:` URI, e.g. `tel:0046701740633`. */\nexport function getTelUri(phone: PhoneNumber): string {\n return `tel:${phone.toNormalizedString()}`;\n}\n\n/** Google Maps search URL for an address. */\nexport function getGoogleMapsUrlForAddress(address: Address | SwedishAddress): string {\n return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address.toString())}`;\n}\n","import { registerDefaultCountryAddresses } from \"./register-default-country-addresses.js\";\n\nregisterDefaultCountryAddresses();\n\nexport { registerDefaultCountryAddresses } from \"./register-default-country-addresses.js\";\nexport { AddressCity } from \"./address-city.js\";\nexport { AddressStreet } from \"./address-street.js\";\nexport { AddressZipCode, maskZip } from \"./address-zip-code.js\";\nexport { Address } from \"./address.js\";\nexport { ContactAddress, ContactAddressBuilder } from \"./contact-address.js\";\nexport { PhoneCallingCode } from \"./phone-calling-code.js\";\nexport { PhoneNumber, maskPhoneNumber } from \"./phone-number.js\";\nexport { PhoneNumberTestData } from \"./phone-number-test-data.js\";\nexport { SwedishAddressZipCode } from \"./swedish-address-zip-code.js\";\nexport { SwedishAddress } from \"./swedish-address.js\";\nexport {\n CountryAddressBase,\n CountryAddressZipCodeBase,\n tryWrapCountryAddress,\n} from \"./country-address.js\";\nexport type { ICountryAddress, ICountryAddressZipCode } from \"./country-address.js\";\nexport {\n maskAddress,\n maskAddressCity,\n maskAddressStreet,\n maskAddressZipCode,\n maskPhoneNumberDetailed,\n maskSwedishAddress,\n maskSwedishAddressZipCode,\n} from \"./contact-masking.js\";\nexport { getGoogleMapsUrl, getBingMapsUrl, getHittaUrl } from \"./contact-external-links.js\";\nexport { getTelUri, getGoogleMapsUrlForAddress } from \"./contact-lookup.js\";\nexport * from \"./country-zip-codes.js\";\nexport * from \"./country-addresses.js\";\n"]}