@alexlit/lint-kit 167.2.0 → 167.4.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 (142) hide show
  1. package/package.json +1 -1
  2. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/LICENSE +21 -0
  3. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/README.md +54 -0
  4. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/base.d.ts +23 -0
  5. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/base.js +25 -0
  6. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/flat/base.d.ts +35 -0
  7. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/flat/base.js +35 -0
  8. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/flat/recommended.d.ts +1194 -0
  9. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/flat/recommended.js +39 -0
  10. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/recommended.d.ts +29 -0
  11. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/recommended.js +29 -0
  12. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/index.d.ts +2532 -0
  13. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/index.js +62 -0
  14. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/key-format-style.d.ts +2 -0
  15. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/key-format-style.js +247 -0
  16. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-component.d.ts +2 -0
  17. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-component.js +85 -0
  18. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-place-attr.d.ts +2 -0
  19. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-place-attr.js +41 -0
  20. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-places-prop.d.ts +2 -0
  21. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-places-prop.js +36 -0
  22. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-modulo-syntax.d.ts +2 -0
  23. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-modulo-syntax.js +94 -0
  24. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-tc.d.ts +2 -0
  25. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-tc.js +42 -0
  26. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-v-t.d.ts +2 -0
  27. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-v-t.js +33 -0
  28. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-duplicate-keys-in-locale.d.ts +2 -0
  29. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-duplicate-keys-in-locale.js +271 -0
  30. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-dynamic-keys.d.ts +2 -0
  31. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-dynamic-keys.js +105 -0
  32. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-html-messages.d.ts +2 -0
  33. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-html-messages.js +137 -0
  34. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-i18n-t-path-prop.d.ts +2 -0
  35. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-i18n-t-path-prop.js +44 -0
  36. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-missing-keys-in-other-locales.d.ts +2 -0
  37. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-missing-keys-in-other-locales.js +264 -0
  38. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-missing-keys.d.ts +2 -0
  39. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-missing-keys.js +111 -0
  40. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-raw-text.d.ts +2 -0
  41. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-raw-text.js +575 -0
  42. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-unknown-locale.d.ts +2 -0
  43. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-unknown-locale.js +198 -0
  44. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-unused-keys.d.ts +2 -0
  45. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-unused-keys.js +456 -0
  46. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-v-html.d.ts +2 -0
  47. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-v-html.js +50 -0
  48. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/prefer-linked-key-with-paren.d.ts +2 -0
  49. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/prefer-linked-key-with-paren.js +108 -0
  50. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/prefer-sfc-lang-attr.d.ts +2 -0
  51. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/prefer-sfc-lang-attr.js +58 -0
  52. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/sfc-locale-attr.d.ts +2 -0
  53. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/sfc-locale-attr.js +65 -0
  54. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/valid-message-syntax.d.ts +2 -0
  55. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/valid-message-syntax.js +186 -0
  56. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/eslint.d.ts +216 -0
  57. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/eslint.js +2 -0
  58. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/i18n.d.ts +5 -0
  59. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/i18n.js +2 -0
  60. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/index.d.ts +6 -0
  61. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/index.js +22 -0
  62. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/nodes.d.ts +7 -0
  63. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/nodes.js +2 -0
  64. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/settings.d.ts +8 -0
  65. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/settings.js +2 -0
  66. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/types.d.ts +38 -0
  67. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/types.js +2 -0
  68. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/vue-parser-services.d.ts +32 -0
  69. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/vue-parser-services.js +2 -0
  70. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/cache-function.d.ts +2 -0
  71. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/cache-function.js +11 -0
  72. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/cache-loader.d.ts +10 -0
  73. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/cache-loader.js +27 -0
  74. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/casing.d.ts +10 -0
  75. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/casing.js +101 -0
  76. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/collect-keys.d.ts +13 -0
  77. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/collect-keys.js +160 -0
  78. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/collect-linked-keys.d.ts +2 -0
  79. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/collect-linked-keys.js +49 -0
  80. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/compat.d.ts +3 -0
  81. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/compat.js +35 -0
  82. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/default-timeouts.d.ts +6 -0
  83. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/default-timeouts.js +10 -0
  84. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/get-cwd.d.ts +2 -0
  85. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/get-cwd.js +9 -0
  86. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/glob-utils.d.ts +15 -0
  87. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/glob-utils.js +154 -0
  88. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/ignored-paths.d.ts +43 -0
  89. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/ignored-paths.js +234 -0
  90. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/index.d.ts +25 -0
  91. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/index.js +446 -0
  92. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/key-path.d.ts +2 -0
  93. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/key-path.js +27 -0
  94. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/locale-messages.d.ts +54 -0
  95. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/locale-messages.js +187 -0
  96. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/parser-v9.d.ts +8 -0
  97. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/parser-v9.js +40 -0
  98. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/parser.d.ts +5 -0
  99. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/parser.js +18 -0
  100. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/traverser.d.ts +6 -0
  101. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/traverser.js +31 -0
  102. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/utils.d.ts +28 -0
  103. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/utils.js +279 -0
  104. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/build-parser-using-flat-config.d.ts +2 -0
  105. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/build-parser-using-flat-config.js +11 -0
  106. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/build-parser-using-legacy-config.d.ts +2 -0
  107. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/build-parser-using-legacy-config.js +46 -0
  108. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/index.d.ts +4 -0
  109. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/index.js +18 -0
  110. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/parse-by-parser.d.ts +3 -0
  111. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/parse-by-parser.js +42 -0
  112. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/should-use-flat-config.d.ts +2 -0
  113. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/should-use-flat-config.js +54 -0
  114. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/worker.d.ts +1 -0
  115. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/worker.js +32 -0
  116. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parsers/index.d.ts +4 -0
  117. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parsers/index.js +32 -0
  118. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/path-utils.d.ts +2 -0
  119. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/path-utils.js +21 -0
  120. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/regexp.d.ts +1 -0
  121. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/regexp.js +16 -0
  122. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/resource-loader.d.ts +10 -0
  123. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/resource-loader.js +32 -0
  124. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/rule.d.ts +9 -0
  125. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/rule.js +75 -0
  126. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/globals.json +3345 -0
  127. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/index.d.ts +3452 -0
  128. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/index.js +2 -0
  129. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/license +9 -0
  130. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/package.json +117 -0
  131. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/readme.md +42 -0
  132. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/package.json +147 -0
  133. package/packages/config-eslint/node_modules/vue-eslint-parser/LICENSE +21 -0
  134. package/packages/config-eslint/node_modules/vue-eslint-parser/README.md +332 -0
  135. package/packages/config-eslint/node_modules/vue-eslint-parser/index.d.ts +667 -0
  136. package/packages/config-eslint/node_modules/vue-eslint-parser/index.js +6642 -0
  137. package/packages/config-eslint/node_modules/vue-eslint-parser/index.js.map +1 -0
  138. package/packages/config-eslint/node_modules/vue-eslint-parser/package.json +100 -0
  139. package/packages/config-eslint/package.json +5 -5
  140. package/packages/config-eslint/plugins/unicorn.js +2 -0
  141. package/packages/config-prettier/package.json +3 -3
  142. package/packages/config-stylelint/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js.map","sources":[".temp/ast/src/ast/errors.ts",".temp/ast/src/ast/nodes.ts",".temp/ast/src/ast/traverse.ts",".temp/utils/src/utils/utils.ts",".temp/common/src/common/lines-and-columns.ts",".temp/common/src/common/location-calculator.ts",".temp/common/src/common/debug.ts",".temp/common/src/common/ast-utils.ts",".temp/common/src/common/parser-object.ts",".temp/common/src/common/parser-options.ts",".temp/common/src/common/eslint-scope.ts",".temp/common/src/common/espree.ts",".temp/script-setup/src/script-setup/parser-options.ts",".temp/script/src/script/scope-analyzer.ts",".temp/common/src/common/fix-locations.ts",".temp/script/src/script/generic.ts",".temp/script/src/script/index.ts",".temp/common/src/common/token-utils.ts",".temp/common/src/common/error-utils.ts",".temp/template/src/template/index.ts",".temp/html/util/src/html/util/attribute-names.ts",".temp/html/util/src/html/util/tag-names.ts",".temp/html/src/html/intermediate-tokenizer.ts",".temp/html/src/html/parser.ts",".temp/html/util/src/html/util/alternative-cr.ts",".temp/html/util/src/html/util/entities.ts",".temp/html/util/src/html/util/unicode.ts",".temp/html/src/html/tokenizer.ts",".temp/utils/src/utils/memoize.ts",".temp/external/src/external/node-event-generator.ts",".temp/external/token-store/src/external/token-store/utils.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/backward-token-comment-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/backward-token-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/decorative-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/filter-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/forward-token-comment-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/forward-token-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/limit-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/skip-cursor.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/index.ts",".temp/external/token-store/cursors/src/external/token-store/cursors/padded-token-cursor.ts",".temp/external/token-store/src/external/token-store/index.ts",".temp/sfc/custom-block/src/sfc/custom-block/index.ts",".temp/src/parser-services.ts",".temp/script-setup/src/script-setup/index.ts",".temp/style/src/style/tokenizer.ts",".temp/style/src/style/index.ts",".temp/script-setup/src/script-setup/scope-analyzer.ts",".temp/src/index.ts"],"sourcesContent":["/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { Location } from \"./locations\"\n\n/**\n * Check whether the given value has acorn style location information.\n * @param x The value to check.\n * @returns `true` if the value has acorn style location information.\n */\nfunction isAcornStyleParseError(\n x: any,\n): x is { message: string; pos: number; loc: Location } {\n return (\n typeof x.message === \"string\" &&\n typeof x.pos === \"number\" &&\n typeof x.loc === \"object\" &&\n x.loc !== null &&\n typeof x.loc.line === \"number\" &&\n typeof x.loc.column === \"number\"\n )\n}\n\n/**\n * Check whether the given value is probably a TSError.\n * @param x The value to check.\n * @returns `true` if the given value is probably a TSError.\n */\nfunction isTSError(\n x: any,\n): x is { message: string; index: number; lineNumber: number; column: number } {\n return (\n !(x instanceof ParseError) &&\n typeof x.message === \"string\" &&\n typeof x.index === \"number\" &&\n typeof x.lineNumber === \"number\" &&\n typeof x.column === \"number\" &&\n x.name === \"TSError\"\n )\n}\n\n/**\n * HTML parse errors.\n */\nexport class ParseError extends SyntaxError {\n public code?: ErrorCode\n public index: number\n public lineNumber: number\n public column: number\n\n /**\n * Create new parser error object.\n * @param code The error code. See also: https://html.spec.whatwg.org/multipage/parsing.html#parse-errors\n * @param offset The offset number of this error.\n * @param line The line number of this error.\n * @param column The column number of this error.\n */\n public static fromCode(\n code: ErrorCode,\n offset: number,\n line: number,\n column: number,\n ): ParseError {\n return new ParseError(code, code, offset, line, column)\n }\n\n /**\n * Normalize the error object.\n * @param x The error object to normalize.\n */\n public static normalize(x: any): ParseError | null {\n if (isTSError(x)) {\n return new ParseError(\n x.message,\n undefined,\n x.index,\n x.lineNumber,\n x.column,\n )\n }\n if (ParseError.isParseError(x)) {\n return x\n }\n if (isAcornStyleParseError(x)) {\n return new ParseError(\n x.message,\n undefined,\n x.pos,\n x.loc.line,\n x.loc.column,\n )\n }\n return null\n }\n\n /**\n * Initialize this ParseError instance.\n * @param message The error message.\n * @param code The error code. See also: https://html.spec.whatwg.org/multipage/parsing.html#parse-errors\n * @param offset The offset number of this error.\n * @param line The line number of this error.\n * @param column The column number of this error.\n */\n public constructor(\n message: string,\n code: ErrorCode | undefined,\n offset: number,\n line: number,\n column: number,\n ) {\n super(message)\n this.code = code\n this.index = offset\n this.lineNumber = line\n this.column = column\n }\n\n /**\n * Type guard for ParseError.\n * @param x The value to check.\n * @returns `true` if the value has `message`, `pos`, `loc` properties.\n */\n public static isParseError(x: any): x is ParseError {\n return (\n x instanceof ParseError ||\n (typeof x.message === \"string\" &&\n typeof x.index === \"number\" &&\n typeof x.lineNumber === \"number\" &&\n typeof x.column === \"number\")\n )\n }\n}\n\n/**\n * The error codes of HTML syntax errors.\n * https://html.spec.whatwg.org/multipage/parsing.html#parse-errors\n */\nexport type ErrorCode =\n | \"abrupt-closing-of-empty-comment\"\n | \"absence-of-digits-in-numeric-character-reference\"\n | \"cdata-in-html-content\"\n | \"character-reference-outside-unicode-range\"\n | \"control-character-in-input-stream\"\n | \"control-character-reference\"\n | \"eof-before-tag-name\"\n | \"eof-in-cdata\"\n | \"eof-in-comment\"\n | \"eof-in-tag\"\n | \"incorrectly-closed-comment\"\n | \"incorrectly-opened-comment\"\n | \"invalid-first-character-of-tag-name\"\n | \"missing-attribute-value\"\n | \"missing-end-tag-name\"\n | \"missing-semicolon-after-character-reference\"\n | \"missing-whitespace-between-attributes\"\n | \"nested-comment\"\n | \"noncharacter-character-reference\"\n | \"noncharacter-in-input-stream\"\n | \"null-character-reference\"\n | \"surrogate-character-reference\"\n | \"surrogate-in-input-stream\"\n | \"unexpected-character-in-attribute-name\"\n | \"unexpected-character-in-unquoted-attribute-value\"\n | \"unexpected-equals-sign-before-attribute-name\"\n | \"unexpected-null-character\"\n | \"unexpected-question-mark-instead-of-tag-name\"\n | \"unexpected-solidus-in-tag\"\n | \"unknown-named-character-reference\"\n | \"end-tag-with-attributes\"\n | \"duplicate-attribute\"\n | \"end-tag-with-trailing-solidus\"\n | \"non-void-html-element-start-tag-with-trailing-solidus\"\n | \"x-invalid-end-tag\"\n | \"x-invalid-namespace\"\n | \"x-missing-interpolation-end\"\n// ---- Use RAWTEXT state for <script> elements instead ----\n// \"eof-in-script-html-comment-like-text\" |\n// ---- Use BOGUS_COMMENT state for DOCTYPEs instead ----\n// \"abrupt-doctype-public-identifier\" |\n// \"abrupt-doctype-system-identifier\" |\n// \"eof-in-doctype\" |\n// \"invalid-character-sequence-after-doctype-name\" |\n// \"missing-doctype-name\" |\n// \"missing-doctype-public-identifier\" |\n// \"missing-doctype-system-identifier\" |\n// \"missing-quote-before-doctype-public-identifier\" |\n// \"missing-quote-before-doctype-system-identifier\" |\n// \"missing-whitespace-after-doctype-public-keyword\" |\n// \"missing-whitespace-after-doctype-system-keyword\" |\n// \"missing-whitespace-before-doctype-name\" |\n// \"missing-whitespace-between-doctype-public-and-system-identifiers\" |\n// \"unexpected-character-after-doctype-system-identifier\" |\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { ScopeManager } from \"eslint-scope\"\nimport type { ParseError } from \"./errors\"\nimport type { HasLocation } from \"./locations\"\nimport type { Token } from \"./tokens\"\nimport type { TSESTree } from \"@typescript-eslint/utils\"\n\n//------------------------------------------------------------------------------\n// Common\n//------------------------------------------------------------------------------\n\n/**\n * Objects which have their parent.\n */\nexport interface HasParent {\n parent?: Node | null\n}\n\n/**\n * The union type for all nodes.\n */\nexport type Node =\n | ESLintNode\n | VNode\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\n | VGenericExpression\n | VFilterSequenceExpression\n | VFilter\n\n//------------------------------------------------------------------------------\n// Script\n//------------------------------------------------------------------------------\n\n/**\n * The union type for ESLint nodes.\n */\nexport type ESLintNode =\n | ESLintIdentifier\n | ESLintLiteral\n | ESLintProgram\n | ESLintSwitchCase\n | ESLintCatchClause\n | ESLintVariableDeclarator\n | ESLintStatement\n | ESLintExpression\n | ESLintProperty\n | ESLintAssignmentProperty\n | ESLintSuper\n | ESLintTemplateElement\n | ESLintSpreadElement\n | ESLintPattern\n | ESLintClassBody\n | ESLintMethodDefinition\n | ESLintPropertyDefinition\n | ESLintStaticBlock\n | ESLintPrivateIdentifier\n | ESLintModuleDeclaration\n | ESLintModuleSpecifier\n | ESLintImportExpression\n | ESLintLegacyRestProperty\n\n/**\n * The parsing result of ESLint custom parsers.\n */\nexport interface ESLintExtendedProgram {\n ast: ESLintProgram\n services?: {}\n visitorKeys?: { [type: string]: string[] }\n scopeManager?: ScopeManager\n}\n\nexport interface ESLintProgram extends HasLocation, HasParent {\n type: \"Program\"\n sourceType: \"script\" | \"module\"\n body: (ESLintStatement | ESLintModuleDeclaration)[]\n templateBody?: VElement & HasConcreteInfo\n tokens?: Token[]\n comments?: Token[]\n errors?: ParseError[]\n}\n\nexport type ESLintStatement =\n | ESLintExpressionStatement\n | ESLintBlockStatement\n | ESLintEmptyStatement\n | ESLintDebuggerStatement\n | ESLintWithStatement\n | ESLintReturnStatement\n | ESLintLabeledStatement\n | ESLintBreakStatement\n | ESLintContinueStatement\n | ESLintIfStatement\n | ESLintSwitchStatement\n | ESLintThrowStatement\n | ESLintTryStatement\n | ESLintWhileStatement\n | ESLintDoWhileStatement\n | ESLintForStatement\n | ESLintForInStatement\n | ESLintForOfStatement\n | ESLintDeclaration\n\nexport interface ESLintEmptyStatement extends HasLocation, HasParent {\n type: \"EmptyStatement\"\n}\n\nexport interface ESLintBlockStatement extends HasLocation, HasParent {\n type: \"BlockStatement\"\n body: ESLintStatement[]\n}\n\nexport interface ESLintExpressionStatement extends HasLocation, HasParent {\n type: \"ExpressionStatement\"\n expression: ESLintExpression\n}\n\nexport interface ESLintIfStatement extends HasLocation, HasParent {\n type: \"IfStatement\"\n test: ESLintExpression\n consequent: ESLintStatement\n alternate: ESLintStatement | null\n}\n\nexport interface ESLintSwitchStatement extends HasLocation, HasParent {\n type: \"SwitchStatement\"\n discriminant: ESLintExpression\n cases: ESLintSwitchCase[]\n}\n\nexport interface ESLintSwitchCase extends HasLocation, HasParent {\n type: \"SwitchCase\"\n test: ESLintExpression | null\n consequent: ESLintStatement[]\n}\n\nexport interface ESLintWhileStatement extends HasLocation, HasParent {\n type: \"WhileStatement\"\n test: ESLintExpression\n body: ESLintStatement\n}\n\nexport interface ESLintDoWhileStatement extends HasLocation, HasParent {\n type: \"DoWhileStatement\"\n body: ESLintStatement\n test: ESLintExpression\n}\n\nexport interface ESLintForStatement extends HasLocation, HasParent {\n type: \"ForStatement\"\n init: ESLintVariableDeclaration | ESLintExpression | null\n test: ESLintExpression | null\n update: ESLintExpression | null\n body: ESLintStatement\n}\n\nexport interface ESLintForInStatement extends HasLocation, HasParent {\n type: \"ForInStatement\"\n left: ESLintVariableDeclaration | ESLintPattern\n right: ESLintExpression\n body: ESLintStatement\n}\n\nexport interface ESLintForOfStatement extends HasLocation, HasParent {\n type: \"ForOfStatement\"\n left: ESLintVariableDeclaration | ESLintPattern\n right: ESLintExpression\n body: ESLintStatement\n await: boolean\n}\n\nexport interface ESLintLabeledStatement extends HasLocation, HasParent {\n type: \"LabeledStatement\"\n label: ESLintIdentifier\n body: ESLintStatement\n}\n\nexport interface ESLintBreakStatement extends HasLocation, HasParent {\n type: \"BreakStatement\"\n label: ESLintIdentifier | null\n}\n\nexport interface ESLintContinueStatement extends HasLocation, HasParent {\n type: \"ContinueStatement\"\n label: ESLintIdentifier | null\n}\n\nexport interface ESLintReturnStatement extends HasLocation, HasParent {\n type: \"ReturnStatement\"\n argument: ESLintExpression | null\n}\n\nexport interface ESLintThrowStatement extends HasLocation, HasParent {\n type: \"ThrowStatement\"\n argument: ESLintExpression\n}\n\nexport interface ESLintTryStatement extends HasLocation, HasParent {\n type: \"TryStatement\"\n block: ESLintBlockStatement\n handler: ESLintCatchClause | null\n finalizer: ESLintBlockStatement | null\n}\n\nexport interface ESLintCatchClause extends HasLocation, HasParent {\n type: \"CatchClause\"\n param: ESLintPattern | null\n body: ESLintBlockStatement\n}\n\nexport interface ESLintWithStatement extends HasLocation, HasParent {\n type: \"WithStatement\"\n object: ESLintExpression\n body: ESLintStatement\n}\n\nexport interface ESLintDebuggerStatement extends HasLocation, HasParent {\n type: \"DebuggerStatement\"\n}\n\nexport type ESLintDeclaration =\n | ESLintFunctionDeclaration\n | ESLintVariableDeclaration\n | ESLintClassDeclaration\n\nexport interface ESLintFunctionDeclaration extends HasLocation, HasParent {\n type: \"FunctionDeclaration\"\n async: boolean\n generator: boolean\n id: ESLintIdentifier | null\n params: ESLintPattern[]\n body: ESLintBlockStatement\n}\n\nexport interface ESLintVariableDeclaration extends HasLocation, HasParent {\n type: \"VariableDeclaration\"\n kind: \"var\" | \"let\" | \"const\"\n declarations: ESLintVariableDeclarator[]\n}\n\nexport interface ESLintVariableDeclarator extends HasLocation, HasParent {\n type: \"VariableDeclarator\"\n id: ESLintPattern\n init: ESLintExpression | null\n}\n\nexport interface ESLintClassDeclaration extends HasLocation, HasParent {\n type: \"ClassDeclaration\"\n id: ESLintIdentifier | null\n superClass: ESLintExpression | null\n body: ESLintClassBody\n}\n\nexport interface ESLintClassBody extends HasLocation, HasParent {\n type: \"ClassBody\"\n body: (\n | ESLintMethodDefinition\n | ESLintPropertyDefinition\n | ESLintStaticBlock\n )[]\n}\n\nexport interface ESLintMethodDefinition extends HasLocation, HasParent {\n type: \"MethodDefinition\"\n kind: \"constructor\" | \"method\" | \"get\" | \"set\"\n computed: boolean\n static: boolean\n key: ESLintExpression | ESLintPrivateIdentifier\n value: ESLintFunctionExpression\n}\nexport interface ESLintPropertyDefinition extends HasLocation, HasParent {\n type: \"PropertyDefinition\"\n computed: boolean\n static: boolean\n key: ESLintExpression | ESLintPrivateIdentifier\n value: ESLintExpression | null\n}\n\nexport interface ESLintStaticBlock\n extends HasLocation,\n HasParent,\n Omit<ESLintBlockStatement, \"type\"> {\n type: \"StaticBlock\"\n body: ESLintStatement[]\n}\n\nexport interface ESLintPrivateIdentifier extends HasLocation, HasParent {\n type: \"PrivateIdentifier\"\n name: string\n}\n\nexport type ESLintModuleDeclaration =\n | ESLintImportDeclaration\n | ESLintExportNamedDeclaration\n | ESLintExportDefaultDeclaration\n | ESLintExportAllDeclaration\n\nexport type ESLintModuleSpecifier =\n | ESLintImportSpecifier\n | ESLintImportDefaultSpecifier\n | ESLintImportNamespaceSpecifier\n | ESLintExportSpecifier\n\nexport interface ESLintImportDeclaration extends HasLocation, HasParent {\n type: \"ImportDeclaration\"\n specifiers: (\n | ESLintImportSpecifier\n | ESLintImportDefaultSpecifier\n | ESLintImportNamespaceSpecifier\n )[]\n source: ESLintLiteral\n}\n\nexport interface ESLintImportSpecifier extends HasLocation, HasParent {\n type: \"ImportSpecifier\"\n imported: ESLintIdentifier | ESLintStringLiteral\n local: ESLintIdentifier\n}\n\nexport interface ESLintImportDefaultSpecifier extends HasLocation, HasParent {\n type: \"ImportDefaultSpecifier\"\n local: ESLintIdentifier\n}\n\nexport interface ESLintImportNamespaceSpecifier extends HasLocation, HasParent {\n type: \"ImportNamespaceSpecifier\"\n local: ESLintIdentifier\n}\n\nexport interface ESLintImportExpression extends HasLocation, HasParent {\n type: \"ImportExpression\"\n source: ESLintExpression\n}\n\nexport interface ESLintExportNamedDeclaration extends HasLocation, HasParent {\n type: \"ExportNamedDeclaration\"\n declaration?: ESLintDeclaration | null\n specifiers: ESLintExportSpecifier[]\n source?: ESLintLiteral | null\n}\n\nexport interface ESLintExportSpecifier extends HasLocation, HasParent {\n type: \"ExportSpecifier\"\n local: ESLintIdentifier | ESLintStringLiteral\n exported: ESLintIdentifier | ESLintStringLiteral\n}\n\nexport interface ESLintExportDefaultDeclaration extends HasLocation, HasParent {\n type: \"ExportDefaultDeclaration\"\n declaration: ESLintDeclaration | ESLintExpression\n}\n\nexport interface ESLintExportAllDeclaration extends HasLocation, HasParent {\n type: \"ExportAllDeclaration\"\n exported: ESLintIdentifier | ESLintStringLiteral | null\n source: ESLintLiteral\n}\n\nexport type ESLintExpression =\n | ESLintThisExpression\n | ESLintArrayExpression\n | ESLintObjectExpression\n | ESLintFunctionExpression\n | ESLintArrowFunctionExpression\n | ESLintYieldExpression\n | ESLintLiteral\n | ESLintUnaryExpression\n | ESLintUpdateExpression\n | ESLintBinaryExpression\n | ESLintAssignmentExpression\n | ESLintLogicalExpression\n | ESLintMemberExpression\n | ESLintConditionalExpression\n | ESLintCallExpression\n | ESLintNewExpression\n | ESLintSequenceExpression\n | ESLintTemplateLiteral\n | ESLintTaggedTemplateExpression\n | ESLintClassExpression\n | ESLintMetaProperty\n | ESLintIdentifier\n | ESLintAwaitExpression\n | ESLintChainExpression\n\nexport interface ESLintIdentifier extends HasLocation, HasParent {\n type: \"Identifier\"\n name: string\n}\ninterface ESLintLiteralBase extends HasLocation, HasParent {\n type: \"Literal\"\n value: string | boolean | null | number | RegExp | bigint\n raw: string\n regex?: {\n pattern: string\n flags: string\n }\n bigint?: string\n}\nexport interface ESLintStringLiteral extends ESLintLiteralBase {\n value: string\n regex?: undefined\n bigint?: undefined\n}\nexport interface ESLintBooleanLiteral extends ESLintLiteralBase {\n value: boolean\n regex?: undefined\n bigint?: undefined\n}\nexport interface ESLintNullLiteral extends ESLintLiteralBase {\n value: null\n regex?: undefined\n bigint?: undefined\n}\nexport interface ESLintNumberLiteral extends ESLintLiteralBase {\n value: number\n regex?: undefined\n bigint?: undefined\n}\nexport interface ESLintRegExpLiteral extends ESLintLiteralBase {\n value: null | RegExp\n regex: {\n pattern: string\n flags: string\n }\n bigint?: undefined\n}\nexport interface ESLintBigIntLiteral extends ESLintLiteralBase {\n value: null | bigint\n regex?: undefined\n bigint: string\n}\nexport type ESLintLiteral =\n | ESLintStringLiteral\n | ESLintBooleanLiteral\n | ESLintNullLiteral\n | ESLintNumberLiteral\n | ESLintRegExpLiteral\n | ESLintBigIntLiteral\n\nexport interface ESLintThisExpression extends HasLocation, HasParent {\n type: \"ThisExpression\"\n}\n\nexport interface ESLintArrayExpression extends HasLocation, HasParent {\n type: \"ArrayExpression\"\n elements: (ESLintExpression | ESLintSpreadElement)[]\n}\n\nexport interface ESLintObjectExpression extends HasLocation, HasParent {\n type: \"ObjectExpression\"\n properties: (\n | ESLintProperty\n | ESLintSpreadElement\n | ESLintLegacySpreadProperty\n )[]\n}\n\nexport interface ESLintProperty extends HasLocation, HasParent {\n type: \"Property\"\n kind: \"init\" | \"get\" | \"set\"\n method: boolean\n shorthand: boolean\n computed: boolean\n key: ESLintExpression\n value: ESLintExpression | ESLintPattern\n}\n\nexport interface ESLintFunctionExpression extends HasLocation, HasParent {\n type: \"FunctionExpression\"\n async: boolean\n generator: boolean\n id: ESLintIdentifier | null\n params: ESLintPattern[]\n body: ESLintBlockStatement\n}\n\nexport interface ESLintArrowFunctionExpression extends HasLocation, HasParent {\n type: \"ArrowFunctionExpression\"\n async: boolean\n generator: boolean\n id: ESLintIdentifier | null\n params: ESLintPattern[]\n body: ESLintBlockStatement | ESLintExpression\n}\n\nexport interface ESLintSequenceExpression extends HasLocation, HasParent {\n type: \"SequenceExpression\"\n expressions: ESLintExpression[]\n}\n\nexport interface ESLintUnaryExpression extends HasLocation, HasParent {\n type: \"UnaryExpression\"\n operator: \"-\" | \"+\" | \"!\" | \"~\" | \"typeof\" | \"void\" | \"delete\"\n prefix: boolean\n argument: ESLintExpression\n}\n\nexport interface ESLintBinaryExpression extends HasLocation, HasParent {\n type: \"BinaryExpression\"\n operator:\n | \"==\"\n | \"!=\"\n | \"===\"\n | \"!==\"\n | \"<\"\n | \"<=\"\n | \">\"\n | \">=\"\n | \"<<\"\n | \">>\"\n | \">>>\"\n | \"+\"\n | \"-\"\n | \"*\"\n | \"/\"\n | \"%\"\n | \"**\"\n | \"|\"\n | \"^\"\n | \"&\"\n | \"in\"\n | \"instanceof\"\n left: ESLintExpression | ESLintPrivateIdentifier\n right: ESLintExpression\n}\n\nexport interface ESLintAssignmentExpression extends HasLocation, HasParent {\n type: \"AssignmentExpression\"\n operator:\n | \"=\"\n | \"+=\"\n | \"-=\"\n | \"*=\"\n | \"/=\"\n | \"%=\"\n | \"**=\"\n | \"<<=\"\n | \">>=\"\n | \">>>=\"\n | \"|=\"\n | \"^=\"\n | \"&=\"\n | \"||=\"\n | \"&&=\"\n | \"??=\"\n left: ESLintPattern\n right: ESLintExpression\n}\n\nexport interface ESLintUpdateExpression extends HasLocation, HasParent {\n type: \"UpdateExpression\"\n operator: \"++\" | \"--\"\n argument: ESLintExpression\n prefix: boolean\n}\n\nexport interface ESLintLogicalExpression extends HasLocation, HasParent {\n type: \"LogicalExpression\"\n operator: \"||\" | \"&&\" | \"??\"\n left: ESLintExpression\n right: ESLintExpression\n}\n\nexport interface ESLintConditionalExpression extends HasLocation, HasParent {\n type: \"ConditionalExpression\"\n test: ESLintExpression\n alternate: ESLintExpression\n consequent: ESLintExpression\n}\n\nexport interface ESLintCallExpression extends HasLocation, HasParent {\n type: \"CallExpression\"\n optional: boolean\n callee: ESLintExpression | ESLintSuper\n arguments: (ESLintExpression | ESLintSpreadElement)[]\n}\n\nexport interface ESLintSuper extends HasLocation, HasParent {\n type: \"Super\"\n}\n\nexport interface ESLintNewExpression extends HasLocation, HasParent {\n type: \"NewExpression\"\n callee: ESLintExpression\n arguments: (ESLintExpression | ESLintSpreadElement)[]\n}\n\nexport interface ESLintMemberExpression extends HasLocation, HasParent {\n type: \"MemberExpression\"\n optional: boolean\n computed: boolean\n object: ESLintExpression | ESLintSuper\n property: ESLintExpression | ESLintPrivateIdentifier\n}\n\nexport interface ESLintYieldExpression extends HasLocation, HasParent {\n type: \"YieldExpression\"\n delegate: boolean\n argument: ESLintExpression | null\n}\n\nexport interface ESLintAwaitExpression extends HasLocation, HasParent {\n type: \"AwaitExpression\"\n argument: ESLintExpression\n}\n\nexport interface ESLintTemplateLiteral extends HasLocation, HasParent {\n type: \"TemplateLiteral\"\n quasis: ESLintTemplateElement[]\n expressions: ESLintExpression[]\n}\n\nexport interface ESLintTaggedTemplateExpression extends HasLocation, HasParent {\n type: \"TaggedTemplateExpression\"\n tag: ESLintExpression\n quasi: ESLintTemplateLiteral\n}\n\nexport interface ESLintTemplateElement extends HasLocation, HasParent {\n type: \"TemplateElement\"\n tail: boolean\n value: {\n cooked: string | null\n raw: string\n }\n}\n\nexport interface ESLintClassExpression extends HasLocation, HasParent {\n type: \"ClassExpression\"\n id: ESLintIdentifier | null\n superClass: ESLintExpression | null\n body: ESLintClassBody\n}\n\nexport interface ESLintMetaProperty extends HasLocation, HasParent {\n type: \"MetaProperty\"\n meta: ESLintIdentifier\n property: ESLintIdentifier\n}\n\nexport type ESLintPattern =\n | ESLintIdentifier\n | ESLintObjectPattern\n | ESLintArrayPattern\n | ESLintRestElement\n | ESLintAssignmentPattern\n | ESLintMemberExpression\n | ESLintLegacyRestProperty\n\nexport interface ESLintObjectPattern extends HasLocation, HasParent {\n type: \"ObjectPattern\"\n properties: (\n | ESLintAssignmentProperty\n | ESLintRestElement\n | ESLintLegacyRestProperty\n )[]\n}\n\nexport interface ESLintAssignmentProperty extends ESLintProperty {\n value: ESLintPattern\n kind: \"init\"\n method: false\n}\n\nexport interface ESLintArrayPattern extends HasLocation, HasParent {\n type: \"ArrayPattern\"\n elements: ESLintPattern[]\n}\n\nexport interface ESLintRestElement extends HasLocation, HasParent {\n type: \"RestElement\"\n argument: ESLintPattern\n}\n\nexport interface ESLintSpreadElement extends HasLocation, HasParent {\n type: \"SpreadElement\"\n argument: ESLintExpression\n}\n\nexport interface ESLintAssignmentPattern extends HasLocation, HasParent {\n type: \"AssignmentPattern\"\n left: ESLintPattern\n right: ESLintExpression\n}\n\nexport type ESLintChainElement = ESLintCallExpression | ESLintMemberExpression\n\nexport interface ESLintChainExpression extends HasLocation, HasParent {\n type: \"ChainExpression\"\n expression: ESLintChainElement\n}\n\n/**\n * Legacy for babel-eslint and espree.\n */\nexport interface ESLintLegacyRestProperty extends HasLocation, HasParent {\n type: \"RestProperty\" | \"ExperimentalRestProperty\"\n argument: ESLintPattern\n}\n\n/**\n * Legacy for babel-eslint and espree.\n */\nexport interface ESLintLegacySpreadProperty extends HasLocation, HasParent {\n type: \"SpreadProperty\" | \"ExperimentalSpreadProperty\"\n argument: ESLintExpression\n}\n\n//------------------------------------------------------------------------------\n// Template\n//------------------------------------------------------------------------------\n\n/**\n * Constants of namespaces.\n * @see https://infra.spec.whatwg.org/#namespaces\n */\nexport const NS = Object.freeze({\n HTML: \"http://www.w3.org/1999/xhtml\" as \"http://www.w3.org/1999/xhtml\",\n MathML: \"http://www.w3.org/1998/Math/MathML\" as \"http://www.w3.org/1998/Math/MathML\",\n SVG: \"http://www.w3.org/2000/svg\" as \"http://www.w3.org/2000/svg\",\n XLink: \"http://www.w3.org/1999/xlink\" as \"http://www.w3.org/1999/xlink\",\n XML: \"http://www.w3.org/XML/1998/namespace\" as \"http://www.w3.org/XML/1998/namespace\",\n XMLNS: \"http://www.w3.org/2000/xmlns/\" as \"http://www.w3.org/2000/xmlns/\",\n})\n\n/**\n * Type of namespaces.\n */\nexport type Namespace =\n | typeof NS.HTML\n | typeof NS.MathML\n | typeof NS.SVG\n | typeof NS.XLink\n | typeof NS.XML\n | typeof NS.XMLNS\n\n/**\n * Type of variable definitions.\n */\nexport interface Variable {\n id: ESLintIdentifier\n kind: \"v-for\" | \"scope\" | \"generic\"\n references: Reference[]\n}\n\n/**\n * Type of variable references.\n */\nexport interface Reference {\n id: ESLintIdentifier\n mode: \"rw\" | \"r\" | \"w\"\n variable: Variable | null\n\n // For typescript-eslint\n isValueReference?: boolean\n isTypeReference?: boolean\n}\n\n/**\n * The node of `v-for` directives.\n */\nexport interface VForExpression extends HasLocation, HasParent {\n type: \"VForExpression\"\n parent: VExpressionContainer\n left: ESLintPattern[]\n right: ESLintExpression\n}\n\n/**\n * The node of `v-on` directives.\n */\nexport interface VOnExpression extends HasLocation, HasParent {\n type: \"VOnExpression\"\n parent: VExpressionContainer\n body: ESLintStatement[]\n}\n\n/**\n * The node of `slot-scope` directives.\n */\nexport interface VSlotScopeExpression extends HasLocation, HasParent {\n type: \"VSlotScopeExpression\"\n parent: VExpressionContainer\n params: ESLintPattern[]\n}\n\n/**\n * The node of `generic` directives.\n */\nexport interface VGenericExpression extends HasLocation, HasParent {\n type: \"VGenericExpression\"\n parent: VExpressionContainer\n params: TSESTree.TSTypeParameterDeclaration[\"params\"]\n rawParams: string[]\n}\n\n/**\n * The node of a filter sequence which is separated by `|`.\n */\nexport interface VFilterSequenceExpression extends HasLocation, HasParent {\n type: \"VFilterSequenceExpression\"\n parent: VExpressionContainer\n expression: ESLintExpression\n filters: VFilter[]\n}\n\n/**\n * The node of a filter sequence which is separated by `|`.\n */\nexport interface VFilter extends HasLocation, HasParent {\n type: \"VFilter\"\n parent: VFilterSequenceExpression\n callee: ESLintIdentifier\n arguments: (ESLintExpression | ESLintSpreadElement)[]\n}\n\n/**\n * The union type of any nodes.\n */\nexport type VNode =\n | VAttribute\n | VDirective\n | VDirectiveKey\n | VDocumentFragment\n | VElement\n | VEndTag\n | VExpressionContainer\n | VIdentifier\n | VLiteral\n | VStartTag\n | VText\n\n/**\n * Text nodes.\n */\nexport interface VText extends HasLocation, HasParent {\n type: \"VText\"\n parent: VDocumentFragment | VElement\n value: string\n}\n\n/**\n * The node of JavaScript expression in text.\n * e.g. `{{ name }}`\n */\nexport interface VExpressionContainer extends HasLocation, HasParent {\n type: \"VExpressionContainer\"\n parent: VDocumentFragment | VElement | VDirective | VDirectiveKey\n expression:\n | ESLintExpression\n | VFilterSequenceExpression\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\n | VGenericExpression\n | null\n references: Reference[]\n}\n\n/**\n * Attribute name nodes.\n */\nexport interface VIdentifier extends HasLocation, HasParent {\n type: \"VIdentifier\"\n parent: VAttribute | VDirectiveKey\n name: string\n rawName: string\n}\n\n/**\n * Attribute name nodes.\n */\nexport interface VDirectiveKey extends HasLocation, HasParent {\n type: \"VDirectiveKey\"\n parent: VDirective\n name: VIdentifier\n argument: VExpressionContainer | VIdentifier | null\n modifiers: VIdentifier[]\n}\n\n/**\n * Attribute value nodes.\n */\nexport interface VLiteral extends HasLocation, HasParent {\n type: \"VLiteral\"\n parent: VAttribute\n value: string\n}\n\n/**\n * Static attribute nodes.\n */\nexport interface VAttribute extends HasLocation, HasParent {\n type: \"VAttribute\"\n parent: VStartTag\n directive: false\n key: VIdentifier\n value: VLiteral | null\n}\n\n/**\n * Directive nodes.\n */\nexport interface VDirective extends HasLocation, HasParent {\n type: \"VAttribute\"\n parent: VStartTag\n directive: true\n key: VDirectiveKey\n value: VExpressionContainer | null\n}\n\n/**\n * Start tag nodes.\n */\nexport interface VStartTag extends HasLocation, HasParent {\n type: \"VStartTag\"\n parent: VElement\n selfClosing: boolean\n attributes: (VAttribute | VDirective)[]\n}\n\n/**\n * End tag nodes.\n */\nexport interface VEndTag extends HasLocation, HasParent {\n type: \"VEndTag\"\n parent: VElement\n}\n\n/**\n * The property which has concrete information.\n */\nexport interface HasConcreteInfo {\n tokens: Token[]\n comments: Token[]\n errors: ParseError[]\n}\n\n/**\n * Element nodes.\n */\nexport interface VElement extends HasLocation, HasParent {\n type: \"VElement\"\n parent: VDocumentFragment | VElement\n namespace: Namespace\n name: string\n rawName: string\n startTag: VStartTag\n children: (VElement | VText | VExpressionContainer)[]\n endTag: VEndTag | null\n variables: Variable[]\n}\n\n/**\n * Root nodes.\n */\nexport interface VDocumentFragment\n extends HasLocation,\n HasParent,\n HasConcreteInfo {\n type: \"VDocumentFragment\"\n parent: null\n children: (VElement | VText | VExpressionContainer | VStyleElement)[]\n}\n\n/**\n * Style element nodes.\n */\nexport interface VStyleElement extends VElement {\n type: \"VElement\"\n name: \"style\"\n style: true\n children: (VText | VExpressionContainer)[]\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { VisitorKeys } from \"eslint-visitor-keys\"\nimport * as Evk from \"eslint-visitor-keys\"\nimport type { Node } from \"./nodes\"\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nexport const KEYS = Evk.unionWith({\n VAttribute: [\"key\", \"value\"],\n VDirectiveKey: [\"name\", \"argument\", \"modifiers\"],\n VDocumentFragment: [\"children\"],\n VElement: [\"startTag\", \"children\", \"endTag\"],\n VEndTag: [],\n VExpressionContainer: [\"expression\"],\n VFilter: [\"callee\", \"arguments\"],\n VFilterSequenceExpression: [\"expression\", \"filters\"],\n VForExpression: [\"left\", \"right\"],\n VIdentifier: [],\n VLiteral: [],\n VOnExpression: [\"body\"],\n VSlotScopeExpression: [\"params\"],\n VStartTag: [\"attributes\"],\n VText: [],\n VGenericExpression: [\"params\"],\n})\n\n/**\n * Check that the given key should be traversed or not.\n * @this {Traversable}\n * @param key The key to check.\n * @returns `true` if the key should be traversed.\n */\nfunction fallbackKeysFilter(this: any, key: string): boolean {\n let value = null\n return (\n key !== \"comments\" &&\n key !== \"leadingComments\" &&\n key !== \"loc\" &&\n key !== \"parent\" &&\n key !== \"range\" &&\n key !== \"tokens\" &&\n key !== \"trailingComments\" &&\n (value = this[key]) !== null &&\n typeof value === \"object\" &&\n (typeof value.type === \"string\" || Array.isArray(value))\n )\n}\n\n/**\n * Get the keys of the given node to traverse it.\n * @param node The node to get.\n * @returns The keys to traverse.\n */\nfunction getFallbackKeys(node: Node): string[] {\n return Object.keys(node).filter(fallbackKeysFilter, node)\n}\n\n/**\n * Check wheather a given value is a node.\n * @param x The value to check.\n * @returns `true` if the value is a node.\n */\nfunction isNode(x: any): x is Node {\n return x !== null && typeof x === \"object\" && typeof x.type === \"string\"\n}\n\n/**\n * Traverse the given node.\n * @param node The node to traverse.\n * @param parent The parent node.\n * @param visitor The node visitor.\n */\nfunction traverse(node: Node, parent: Node | null, visitor: Visitor): void {\n let i = 0\n let j = 0\n\n visitor.enterNode(node, parent)\n\n const keys =\n (visitor.visitorKeys ?? KEYS)[node.type] ?? getFallbackKeys(node)\n for (i = 0; i < keys.length; ++i) {\n const child = (node as any)[keys[i]]\n\n if (Array.isArray(child)) {\n for (j = 0; j < child.length; ++j) {\n if (isNode(child[j])) {\n traverse(child[j], node, visitor)\n }\n }\n } else if (isNode(child)) {\n traverse(child, node, visitor)\n }\n }\n\n visitor.leaveNode(node, parent)\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\nexport interface Visitor {\n visitorKeys?: VisitorKeys\n enterNode(node: Node, parent: Node | null): void\n leaveNode(node: Node, parent: Node | null): void\n}\n\n/**\n * Traverse the given AST tree.\n * @param node Root node to traverse.\n * @param visitor Visitor.\n */\nexport function traverseNodes(node: Node, visitor: Visitor): void {\n traverse(node, null, visitor)\n}\n\nexport { getFallbackKeys }\n","/**\n * @see https://github.com/vuejs/vue-next/blob/48de8a42b7fed7a03f7f1ff5d53d6a704252cafe/packages/shared/src/index.ts#L109\n */\nexport function camelize(str: string) {\n return str.replace(/-(\\w)/gu, (_, c) => (c ? c.toUpperCase() : \"\"))\n}\n\n/**\n * A binary search implementation that finds the index at which `predicate`\n * stops returning `true` and starts returning `false` (consistently) when run\n * on the items of the array. It **assumes** that mapping the array via the\n * predicate results in the shape `[...true[], ...false[]]`. *For any other case\n * the result is unpredictable*.\n *\n * This is the base implementation of the `sortedIndex` functions which define\n * the predicate for the user, for common use-cases.\n *\n * It is similar to `findIndex`, but runs at O(logN), whereas the latter is\n * general purpose function which runs on any array and predicate, but runs at\n * O(N) time.\n *\n * MIT License | Copyright (c) 2018 remeda | https://remedajs.com/\n *\n * The implementation is copied from remeda package:\n * https://github.com/remeda/remeda/blob/df5fe74841c07bc356bbaa2c89bc7ba0cafafd0a/packages/remeda/src/internal/binarySearchCutoffIndex.ts#L15\n */\nfunction binarySearchCutoffIndex<T>(\n array: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): number {\n let lowIndex = 0\n let highIndex = array.length\n\n while (lowIndex < highIndex) {\n const pivotIndex = (lowIndex + highIndex) >>> 1\n const pivot = array[pivotIndex]\n\n if (predicate(pivot, pivotIndex, array)) {\n lowIndex = pivotIndex + 1\n } else {\n highIndex = pivotIndex\n }\n }\n\n return highIndex\n}\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order; so that `splice(sortedIndex, 0, item)` would result in\n * maintaining the array's sort-ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *last*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * @param item - The item to insert.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * R.sortedLastIndex(item)(data)\n * @example\n * R.pipe(['a','a','b','c','c'], sortedLastIndex('c')) // => 5\n *\n * MIT License | Copyright (c) 2018 remeda | https://remedajs.com/\n *\n * The implementation is copied from remeda package:\n * https://github.com/remeda/remeda/blob/df5fe74841c07bc356bbaa2c89bc7ba0cafafd0a/packages/remeda/src/sortedLastIndex.ts#L51\n */\nexport function sortedLastIndex<T>(array: readonly T[], item: T): number {\n return binarySearchCutoffIndex(array, (pivot) => pivot <= item)\n}\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order using a value function; so that\n * `splice(sortedIndex, 0, item)` would result in maintaining the arrays sort-\n * ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *first*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `sortedIndex` - like this function, but doesn't take a callbackfn.\n * * `sortedLastIndexBy` - like this function, but finds the last suitable index.\n * * `sortedLastIndex` - like `sortedIndex`, but finds the last suitable index.\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param data - The (ascending) sorted array.\n * @param item - The item to insert.\n * @param valueFunction - All comparisons would be performed on the result of\n * calling this function on each compared item. Preferably this function should\n * return a `number` or `string`. This function should be the same as the one\n * provided to sortBy to sort the array. The function is called exactly once on\n * each items that is compared against in the array, and once at the beginning\n * on `item`. When called on `item` the `index` argument is `undefined`.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * R.sortedIndexBy(data, item, valueFunction)\n * @example\n * R.sortedIndexBy([{age:20},{age:22}],{age:21},prop('age')) // => 1\n *\n * MIT License | Copyright (c) 2018 remeda | https://remedajs.com/\n *\n * The implementation is copied from remeda package:\n * https://github.com/remeda/remeda/blob/df5fe74841c07bc356bbaa2c89bc7ba0cafafd0a/packages/remeda/src/sortedIndexBy.ts#L37\n */\nexport function sortedIndexBy<T>(\n array: readonly T[],\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => number,\n): number {\n const value = valueFunction(item, undefined, array)\n\n return binarySearchCutoffIndex(\n array,\n (pivot, index) => valueFunction(pivot, index, array) < value,\n )\n}\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order using a value function; so that\n * `splice(sortedIndex, 0, item)` would result in maintaining the arrays sort-\n * ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *last*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `sortedLastIndex` - a simplified version of this function, without a callbackfn.\n * * `sortedIndexBy` - like this function, but returns the first suitable index.\n * * `sortedIndex` - like `sortedLastIndex` but without a callbackfn.\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param data - The (ascending) sorted array.\n * @param item - The item to insert.\n * @param valueFunction - All comparisons would be performed on the result of\n * calling this function on each compared item. Preferably this function should\n * return a `number` or `string`. This function should be the same as the one\n * provided to sortBy to sort the array. The function is called exactly once on\n * each items that is compared against in the array, and once at the beginning\n * on `item`. When called on `item` the `index` argument is `undefined`.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * R.sortedLastIndexBy(data, item, valueFunction)\n * @example\n * R.sortedLastIndexBy([{age:20},{age:22}],{age:21},prop('age')) // => 1\n *\n * MIT License | Copyright (c) 2018 remeda | https://remedajs.com/\n *\n * The implementation is copied from remeda package:\n * https://github.com/remeda/remeda/blob/df5fe74841c07bc356bbaa2c89bc7ba0cafafd0a/packages/remeda/src/sortedLastIndexBy.ts#L37\n */\nexport function sortedLastIndexBy<T>(\n array: readonly T[],\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => number,\n): number {\n const value = valueFunction(item, undefined, array)\n\n return binarySearchCutoffIndex(\n array,\n (pivot, index) => valueFunction(pivot, index, array) <= value,\n )\n}\n\n/**\n * Creates a duplicate-free version of an array.\n *\n * This function takes an array and returns a new array containing only the unique values\n * from the original array, preserving the order of first occurrence.\n *\n * @template T - The type of elements in the array.\n * @param {T[]} arr - The array to process.\n * @returns {T[]} A new array with only unique values from the original array.\n *\n * @example\n * const array = [1, 2, 2, 3, 4, 4, 5];\n * const result = uniq(array);\n * // result will be [1, 2, 3, 4, 5]\n *\n * MIT © Viva Republica, Inc. | https://es-toolkit.dev/\n *\n * The implementation is copied from es-toolkit package:\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/array/uniq.ts#L16\n */\nexport function uniq<T>(arr: readonly T[]): T[] {\n return Array.from(new Set(arr))\n}\n\n/**\n * Returns the intersection of multiple arrays.\n *\n * This function takes multiple arrays and returns a new array containing the elements that are\n * present in all provided arrays. It effectively filters out any elements that are not found\n * in every array.\n *\n * @template T - The type of elements in the arrays.\n * @param {...(ArrayLike<T> | null | undefined)} arrays - The arrays to compare.\n * @returns {T[]} A new array containing the elements that are present in all arrays.\n *\n * @example\n * const array1 = [1, 2, 3, 4, 5];\n * const array2 = [3, 4, 5, 6, 7];\n * const result = intersection(array1, array2);\n * // result will be [3, 4, 5] since these elements are in both arrays.\n *\n * MIT © Viva Republica, Inc. | https://es-toolkit.dev/\n *\n * The implementation is copied from es-toolkit package:\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/compat/array/intersection.ts#L22\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/array/intersection.ts#L19\n */\nexport function intersection<T>(...arrays: (T[] | null | undefined)[]): T[] {\n if (arrays.length === 0) {\n return []\n }\n\n let result: T[] = uniq(arrays[0]!)\n\n for (let i = 1; i < arrays.length; i++) {\n const array = arrays[i]\n const secondSet = new Set(array)\n\n result = result.filter((item) => secondSet.has(item))\n }\n\n return result\n}\n\n/**\n * This function takes multiple arrays and returns a new array containing only the unique values\n * from all input arrays, preserving the order of their first occurrence.\n *\n * @template T - The type of elements in the arrays.\n * @param {Array<ArrayLike<T> | null | undefined>} arrays - The arrays to inspect.\n * @returns {T[]} Returns the new array of combined unique values.\n *\n * @example\n * // Returns [2, 1]\n * union([2], [1, 2]);\n *\n * @example\n * // Returns [2, 1, 3]\n * union([2], [1, 2], [2, 3]);\n *\n * @example\n * // Returns [1, 3, 2, [5], [4]] (does not deeply flatten nested arrays)\n * union([1, 3, 2], [1, [5]], [2, [4]]);\n *\n * @example\n * // Returns [0, 2, 1] (ignores non-array values like 3 and { '0': 1 })\n * union([0], 3, { '0': 1 }, null, [2, 1]);\n * @example\n * // Returns [0, 'a', 2, 1] (treats array-like object { 0: 'a', length: 1 } as a valid array)\n * union([0], { 0: 'a', length: 1 }, [2, 1]);\n *\n * MIT © Viva Republica, Inc. | https://es-toolkit.dev/\n *\n * The implementation is copied from es-toolkit package:\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/compat/array/union.ts#L61\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/compat/array/flattenDepth.ts#L21\n */\nexport function union<T>(...arrays: T[][]): T[] {\n const flattened = arrays.flat()\n\n return uniq(flattened)\n}\n","import { sortedLastIndex } from \"../utils/utils\"\nimport type { Location } from \"../ast/index\"\nimport type { LocationCalculator } from \"./location-calculator\"\n/**\n * A class for getting lines and columns location.\n */\nexport class LinesAndColumns {\n protected ltOffsets: number[]\n\n /**\n * Initialize.\n * @param ltOffsets The list of the offset of line terminators.\n */\n public constructor(ltOffsets: number[]) {\n this.ltOffsets = ltOffsets\n }\n\n /**\n * Calculate the location of the given index.\n * @param index The index to calculate their location.\n * @returns The location of the index.\n */\n public getLocFromIndex(index: number): Location {\n const line = sortedLastIndex(this.ltOffsets, index) + 1\n const column = index - (line === 1 ? 0 : this.ltOffsets[line - 2])\n return { line, column }\n }\n\n public createOffsetLocationCalculator(offset: number): LocationCalculator {\n return {\n getFixOffset() {\n return offset\n },\n getLocFromIndex: this.getLocFromIndex.bind(this),\n }\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport { sortedLastIndex } from \"../utils/utils\"\nimport type { Location } from \"../ast/index\"\nimport { LinesAndColumns } from \"./lines-and-columns\"\n\n/**\n * Location calculators.\n */\nexport interface LocationCalculator {\n /**\n * Gets the fix location offset of the given offset with using the base offset of this calculator.\n * @param offset The offset to modify.\n */\n getFixOffset(offset: number, kind: \"start\" | \"end\"): number\n\n /**\n * Calculate the location of the given index.\n * @param index The index to calculate their location.\n * @returns The location of the index.\n */\n getLocFromIndex(index: number): Location\n}\n\n/**\n * Location calculators.\n *\n * HTML tokenizers remove several characters to handle HTML entities and line terminators.\n * Tokens have the processed text as their value, but tokens have offsets and locations in the original text.\n * This calculator calculates the original locations from the processed texts.\n *\n * This calculator will be used for:\n *\n * - Adjusts the locations of script ASTs.\n * - Creates expression containers in postprocess.\n */\nexport class LocationCalculatorForHtml\n extends LinesAndColumns\n implements LocationCalculator\n{\n private gapOffsets: number[]\n private baseOffset: number\n private baseIndexOfGap: number\n private shiftOffset: number\n\n /**\n * Initialize this calculator.\n * @param gapOffsets The list of the offset of removed characters in tokenization phase.\n * @param ltOffsets The list of the offset of line terminators.\n * @param baseOffset The base offset to calculate locations.\n * @param shiftOffset The shift offset to calculate locations.\n */\n public constructor(\n gapOffsets: number[],\n ltOffsets: number[],\n baseOffset?: number,\n shiftOffset = 0,\n ) {\n super(ltOffsets)\n this.gapOffsets = gapOffsets\n this.ltOffsets = ltOffsets\n this.baseOffset = baseOffset ?? 0\n this.baseIndexOfGap =\n this.baseOffset === 0\n ? 0\n : sortedLastIndex(gapOffsets, this.baseOffset)\n this.shiftOffset = shiftOffset\n }\n\n /**\n * Get sub calculator which have the given base offset.\n * @param offset The base offset of new sub calculator.\n * @returns Sub calculator.\n */\n public getSubCalculatorAfter(offset: number): LocationCalculatorForHtml {\n return new LocationCalculatorForHtml(\n this.gapOffsets,\n this.ltOffsets,\n this.baseOffset + offset,\n this.shiftOffset,\n )\n }\n\n /**\n * Get sub calculator that shifts the given offset.\n * @param offset The shift of new sub calculator.\n * @returns Sub calculator.\n */\n public getSubCalculatorShift(offset: number): LocationCalculatorForHtml {\n return new LocationCalculatorForHtml(\n this.gapOffsets,\n this.ltOffsets,\n this.baseOffset,\n this.shiftOffset + offset,\n )\n }\n\n /**\n * Calculate gap at the given index.\n * @param index The index to calculate gap.\n */\n private _getGap(index: number): number {\n const offsets = this.gapOffsets\n let g0 = sortedLastIndex(offsets, index + this.baseOffset)\n let pos = index + this.baseOffset + g0 - this.baseIndexOfGap\n\n while (g0 < offsets.length && offsets[g0] <= pos) {\n g0 += 1\n pos += 1\n }\n\n return g0 - this.baseIndexOfGap\n }\n\n /**\n * Calculate the location of the given index.\n * @param index The index to calculate their location.\n * @returns The location of the index.\n */\n public getLocation(index: number): Location {\n return this.getLocFromIndex(this.getOffsetWithGap(index))\n }\n\n /**\n * Calculate the offset of the given index.\n * @param index The index to calculate their location.\n * @returns The offset of the index.\n */\n public getOffsetWithGap(index: number): number {\n return index + this.getFixOffset(index)\n }\n\n /**\n * Gets the fix location offset of the given offset with using the base offset of this calculator.\n * @param offset The offset to modify.\n */\n public getFixOffset(offset: number): number {\n const shiftOffset = this.shiftOffset\n const gap = this._getGap(offset + shiftOffset)\n return this.baseOffset + gap + shiftOffset\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport debugFactory from \"debug\"\nexport const debug = debugFactory(\"vue-eslint-parser\")\n","import type {\n VAttribute,\n VDirective,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VGenericExpression,\n VNode,\n} from \"../ast/index\"\n\n/**\n * Check whether the node is a `<script>` element.\n * @param node The node to check.\n * @returns `true` if the node is a `<script>` element.\n */\nexport function isScriptElement(node: VNode): node is VElement {\n return node.type === \"VElement\" && node.name === \"script\"\n}\n\n/**\n * Checks whether the given script element is `<script setup>`.\n */\nexport function isScriptSetupElement(script: VElement): boolean {\n return (\n isScriptElement(script) &&\n script.startTag.attributes.some(\n (attr) => !attr.directive && attr.key.name === \"setup\",\n )\n )\n}\n\n/**\n * Check whether the node is a `<template>` element.\n * @param node The node to check.\n * @returns `true` if the node is a `<template>` element.\n */\nexport function isTemplateElement(node: VNode): node is VElement {\n return node.type === \"VElement\" && node.name === \"template\"\n}\n\n/**\n * Check whether the node is a `<style>` element.\n * @param node The node to check.\n * @returns `true` if the node is a `<style>` element.\n */\nexport function isStyleElement(node: VNode): node is VElement {\n return node.type === \"VElement\" && node.name === \"style\"\n}\n\n/**\n * Get the belonging document of the given node.\n * @param leafNode The node to get.\n * @returns The belonging document.\n */\nexport function getOwnerDocument(leafNode: VNode): VDocumentFragment | null {\n let node: VNode | null = leafNode\n while (node != null && node.type !== \"VDocumentFragment\") {\n node = node.parent\n }\n return node\n}\n\n/**\n * Check whether the attribute node is a `lang` attribute.\n * @param attribute The attribute node to check.\n * @returns `true` if the attribute node is a `lang` attribute.\n */\nexport function isLang(\n attribute: VAttribute | VDirective,\n): attribute is VAttribute {\n return attribute.directive === false && attribute.key.name === \"lang\"\n}\n\n/**\n * Get the `lang` attribute value from a given element.\n * @param element The element to get.\n * @param defaultLang The default value of the `lang` attribute.\n * @returns The `lang` attribute value.\n */\nexport function getLang(element: VElement | undefined): string | null {\n const langAttr = element?.startTag.attributes.find(isLang)\n const lang = langAttr?.value?.value\n return lang || null\n}\n/**\n * Check whether the given script element has `lang=\"ts\"`.\n * @param element The element to check.\n * @returns The given script element has `lang=\"ts\"`.\n */\nexport function isTSLang(element: VElement | undefined): boolean {\n const lang = getLang(element)\n // See https://github.com/vuejs/core/blob/28e30c819df5e4fc301c98f7be938fa13e8be3bc/packages/compiler-sfc/src/compileScript.ts#L179\n return lang === \"ts\" || lang === \"tsx\"\n}\n\nexport type GenericDirective = VDirective & {\n value: VExpressionContainer & {\n expression: VGenericExpression\n }\n}\n\n/**\n * Find `generic` directive from given `<script>` element\n */\nexport function findGenericDirective(\n element: VElement,\n): GenericDirective | null {\n return (\n element.startTag.attributes.find(\n (attr): attr is GenericDirective =>\n attr.directive &&\n attr.value?.expression?.type === \"VGenericExpression\",\n ) || null\n )\n}\n","import type { ESLintExtendedProgram, ESLintProgram } from \"../ast/index\"\n\n/**\n * The type of basic ESLint custom parser.\n * e.g. espree\n */\nexport type BasicParserObject<R = ESLintProgram> = {\n parse(code: string, options: any): R\n parseForESLint: undefined\n}\n/**\n * The type of ESLint custom parser enhanced for ESLint.\n * e.g. @babel/eslint-parser, @typescript-eslint/parser\n */\nexport type EnhancedParserObject<R = ESLintExtendedProgram> = {\n parseForESLint(code: string, options: any): R\n parse: undefined\n}\n\n/**\n * The type of ESLint (custom) parsers.\n */\nexport type ParserObject<R1 = ESLintExtendedProgram, R2 = ESLintProgram> =\n | EnhancedParserObject<R1>\n | BasicParserObject<R2>\n\nexport function isParserObject<R1, R2>(\n value: ParserObject<R1, R2> | {} | undefined | null,\n): value is ParserObject<R1, R2> {\n return isEnhancedParserObject(value) || isBasicParserObject(value)\n}\nexport function isEnhancedParserObject<R>(\n value: EnhancedParserObject<R> | {} | undefined | null,\n): value is EnhancedParserObject<R> {\n return Boolean(value && typeof (value as any).parseForESLint === \"function\")\n}\nexport function isBasicParserObject<R>(\n value: BasicParserObject<R> | {} | undefined | null,\n): value is BasicParserObject<R> {\n return Boolean(value && typeof (value as any).parse === \"function\")\n}\n","import * as path from \"path\"\nimport type { VDocumentFragment } from \"../ast/index\"\nimport type { CustomTemplateTokenizerConstructor } from \"../html/custom-tokenizer\"\nimport { getLang, isScriptElement, isScriptSetupElement } from \"./ast-utils\"\nimport type { ParserObject } from \"./parser-object\"\nimport { isParserObject } from \"./parser-object\"\n\nexport interface ParserOptions {\n // vue-eslint-parser options\n parser?:\n | boolean\n | string\n | ParserObject\n | Record<string, string | ParserObject | undefined>\n vueFeatures?: {\n interpolationAsNonHTML?: boolean // default true\n filter?: boolean // default true\n styleCSSVariableInjection?: boolean // default true\n customMacros?: string[]\n }\n\n // espree options\n ecmaVersion?: number | \"latest\"\n sourceType?: \"script\" | \"module\"\n ecmaFeatures?: { [key: string]: any }\n\n // @typescript-eslint/parser options\n jsxPragma?: string\n jsxFragmentName?: string | null\n lib?: string[]\n\n project?: string | string[]\n projectService?: boolean | ProjectServiceOptions\n projectFolderIgnoreList?: string[]\n tsconfigRootDir?: string\n extraFileExtensions?: string[]\n warnOnUnsupportedTypeScriptVersion?: boolean\n\n // set by eslint\n filePath?: string\n // enables by eslint\n comment?: boolean\n loc?: boolean\n range?: boolean\n tokens?: boolean\n\n // From ESLint\n eslintScopeManager?: boolean\n\n // others\n // [key: string]: any\n\n templateTokenizer?: Record<\n string,\n string | CustomTemplateTokenizerConstructor | undefined\n >\n}\n\ninterface ProjectServiceOptions {\n allowDefaultProject?: string[]\n defaultProject?: string\n loadTypeScriptPlugins?: boolean\n maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING?: number\n}\n\nexport function isSFCFile(parserOptions: ParserOptions) {\n if (parserOptions.filePath === \"<input>\") {\n return true\n }\n return path.extname(parserOptions.filePath || \"unknown.vue\") === \".vue\"\n}\n\n/**\n * Gets the script parser name from the given parser lang.\n */\nexport function getScriptParser(\n parser:\n | boolean\n | string\n | ParserObject\n | Record<string, string | ParserObject | undefined>\n | undefined,\n getParserLang: () => string | null | Iterable<string | null>,\n): string | ParserObject | undefined {\n if (isParserObject(parser)) {\n return parser\n }\n if (parser && typeof parser === \"object\") {\n const parserLang = getParserLang()\n const parserLangs =\n parserLang == null\n ? []\n : typeof parserLang === \"string\"\n ? [parserLang]\n : parserLang\n for (const lang of parserLangs) {\n const parserForLang = lang && parser[lang]\n if (\n typeof parserForLang === \"string\" ||\n isParserObject(parserForLang)\n ) {\n return parserForLang\n }\n }\n return parser.js\n }\n return typeof parser === \"string\" ? parser : undefined\n}\n\nexport function getParserLangFromSFC(doc: VDocumentFragment): string | null {\n if (doc) {\n const scripts = doc.children.filter(isScriptElement)\n const script =\n (scripts.length === 2 && scripts.find(isScriptSetupElement)) ||\n scripts[0]\n if (script) {\n return getLang(script)\n }\n }\n return null\n}\n","import * as escope from \"eslint-scope\"\nimport { lte } from \"semver\"\nimport path from \"path\"\nimport { createRequire } from \"module\"\n\ntype ESLintScope = typeof escope & {\n version: string\n}\nlet escopeCache: ESLintScope | null = null\n\n/**\n * Load the newest `eslint-scope` from the loaded ESLint or dependency.\n */\nexport function getEslintScope(): ESLintScope {\n return escopeCache ?? (escopeCache = getNewest())\n}\n\n/**\n * Load the newest `eslint-scope` from the dependency.\n */\nfunction getNewest(): ESLintScope {\n let newest = escope\n const userEscope = getEslintScopeFromUser()\n if (userEscope.version != null && lte(newest.version, userEscope.version)) {\n newest = userEscope\n }\n return newest\n}\n\n/**\n * Load `eslint-scope` from the user dir.\n */\nfunction getEslintScopeFromUser(): ESLintScope {\n try {\n const cwd = process.cwd()\n const relativeTo = path.join(cwd, \"__placeholder__.js\")\n return createRequire(relativeTo)(\"eslint-scope\")\n } catch {\n return escope\n }\n}\n","import type { ParserOptions } from \"../common/parser-options\"\n// @ts-expect-error -- ignore\nimport * as dependencyEspree from \"espree\"\nimport { lte } from \"semver\"\nimport path from \"path\"\nimport type { BasicParserObject } from \"./parser-object\"\nimport { createRequire } from \"module\"\n\ntype Espree = BasicParserObject & {\n latestEcmaVersion: number\n version: string\n}\nlet espreeCache: Espree | null = null\n\n/**\n * Gets the espree that the given ecmaVersion can parse.\n */\nexport function getEspree(): Espree {\n return espreeCache ?? (espreeCache = getNewestEspree())\n}\n\nexport function getEcmaVersionIfUseEspree(\n parserOptions: ParserOptions,\n): number | undefined {\n if (parserOptions.parser != null && parserOptions.parser !== \"espree\") {\n return undefined\n }\n\n if (\n parserOptions.ecmaVersion === \"latest\" ||\n parserOptions.ecmaVersion == null\n ) {\n return getDefaultEcmaVersion()\n }\n return normalizeEcmaVersion(parserOptions.ecmaVersion)\n}\n\n/**\n * Load `espree` from the user dir.\n */\nfunction getEspreeFromUser(): Espree {\n try {\n const cwd = process.cwd()\n const relativeTo = path.join(cwd, \"__placeholder__.js\")\n return createRequire(relativeTo)(\"espree\")\n } catch {\n return dependencyEspree\n }\n}\n\n/**\n * Load the newest `espree` from the dependency.\n */\nfunction getNewestEspree(): Espree {\n let newest = dependencyEspree\n const userEspree = getEspreeFromUser()\n if (userEspree.version != null && lte(newest.version, userEspree.version)) {\n newest = userEspree\n }\n return newest\n}\n\nfunction getDefaultEcmaVersion(): number {\n return getLatestEcmaVersion(getEspree())\n}\n\n/**\n * Normalize ECMAScript version\n */\nfunction normalizeEcmaVersion(version: number) {\n if (version > 5 && version < 2015) {\n return version + 2009\n }\n return version\n}\n\nfunction getLatestEcmaVersion(espree: Espree) {\n return normalizeEcmaVersion(espree.latestEcmaVersion)\n}\n","export const DEFAULT_ECMA_VERSION = \"latest\"\n\nexport const ANALYZE_SCOPE_DEFAULT_ECMA_VERSION = 2022\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type * as escopeTypes from \"eslint-scope\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport type {\n ESLintIdentifier,\n ESLintProgram,\n Reference,\n Variable,\n} from \"../ast/index\"\nimport { getFallbackKeys } from \"../ast/index\"\nimport { getEslintScope } from \"../common/eslint-scope\"\nimport { getEcmaVersionIfUseEspree } from \"../common/espree\"\nimport { ANALYZE_SCOPE_DEFAULT_ECMA_VERSION } from \"../script-setup/parser-options\"\n\ntype ParserResult = {\n ast: ESLintProgram\n scopeManager?: escopeTypes.ScopeManager\n}\n\n/**\n * Check whether the given reference is unique in the belonging array.\n * @param reference The current reference to check.\n * @param index The index of the reference.\n * @param references The belonging array of the reference.\n */\nfunction isUnique(\n reference: escopeTypes.Reference,\n index: number,\n references: escopeTypes.Reference[],\n): boolean {\n return (\n index === 0 || reference.identifier !== references[index - 1].identifier\n )\n}\n\n/**\n * Check whether a given variable has that definition.\n * @param variable The variable to check.\n * @returns `true` if the variable has that definition.\n */\nfunction hasDefinition(variable: escopeTypes.Variable): boolean {\n return variable.defs.length >= 1\n}\n\n/**\n * Transform the given reference object.\n * @param reference The source reference object.\n * @returns The transformed reference object.\n */\nfunction transformReference(reference: escopeTypes.Reference): Reference {\n const ret: Reference = {\n id: reference.identifier as ESLintIdentifier,\n mode: reference.isReadOnly()\n ? \"r\"\n : reference.isWriteOnly()\n ? \"w\"\n : /* otherwise */ \"rw\",\n variable: null,\n isValueReference: reference.isValueReference,\n isTypeReference: reference.isTypeReference,\n }\n Object.defineProperty(ret, \"variable\", { enumerable: false })\n\n return ret\n}\n\n/**\n * Transform the given variable object.\n * @param variable The source variable object.\n * @returns The transformed variable object.\n */\nfunction transformVariable(\n variable: escopeTypes.Variable,\n kind: Variable[\"kind\"],\n): Variable {\n const ret: Variable = {\n id: variable.defs[0].name as ESLintIdentifier,\n kind,\n references: [],\n }\n Object.defineProperty(ret, \"references\", { enumerable: false })\n\n return ret\n}\n\n/**\n * Get the `for` statement scope.\n * @param scope The global scope.\n * @returns The `for` statement scope.\n */\nfunction getForScope(scope: escopeTypes.Scope): escopeTypes.Scope {\n const child = scope.childScopes[0]\n return child.block === scope.block ? child.childScopes[0] : child\n}\n\nexport function analyzeScope(\n ast: ESLintProgram,\n parserOptions: ParserOptions,\n): escopeTypes.ScopeManager {\n const ecmaVersion =\n getEcmaVersionIfUseEspree(parserOptions) ??\n ANALYZE_SCOPE_DEFAULT_ECMA_VERSION\n const ecmaFeatures = parserOptions.ecmaFeatures ?? {}\n const sourceType = parserOptions.sourceType ?? \"script\"\n const result = getEslintScope().analyze(ast, {\n ignoreEval: true,\n nodejsScope: false,\n impliedStrict: ecmaFeatures.impliedStrict,\n ecmaVersion,\n sourceType,\n fallback: getFallbackKeys,\n })\n\n return result\n}\n\n/**\n * Analyze the scope of the given AST.\n * @param {ParserResult} parserResult The parser result to analyze.\n * @param parserOptions\n */\nfunction analyze(\n parserResult: ParserResult,\n parserOptions: ParserOptions,\n): escopeTypes.Scope {\n const scopeManager =\n parserResult.scopeManager ||\n analyzeScope(parserResult.ast, parserOptions)\n return scopeManager.globalScope\n}\n\n/**\n * Analyze the external references of the given AST.\n * @param {ParserResult} parserResult The parser result to analyze.\n * @returns {Reference[]} The reference objects of external references.\n */\nexport function analyzeExternalReferences(\n parserResult: ParserResult,\n parserOptions: ParserOptions,\n): Reference[] {\n const scope = analyze(parserResult, parserOptions)\n return scope.through.filter(isUnique).map(transformReference)\n}\n\n/**\n * Analyze the external references of the given AST.\n * @param {ParserResult} parserResult The parser result to analyze.\n * @returns {Reference[]} The reference objects of external references.\n */\nexport function analyzeVariablesAndExternalReferences(\n parserResult: ParserResult,\n kind: Variable[\"kind\"],\n parserOptions: ParserOptions,\n): { variables: Variable[]; references: Reference[] } {\n const scope = analyze(parserResult, parserOptions)\n return {\n variables: getForScope(scope)\n .variables.filter(hasDefinition)\n .map((v) => transformVariable(v, kind)),\n references: scope.through.filter(isUnique).map(transformReference),\n }\n}\n","import type {\n ESLintExtendedProgram,\n ESLintNode,\n HasLocation,\n LocationRange,\n Node,\n ParseError,\n} from \"../ast/index\"\nimport { traverseNodes } from \"../ast/index\"\nimport type { LocationCalculator } from \"./location-calculator\"\n\n/**\n * Do post-process of parsing an expression.\n *\n * 1. Set `node.parent`.\n * 2. Fix `node.range` and `node.loc` for HTML entities.\n *\n * @param result The parsing result to modify.\n * @param locationCalculator The location calculator to modify.\n */\nexport function fixLocations(\n result: ESLintExtendedProgram,\n locationCalculator: LocationCalculator,\n): void {\n fixNodeLocations(result.ast, result.visitorKeys, locationCalculator)\n\n for (const token of result.ast.tokens ?? []) {\n fixLocation(token, locationCalculator)\n }\n for (const comment of result.ast.comments ?? []) {\n fixLocation(comment, locationCalculator)\n }\n}\n\nexport function fixNodeLocations(\n rootNode: ESLintNode,\n visitorKeys: ESLintExtendedProgram[\"visitorKeys\"],\n locationCalculator: LocationCalculator,\n): void {\n // There are cases which the same node instance appears twice in the tree.\n // E.g. `let {a} = {}` // This `a` appears twice at `Property#key` and `Property#value`.\n const traversed = new Map<Node | number[] | LocationRange, Node>()\n\n traverseNodes(rootNode, {\n visitorKeys,\n\n enterNode(node, parent) {\n if (!traversed.has(node)) {\n traversed.set(node, node)\n node.parent = parent\n\n // `babel-eslint@8` has shared `Node#range` with multiple nodes.\n // See also: https://github.com/vuejs/eslint-plugin-vue/issues/208\n if (traversed.has(node.range)) {\n if (!traversed.has(node.loc)) {\n // However, `Node#loc` may not be shared.\n // See also: https://github.com/vuejs/vue-eslint-parser/issues/84\n node.loc.start = locationCalculator.getLocFromIndex(\n node.range[0],\n )\n node.loc.end = locationCalculator.getLocFromIndex(\n node.range[1],\n )\n traversed.set(node.loc, node)\n } else if (node.start != null || node.end != null) {\n const traversedNode = traversed.get(node.range)!\n if (traversedNode.type === node.type) {\n node.start = traversedNode.start\n node.end = traversedNode.end\n }\n }\n } else {\n fixLocation(node, locationCalculator)\n traversed.set(node.range, node)\n traversed.set(node.loc, node)\n }\n }\n },\n\n leaveNode() {\n // Do nothing.\n },\n })\n}\n\n/**\n * Modify the location information of the given node with using the base offset and gaps of this calculator.\n * @param node The node to modify their location.\n */\nexport function fixLocation<T extends HasLocation>(\n node: T,\n locationCalculator: LocationCalculator,\n): T {\n const range = node.range\n const loc = node.loc\n const d0 = locationCalculator.getFixOffset(range[0], \"start\")\n const d1 = locationCalculator.getFixOffset(range[1], \"end\")\n\n if (d0 !== 0) {\n range[0] += d0\n if (node.start != null) {\n node.start += d0\n }\n loc.start = locationCalculator.getLocFromIndex(range[0])\n }\n if (d1 !== 0) {\n range[1] += d1\n if (node.end != null) {\n node.end += d0\n }\n loc.end = locationCalculator.getLocFromIndex(range[1])\n }\n\n return node\n}\n\n/**\n * Modify the location information of the given error with using the base offset and gaps of this calculator.\n * @param error The error to modify their location.\n */\nexport function fixErrorLocation(\n error: ParseError,\n locationCalculator: LocationCalculator,\n) {\n const diff = locationCalculator.getFixOffset(error.index, \"start\")\n\n error.index += diff\n\n const loc = locationCalculator.getLocFromIndex(error.index)\n error.lineNumber = loc.line\n error.column = loc.column\n}\n","import type {\n ESLintExtendedProgram,\n ESLintProgram,\n HasLocation,\n Token,\n VElement,\n VGenericExpression,\n} from \"../ast/index\"\nimport type { TSESTree } from \"@typescript-eslint/utils\"\nimport type {\n Reference,\n Scope,\n Variable,\n ScopeManager,\n VariableDefinition,\n} from \"eslint-scope\"\nimport { findGenericDirective } from \"../common/ast-utils\"\n\nexport type GenericProcessInfo = {\n node: VGenericExpression\n defineTypes: {\n node: VGenericExpression[\"params\"][number]\n define: string\n }[]\n postprocess: (context: GenericPostprocessContext) => void\n}\nexport type GenericPostprocessContext = {\n result: ESLintExtendedProgram\n getTypeBlock?: (node: ESLintProgram) => {\n body: ESLintProgram[\"body\"]\n }\n isRemoveTarget: (nodeOrToken: HasLocation) => boolean\n getTypeDefScope: (scopeManager: ScopeManager) => Scope\n}\nexport function extractGeneric(element: VElement): GenericProcessInfo | null {\n const genericAttr = findGenericDirective(element)\n if (!genericAttr) {\n return null\n }\n const genericNode = genericAttr.value.expression\n const defineTypes = genericNode.params.map((t, i) => ({\n node: t,\n define: `type ${t.name.name} = ${getConstraint(\n t,\n genericNode.rawParams[i],\n )}`,\n }))\n\n return {\n node: genericNode,\n defineTypes,\n postprocess({ result, getTypeBlock, isRemoveTarget, getTypeDefScope }) {\n const node = getTypeBlock?.(result.ast) ?? result.ast\n removeTypeDeclarations(node, isRemoveTarget)\n if (result.ast.tokens) {\n removeTypeDeclarationTokens(result.ast.tokens, isRemoveTarget)\n }\n if (result.ast.comments) {\n removeTypeDeclarationTokens(result.ast.comments, isRemoveTarget)\n }\n if (result.scopeManager) {\n const typeDefScope = getTypeDefScope(result.scopeManager)\n restoreScope(result.scopeManager, typeDefScope, isRemoveTarget)\n }\n },\n }\n\n function removeTypeDeclarations(\n node: {\n body: ESLintProgram[\"body\"]\n },\n isRemoveTarget: (nodeOrToken: HasLocation) => boolean,\n ) {\n for (let index = node.body.length - 1; index >= 0; index--) {\n if (isRemoveTarget(node.body[index])) {\n node.body.splice(index, 1)\n }\n }\n }\n\n function removeTypeDeclarationTokens(\n tokens: Token[],\n isRemoveTarget: (nodeOrToken: HasLocation) => boolean,\n ) {\n for (let index = tokens.length - 1; index >= 0; index--) {\n if (isRemoveTarget(tokens[index])) {\n tokens.splice(index, 1)\n }\n }\n }\n\n function restoreScope(\n scopeManager: ScopeManager,\n typeDefScope: Scope,\n isRemoveTarget: (nodeOrToken: HasLocation) => boolean,\n ) {\n // eslint-disable-next-line unicorn/no-useless-spread -- The original array is mutated\n for (const variable of [...typeDefScope.variables]) {\n let def = variable.defs.find((d) =>\n isRemoveTarget(d.name as HasLocation),\n )\n while (def) {\n removeVariableDef(variable, def, typeDefScope)\n def = variable.defs.find((d) =>\n isRemoveTarget(d.name as HasLocation),\n )\n }\n }\n // eslint-disable-next-line unicorn/no-useless-spread -- The original array is mutated\n for (const reference of [...typeDefScope.references]) {\n if (isRemoveTarget(reference.identifier as HasLocation)) {\n removeReference(reference, typeDefScope)\n }\n }\n\n // eslint-disable-next-line unicorn/no-useless-spread -- The original array is mutated\n for (const scope of [...scopeManager.scopes]) {\n if (isRemoveTarget(scope.block as HasLocation)) {\n removeScope(scopeManager, scope)\n }\n }\n }\n}\n\nfunction getConstraint(node: TSESTree.TSTypeParameter, rawParam: string) {\n if (!node.constraint) {\n return \"unknown\"\n }\n let index = rawParam.indexOf(node.name.name) + node.name.name.length\n let startIndex: number | null = null\n while (index < rawParam.length) {\n if (startIndex == null) {\n if (rawParam.startsWith(\"extends\", index)) {\n startIndex = index = index + 7\n continue\n }\n } else if (rawParam[index] === \"=\") {\n if (rawParam[index + 1] === \">\") {\n // Arrow function type\n index += 2\n continue\n }\n return rawParam.slice(startIndex, index)\n }\n if (rawParam.startsWith(\"//\", index)) {\n // Skip line comment\n const lfIndex = rawParam.indexOf(\"\\n\", index)\n if (lfIndex >= 0) {\n index = lfIndex + 1\n continue\n }\n return \"unknown\"\n }\n if (rawParam.startsWith(\"/*\", index)) {\n // Skip block comment\n const endIndex = rawParam.indexOf(\"*/\", index)\n if (endIndex >= 0) {\n index = endIndex + 2\n continue\n }\n return \"unknown\"\n }\n index++\n }\n if (startIndex == null) {\n return \"unknown\"\n }\n\n return rawParam.slice(startIndex)\n}\n\n/** Remove variable def */\nfunction removeVariableDef(\n variable: Variable,\n def: VariableDefinition,\n scope: Scope,\n): void {\n const defIndex = variable.defs.indexOf(def)\n if (defIndex < 0) {\n return\n }\n variable.defs.splice(defIndex, 1)\n if (variable.defs.length === 0) {\n // Remove variable\n referencesToThrough(variable.references, scope)\n variable.references.forEach((r) => {\n if ((r as any).init) {\n ;(r as any).init = false\n }\n r.resolved = null\n })\n scope.variables.splice(scope.variables.indexOf(variable), 1)\n const name = variable.name\n if (variable === scope.set.get(name)) {\n scope.set.delete(name)\n }\n } else {\n const idIndex = variable.identifiers.indexOf(def.name)\n if (idIndex >= 0) {\n variable.identifiers.splice(idIndex, 1)\n }\n }\n}\n\n/** Move reference to through */\nfunction referencesToThrough(references: Reference[], baseScope: Scope) {\n let scope: Scope | null = baseScope\n while (scope) {\n addAllReferences(scope.through, references)\n scope = scope.upper\n }\n}\n\n/**\n * Add all references to array\n */\nfunction addAllReferences(list: Reference[], elements: Reference[]): void {\n list.push(...elements)\n list.sort((a, b) => a.identifier.range![0] - b.identifier.range![0])\n}\n\n/** Remove reference */\nfunction removeReference(reference: Reference, baseScope: Scope): void {\n if (reference.resolved) {\n if (\n reference.resolved.defs.some((d) => d.name === reference.identifier)\n ) {\n // remove var\n const varIndex = baseScope.variables.indexOf(reference.resolved)\n if (varIndex >= 0) {\n baseScope.variables.splice(varIndex, 1)\n }\n const name = reference.identifier.name\n if (reference.resolved === baseScope.set.get(name)) {\n baseScope.set.delete(name)\n }\n } else {\n const refIndex = reference.resolved.references.indexOf(reference)\n if (refIndex >= 0) {\n reference.resolved.references.splice(refIndex, 1)\n }\n }\n }\n\n let scope: Scope | null = baseScope\n while (scope) {\n const refIndex = scope.references.indexOf(reference)\n if (refIndex >= 0) {\n scope.references.splice(refIndex, 1)\n }\n const throughIndex = scope.through.indexOf(reference)\n if (throughIndex >= 0) {\n scope.through.splice(throughIndex, 1)\n }\n scope = scope.upper\n }\n}\n\n/** Remove scope */\nfunction removeScope(scopeManager: ScopeManager, scope: Scope): void {\n for (const childScope of scope.childScopes) {\n removeScope(scopeManager, childScope)\n }\n\n while (scope.references[0]) {\n removeReference(scope.references[0], scope)\n }\n const upper = scope.upper\n if (upper) {\n const index = upper.childScopes.indexOf(scope)\n if (index >= 0) {\n upper.childScopes.splice(index, 1)\n }\n }\n const index = scopeManager.scopes.indexOf(scope)\n if (index >= 0) {\n scopeManager.scopes.splice(index, 1)\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport { sortedIndexBy } from \"../utils/utils\"\nimport type {\n ESLintArrayExpression,\n ESLintArrayPattern,\n ESLintCallExpression,\n ESLintExpression,\n ESLintExpressionStatement,\n ESLintExtendedProgram,\n ESLintForInStatement,\n ESLintForOfStatement,\n ESLintFunctionExpression,\n ESLintIdentifier,\n ESLintUnaryExpression,\n ESLintVariableDeclaration,\n HasLocation,\n Node,\n Reference,\n Token,\n Variable,\n VElement,\n VFilter,\n VFilterSequenceExpression,\n VForExpression,\n VOnExpression,\n VSlotScopeExpression,\n OffsetRange,\n VGenericExpression,\n} from \"../ast/index\"\nimport { ParseError } from \"../ast/index\"\nimport { debug } from \"../common/debug\"\nimport type {\n LocationCalculator,\n LocationCalculatorForHtml,\n} from \"../common/location-calculator\"\nimport {\n analyzeExternalReferences,\n analyzeVariablesAndExternalReferences,\n} from \"./scope-analyzer\"\nimport { getEcmaVersionIfUseEspree, getEspree } from \"../common/espree\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport {\n fixErrorLocation,\n fixLocation,\n fixLocations,\n} from \"../common/fix-locations\"\nimport { DEFAULT_ECMA_VERSION } from \"../script-setup/parser-options\"\nimport type { LinesAndColumns } from \"../common/lines-and-columns\"\nimport type { ParserObject } from \"../common/parser-object\"\nimport { isEnhancedParserObject, isParserObject } from \"../common/parser-object\"\nimport type { TSESTree } from \"@typescript-eslint/utils\"\nimport type { GenericProcessInfo } from \"./generic\"\nimport { extractGeneric } from \"./generic\"\n\n// [1] = aliases.\n// [2] = delimiter.\n// [3] = iterator.\nconst ALIAS_ITERATOR = /^([\\s\\S]*?(?:\\s|\\)))(\\bin\\b|\\bof\\b)([\\s\\S]*)$/u\nconst PARENS = /^(\\s*\\()([\\s\\S]*?)(\\)\\s*)$/u\nconst DUMMY_PARENT: any = {}\n\n// Like Vue, it judges whether it is a function expression or not.\n// https://github.com/vuejs/core/blob/fef2acb2049fce3407dff17fe8af1836b97dfd73/packages/compiler-core/src/transforms/vOn.ts#L19\nconst IS_FUNCTION_EXPRESSION =\n /^\\s*([\\w$_]+|(async\\s*)?\\([^)]*?\\))\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/u\n// ^^^^^^^ omit paren argument ^^^^^^^^ function keyword\n// ^^^^^ <--- async keyword (optional) ---> ^^^^^\n// ^^------^^ arguments with parens ^^^^^^ named function (optional)\n// ^^^^^^^^^ return types (optional)\n// ^^ arrow ^^ opening paren\n\nconst IS_SIMPLE_PATH =\n /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?'\\]|\\[\"[^\"]*?\"\\]|\\[\\d+\\]|\\[[A-Za-z_$][\\w$]*\\])*$/u\n\n/**\n * Parse the alias and iterator of 'v-for' directive values.\n * @param code The code to parse.\n * @returns The parsed result.\n */\nfunction processVForAliasAndIterator(code: string): {\n aliases: string\n hasParens: boolean\n delimiter: string\n iterator: string\n aliasesWithBrackets: string\n} {\n const match = ALIAS_ITERATOR.exec(code)\n if (match != null) {\n const aliases = match[1]\n const parenMatch = PARENS.exec(aliases)\n return {\n aliases,\n hasParens: Boolean(parenMatch),\n aliasesWithBrackets: parenMatch\n ? `${parenMatch[1].slice(0, -1)}[${\n parenMatch[2]\n }]${parenMatch[3].slice(1)}`\n : `[${aliases.slice(0, -1)}]`,\n delimiter: match[2] || \"\",\n iterator: match[3],\n }\n }\n return {\n aliases: \"\",\n hasParens: false,\n aliasesWithBrackets: \"\",\n delimiter: \"\",\n iterator: code,\n }\n}\n\n/**\n * Get the comma token before a given node.\n * @param tokens The token list.\n * @param node The node to get the comma before this node.\n * @returns The comma token.\n */\nfunction getCommaTokenBeforeNode(tokens: Token[], node: Node): Token | null {\n let tokenIndex = sortedIndexBy(\n tokens as { range: OffsetRange }[],\n { range: node.range },\n (t) => t.range[0],\n )\n\n while (tokenIndex >= 0) {\n const token = tokens[tokenIndex]\n if (token.type === \"Punctuator\" && token.value === \",\") {\n return token\n }\n tokenIndex -= 1\n }\n\n return null\n}\n\n/**\n * Throw syntax error for empty.\n * @param locationCalculator The location calculator to get line/column.\n */\nfunction throwEmptyError(\n locationCalculator: LocationCalculatorForHtml,\n expected: string,\n): never {\n const loc = locationCalculator.getLocation(0)\n const err = new ParseError(\n `Expected to be ${expected}, but got empty.`,\n undefined,\n 0,\n loc.line,\n loc.column,\n )\n fixErrorLocation(err, locationCalculator)\n\n throw err\n}\n\n/**\n * Throw syntax error for unexpected token.\n * @param locationCalculator The location calculator to get line/column.\n * @param name The token name.\n * @param token The token object to get that location.\n */\nfunction throwUnexpectedTokenError(name: string, token: HasLocation): never {\n const err = new ParseError(\n `Unexpected token '${name}'.`,\n undefined,\n token.range[0],\n token.loc.start.line,\n token.loc.start.column,\n )\n\n throw err\n}\n\n/**\n * Throw syntax error of outside of code.\n * @param locationCalculator The location calculator to get line/column.\n */\nfunction throwErrorAsAdjustingOutsideOfCode(\n err: any,\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n): never {\n if (ParseError.isParseError(err)) {\n const endOffset = locationCalculator.getOffsetWithGap(code.length)\n if (err.index >= endOffset) {\n err.message = \"Unexpected end of expression.\"\n }\n }\n\n throw err\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param locationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScriptFragment(\n code: string,\n locationCalculator: LocationCalculator,\n parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n return parseScriptFragmentWithOption(\n code,\n locationCalculator,\n parserOptions,\n )\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param locationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @param processOptions The process options.\n * @returns The result of parsing.\n */\nfunction parseScriptFragmentWithOption(\n code: string,\n locationCalculator: LocationCalculator,\n parserOptions: ParserOptions,\n processOptions?: {\n preFixLocationProcess?: (result: ESLintExtendedProgram) => void\n },\n): ESLintExtendedProgram {\n try {\n const result = parseScript(code, parserOptions)\n processOptions?.preFixLocationProcess?.(result)\n fixLocations(result, locationCalculator)\n return result\n } catch (err) {\n const perr = ParseError.normalize(err)\n if (perr) {\n fixErrorLocation(perr, locationCalculator)\n throw perr\n }\n throw err\n }\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/u\n\n/**\n * This is a fork of https://github.com/vuejs/vue/blob/2686818beb5728e3b7aa22f47a3b3f0d39d90c8e/src/compiler/parser/filter-parser.js\n * @param exp the expression to process filters.\n */\n//eslint-disable-next-line complexity\nfunction splitFilters(exp: string): string[] {\n const result: string[] = []\n let inSingle = false\n let inDouble = false\n let inTemplateString = false\n let inRegex = false\n let curly = 0\n let square = 0\n let paren = 0\n let lastFilterIndex = 0\n let c = 0\n let prev = 0\n\n for (let i = 0; i < exp.length; i++) {\n prev = c\n c = exp.charCodeAt(i)\n if (inSingle) {\n if (c === 0x27 && prev !== 0x5c) {\n inSingle = false\n }\n } else if (inDouble) {\n if (c === 0x22 && prev !== 0x5c) {\n inDouble = false\n }\n } else if (inTemplateString) {\n if (c === 0x60 && prev !== 0x5c) {\n inTemplateString = false\n }\n } else if (inRegex) {\n if (c === 0x2f && prev !== 0x5c) {\n inRegex = false\n }\n } else if (\n c === 0x7c && // pipe\n exp.charCodeAt(i + 1) !== 0x7c &&\n exp.charCodeAt(i - 1) !== 0x7c &&\n !curly &&\n !square &&\n !paren\n ) {\n result.push(exp.slice(lastFilterIndex, i))\n lastFilterIndex = i + 1\n } else {\n switch (c) {\n case 0x22: // \"\n inDouble = true\n break\n case 0x27: // '\n inSingle = true\n break\n case 0x60: // `\n inTemplateString = true\n break\n case 0x28: // (\n paren++\n break\n case 0x29: // )\n paren--\n break\n case 0x5b: // [\n square++\n break\n case 0x5d: // ]\n square--\n break\n case 0x7b: // {\n curly++\n break\n case 0x7d: // }\n curly--\n break\n // no default\n }\n if (c === 0x2f) {\n // /\n let j = i - 1\n let p\n // find first non-whitespace prev char\n for (; j >= 0; j--) {\n p = exp.charAt(j)\n if (p !== \" \") {\n break\n }\n }\n if (!p || !validDivisionCharRE.test(p)) {\n inRegex = true\n }\n }\n }\n }\n\n result.push(exp.slice(lastFilterIndex))\n\n return result\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseExpressionBody(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n allowEmpty = false,\n): ExpressionParseResult<ESLintExpression> {\n debug('[script] parse expression: \"0(%s)\"', code)\n\n try {\n const result = parseScriptFragment(\n `0(${code})`,\n locationCalculator.getSubCalculatorShift(-2),\n parserOptions,\n )\n const { ast } = result\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const references = analyzeExternalReferences(result, parserOptions)\n const statement = ast.body[0] as ESLintExpressionStatement\n const callExpression = statement.expression as ESLintCallExpression\n const expression = callExpression.arguments[0]\n\n if (!allowEmpty && !expression) {\n return throwEmptyError(locationCalculator, \"an expression\")\n }\n if (expression?.type === \"SpreadElement\") {\n return throwUnexpectedTokenError(\"...\", expression)\n }\n if (callExpression.arguments[1]) {\n const node = callExpression.arguments[1]\n return throwUnexpectedTokenError(\n \",\",\n getCommaTokenBeforeNode(tokens, node) || node,\n )\n }\n\n // Remove parens.\n tokens.shift()\n tokens.shift()\n tokens.pop()\n\n return { expression, tokens, comments, references, variables: [] }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseFilter(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VFilter> | null {\n debug('[script] parse filter: \"%s\"', code)\n\n try {\n const expression: VFilter = {\n type: \"VFilter\",\n parent: null as any,\n range: [0, 0],\n loc: {} as any,\n callee: null as any,\n arguments: [],\n }\n const tokens: Token[] = []\n const comments: Token[] = []\n const references: Reference[] = []\n\n // Parse the callee.\n const paren = code.indexOf(\"(\")\n const calleeCode = paren === -1 ? code : code.slice(0, paren)\n const argsCode = paren === -1 ? null : code.slice(paren)\n\n // Parse the callee.\n if (calleeCode.trim()) {\n const spaces = /^\\s*/u.exec(calleeCode)![0]\n const subCalculator = locationCalculator.getSubCalculatorShift(\n spaces.length,\n )\n const { ast } = parseScriptFragment(\n `\"${calleeCode.trim()}\"`,\n subCalculator,\n parserOptions,\n )\n const statement = ast.body[0] as ESLintExpressionStatement\n const callee = statement.expression\n if (callee.type !== \"Literal\") {\n const { loc, range } = ast.tokens![0]\n return throwUnexpectedTokenError('\"', {\n range: [range[1] - 1, range[1]],\n loc: {\n start: {\n line: loc.end.line,\n column: loc.end.column - 1,\n },\n end: loc.end,\n },\n })\n }\n\n expression.callee = {\n type: \"Identifier\",\n parent: expression,\n range: [\n callee.range[0],\n subCalculator.getOffsetWithGap(calleeCode.trim().length),\n ],\n loc: {\n start: callee.loc.start,\n end: subCalculator.getLocation(calleeCode.trim().length),\n },\n name: String(callee.value),\n }\n tokens.push({\n type: \"Identifier\",\n value: calleeCode.trim(),\n range: expression.callee.range,\n loc: expression.callee.loc,\n })\n } else {\n return throwEmptyError(locationCalculator, \"a filter name\")\n }\n\n // Parse the arguments.\n if (argsCode != null) {\n const result = parseScriptFragment(\n `0${argsCode}`,\n locationCalculator\n .getSubCalculatorAfter(paren)\n .getSubCalculatorShift(-1),\n parserOptions,\n )\n const { ast } = result\n const statement = ast.body[0] as ESLintExpressionStatement\n const callExpression = statement.expression\n\n ast.tokens!.shift()\n\n if (\n callExpression.type !== \"CallExpression\" ||\n callExpression.callee.type !== \"Literal\"\n ) {\n // Report the next token of `)`.\n let nestCount = 1\n for (const token of ast.tokens!.slice(1)) {\n if (nestCount === 0) {\n return throwUnexpectedTokenError(token.value, token)\n }\n if (token.type === \"Punctuator\" && token.value === \"(\") {\n nestCount += 1\n }\n if (token.type === \"Punctuator\" && token.value === \")\") {\n nestCount -= 1\n }\n }\n\n const token = ast.tokens!.at(-1)!\n return throwUnexpectedTokenError(token.value, token)\n }\n\n for (const argument of callExpression.arguments) {\n argument.parent = expression\n expression.arguments.push(argument)\n }\n tokens.push(...ast.tokens!)\n comments.push(...ast.comments!)\n references.push(...analyzeExternalReferences(result, parserOptions))\n }\n\n // Update range.\n const firstToken = tokens[0]\n const lastToken = tokens.at(-1)!\n expression.range = [firstToken.range[0], lastToken.range[1]]\n expression.loc = { start: firstToken.loc.start, end: lastToken.loc.end }\n\n return { expression, tokens, comments, references, variables: [] }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\n/**\n * The result of parsing expressions.\n */\nexport interface ExpressionParseResult<T extends Node> {\n expression: T | null\n tokens: Token[]\n comments: Token[]\n references: Reference[]\n variables: Variable[]\n}\n\nfunction loadParser(parser: string) {\n if (parser !== \"espree\") {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(parser)\n }\n return getEspree()\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScript(\n code: string,\n parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n const parser: ParserObject =\n typeof parserOptions.parser === \"string\"\n ? loadParser(parserOptions.parser)\n : isParserObject(parserOptions.parser)\n ? parserOptions.parser\n : getEspree()\n\n const result: any = isEnhancedParserObject(parser)\n ? parser.parseForESLint(code, parserOptions)\n : parser.parse(code, parserOptions)\n\n if (result.ast != null) {\n return result\n }\n return { ast: result }\n}\n\n/**\n * Parse the source code of the given `<script>` element.\n * @param node The `<script>` element to parse.\n * @param sfcCode The source code of SFC.\n * @param linesAndColumns The lines and columns location calculator.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScriptElement(\n node: VElement,\n sfcCode: string,\n linesAndColumns: LinesAndColumns,\n originalParserOptions: ParserOptions,\n): ESLintExtendedProgram {\n const parserOptions: ParserOptions = {\n ...originalParserOptions,\n ecmaVersion: originalParserOptions.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n }\n\n let generic: GenericProcessInfo | null = null\n let code: string\n let offset: number\n const textNode = node.children[0]\n if (textNode?.type === \"VText\") {\n const [scriptStartOffset, scriptEndOffset] = textNode.range\n code = sfcCode.slice(scriptStartOffset, scriptEndOffset)\n offset = scriptStartOffset\n generic = extractGeneric(node)\n if (generic) {\n const defineTypesCode = `${generic.defineTypes\n .map((e) => e.define)\n .join(\";\")};\\n`\n code = defineTypesCode + code\n offset -= defineTypesCode.length\n }\n } else {\n code = \"\"\n offset = node.startTag.range[1]\n }\n const locationCalculator =\n linesAndColumns.createOffsetLocationCalculator(offset)\n const result = parseScriptFragment(code, locationCalculator, parserOptions)\n if (generic) {\n generic.postprocess({\n result,\n isRemoveTarget(nodeOrToken) {\n return nodeOrToken.range[1] <= textNode.range[0]\n },\n getTypeDefScope(scopeManager) {\n return (\n scopeManager.globalScope.childScopes.find(\n (s) => s.type === \"module\",\n ) ?? scopeManager.globalScope\n )\n },\n })\n const startToken = [\n result.ast.body[0],\n result.ast.tokens?.[0],\n result.ast.comments?.[0],\n ]\n .filter((e): e is NonNullable<typeof e> => Boolean(e))\n .sort((a, b) => a.range[0] - b.range[0])\n .find((t) => Boolean(t))\n\n // Restore Program node location\n if (startToken && result.ast.range[0] !== startToken.range[0]) {\n result.ast.range[0] = startToken.range[0]\n if (result.ast.start != null) {\n result.ast.start = startToken.start\n }\n result.ast.loc.start = { ...startToken.loc.start }\n }\n }\n // Needs the tokens of start/end tags for `lines-around-*` rules to work\n // correctly.\n if (result.ast.tokens != null) {\n const startTag = node.startTag\n const endTag = node.endTag\n\n result.ast.tokens.unshift({\n type: \"Punctuator\",\n range: startTag.range,\n loc: startTag.loc,\n value: \"<script>\",\n })\n if (endTag != null) {\n result.ast.tokens.push({\n type: \"Punctuator\",\n range: endTag.range,\n loc: endTag.loc,\n value: \"</script>\",\n })\n }\n }\n\n return result\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n { allowEmpty = false, allowFilters = false } = {},\n): ExpressionParseResult<ESLintExpression | VFilterSequenceExpression> {\n debug('[script] parse expression: \"%s\"', code)\n\n const [mainCode, ...filterCodes] =\n allowFilters && (parserOptions.vueFeatures?.filter ?? true)\n ? splitFilters(code)\n : [code]\n if (filterCodes.length === 0) {\n return parseExpressionBody(\n code,\n locationCalculator,\n parserOptions,\n allowEmpty,\n )\n }\n\n // Parse expression\n const retB = parseExpressionBody(\n mainCode,\n locationCalculator,\n parserOptions,\n )\n if (!retB.expression) {\n return retB\n }\n const ret =\n retB as unknown as ExpressionParseResult<VFilterSequenceExpression>\n\n ret.expression = {\n type: \"VFilterSequenceExpression\",\n parent: null as any,\n expression: retB.expression,\n filters: [],\n range: [...retB.expression.range] as const,\n loc: { ...retB.expression.loc },\n }\n ret.expression.expression.parent = ret.expression\n\n // Parse filters\n let prevLoc = mainCode.length\n for (const filterCode of filterCodes) {\n // Pipe token.\n ret.tokens.push(\n fixLocation(\n {\n type: \"Punctuator\",\n value: \"|\",\n range: [prevLoc, prevLoc + 1],\n loc: {} as any,\n },\n locationCalculator,\n ),\n )\n\n // Parse a filter\n const retF = parseFilter(\n filterCode,\n locationCalculator.getSubCalculatorShift(prevLoc + 1),\n parserOptions,\n )\n if (retF) {\n if (retF.expression) {\n ret.expression.filters.push(retF.expression)\n retF.expression.parent = ret.expression\n }\n ret.tokens.push(...retF.tokens)\n ret.comments.push(...retF.comments)\n ret.references.push(...retF.references)\n }\n\n prevLoc += 1 + filterCode.length\n }\n\n // Update range.\n const lastToken = ret.tokens.at(-1)!\n ret.expression.range[1] = lastToken.range[1]\n ret.expression.loc.end = lastToken.loc.end\n\n return ret\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\n// eslint-disable-next-line complexity\nexport function parseVForExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VForExpression> {\n if (code.trim() === \"\") {\n throwEmptyError(locationCalculator, \"'<alias> in <expression>'\")\n }\n\n if (isEcmaVersion5(parserOptions)) {\n return parseVForExpressionForEcmaVersion5(\n code,\n locationCalculator,\n parserOptions,\n )\n }\n const processed = processVForAliasAndIterator(code)\n\n if (!processed.aliases.trim()) {\n return throwEmptyError(locationCalculator, \"an alias\")\n }\n try {\n debug(\n '[script] parse v-for expression: \"for(%s%s%s);\"',\n processed.aliasesWithBrackets,\n processed.delimiter,\n processed.iterator,\n )\n\n const result = parseScriptFragment(\n `for(let ${processed.aliasesWithBrackets}${processed.delimiter}${processed.iterator});`,\n locationCalculator.getSubCalculatorShift(\n processed.hasParens ? -8 : -9,\n ),\n parserOptions,\n )\n const { ast } = result\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const scope = analyzeVariablesAndExternalReferences(\n result,\n \"v-for\",\n parserOptions,\n )\n const references = scope.references\n const variables = scope.variables\n const statement = ast.body[0] as\n | ESLintForInStatement\n | ESLintForOfStatement\n const varDecl = statement.left as ESLintVariableDeclaration\n const id = varDecl.declarations[0].id as ESLintArrayPattern\n const left = id.elements\n const right = statement.right\n\n if (!processed.hasParens && !left.length) {\n return throwEmptyError(locationCalculator, \"an alias\")\n }\n // Remove `for` `(` `let` `)` `;`.\n tokens.shift()\n tokens.shift()\n tokens.shift()\n tokens.pop()\n tokens.pop()\n\n const closeOffset = statement.left.range[1] - 1\n const closeIndex = tokens.findIndex((t) => t.range[0] === closeOffset)\n\n if (processed.hasParens) {\n // Restore parentheses from array brackets.\n const open = tokens[0]\n if (open != null) {\n open.value = \"(\"\n }\n const close = tokens[closeIndex]\n if (close != null) {\n close.value = \")\"\n }\n } else {\n // Remove array brackets.\n tokens.splice(closeIndex, 1)\n tokens.shift()\n }\n const firstToken = tokens[0] || statement.left\n const lastToken = tokens[tokens.length - 1] || statement.right\n const expression: VForExpression = {\n type: \"VForExpression\",\n range: [firstToken.range[0], lastToken.range[1]],\n loc: { start: firstToken.loc.start, end: lastToken.loc.end },\n parent: DUMMY_PARENT,\n left,\n right,\n }\n\n // Modify parent.\n for (const l of left) {\n if (l != null) {\n l.parent = expression\n }\n }\n right.parent = expression\n\n return { expression, tokens, comments, references, variables }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\nfunction isEcmaVersion5(parserOptions: ParserOptions) {\n const ecmaVersion = getEcmaVersionIfUseEspree(parserOptions)\n return ecmaVersion != null && ecmaVersion <= 5\n}\n\nfunction parseVForExpressionForEcmaVersion5(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VForExpression> {\n const processed = processVForAliasAndIterator(code)\n\n if (!processed.aliases.trim()) {\n return throwEmptyError(locationCalculator, \"an alias\")\n }\n try {\n const tokens: Token[] = []\n const comments: Token[] = []\n\n const parsedAliases = parseVForAliasesForEcmaVersion5(\n processed.aliasesWithBrackets,\n locationCalculator.getSubCalculatorShift(\n processed.hasParens ? 0 : -1,\n ),\n parserOptions,\n )\n\n if (processed.hasParens) {\n // Restore parentheses from array brackets.\n const open = parsedAliases.tokens[0]\n if (open != null) {\n open.value = \"(\"\n }\n const close = parsedAliases.tokens.at(-1)\n if (close != null) {\n close.value = \")\"\n }\n } else {\n // Remove array brackets.\n parsedAliases.tokens.shift()\n parsedAliases.tokens.pop()\n }\n tokens.push(...parsedAliases.tokens)\n comments.push(...parsedAliases.comments)\n const { left, variables } = parsedAliases\n\n if (!processed.hasParens && !left.length) {\n return throwEmptyError(locationCalculator, \"an alias\")\n }\n\n const delimiterStart = processed.aliases.length\n const delimiterEnd = delimiterStart + processed.delimiter.length\n tokens.push(\n fixLocation(\n {\n type:\n processed.delimiter === \"in\" ? \"Keyword\" : \"Identifier\",\n value: processed.delimiter,\n start: delimiterStart,\n end: delimiterEnd,\n loc: {} as any,\n range: [delimiterStart, delimiterEnd],\n } as Token,\n locationCalculator,\n ),\n )\n\n const parsedIterator = parseVForIteratorForEcmaVersion5(\n processed.iterator,\n locationCalculator.getSubCalculatorShift(delimiterEnd),\n parserOptions,\n )\n\n tokens.push(...parsedIterator.tokens)\n comments.push(...parsedIterator.comments)\n const { right, references } = parsedIterator\n const firstToken = tokens[0]\n const lastToken = tokens.at(-1) || firstToken\n const expression: VForExpression = {\n type: \"VForExpression\",\n range: [firstToken.range[0], lastToken.range[1]],\n loc: { start: firstToken.loc.start, end: lastToken.loc.end },\n parent: DUMMY_PARENT,\n left,\n right,\n }\n\n // Modify parent.\n for (const l of left) {\n if (l != null) {\n l.parent = expression\n }\n }\n right.parent = expression\n\n return { expression, tokens, comments, references, variables }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\nfunction parseVForAliasesForEcmaVersion5(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n) {\n const result = parseScriptFragment(\n `0(${code})`,\n locationCalculator.getSubCalculatorShift(-2),\n parserOptions,\n )\n const { ast } = result\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const variables = analyzeExternalReferences(result, parserOptions).map(\n transformVariable,\n )\n\n const statement = ast.body[0] as ESLintExpressionStatement\n const callExpression = statement.expression as ESLintCallExpression\n const expression = callExpression.arguments[0] as ESLintArrayExpression\n\n const left: ESLintIdentifier[] = expression.elements.filter(\n (e): e is ESLintIdentifier => {\n if (e == null || e.type === \"Identifier\") {\n return true\n }\n const errorToken = tokens.find(\n (t) => e.range[0] <= t.range[0] && t.range[1] <= e.range[1],\n )!\n return throwUnexpectedTokenError(errorToken.value, errorToken)\n },\n )\n // Remove parens.\n tokens.shift()\n tokens.shift()\n tokens.pop()\n\n return { left, tokens, comments, variables }\n\n function transformVariable(reference: Reference): Variable {\n const ret: Variable = {\n id: reference.id,\n kind: \"v-for\",\n references: [],\n }\n Object.defineProperty(ret, \"references\", { enumerable: false })\n\n return ret\n }\n}\n\nfunction parseVForIteratorForEcmaVersion5(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n) {\n const result = parseScriptFragment(\n `0(${code})`,\n locationCalculator.getSubCalculatorShift(-2),\n parserOptions,\n )\n const { ast } = result\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const references = analyzeExternalReferences(result, parserOptions)\n\n const statement = ast.body[0] as ESLintExpressionStatement\n const callExpression = statement.expression as ESLintCallExpression\n const expression = callExpression.arguments[0]\n\n if (!expression) {\n return throwEmptyError(locationCalculator, \"an expression\")\n }\n if (expression?.type === \"SpreadElement\") {\n return throwUnexpectedTokenError(\"...\", expression)\n }\n const right = expression\n\n // Remove parens.\n tokens.shift()\n tokens.shift()\n tokens.pop()\n return { right, tokens, comments, references }\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseVOnExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<ESLintExpression | VOnExpression> {\n if (IS_FUNCTION_EXPRESSION.test(code) || IS_SIMPLE_PATH.test(code)) {\n return parseExpressionBody(code, locationCalculator, parserOptions)\n }\n return parseVOnExpressionBody(code, locationCalculator, parserOptions)\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseVOnExpressionBody(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VOnExpression> {\n debug('[script] parse v-on expression: \"void function($event){%s}\"', code)\n\n if (code.trim() === \"\") {\n throwEmptyError(locationCalculator, \"statements\")\n }\n\n try {\n const result = parseScriptFragment(\n `void function($event){${code}}`,\n locationCalculator.getSubCalculatorShift(-22),\n parserOptions,\n )\n const { ast } = result\n const references = analyzeExternalReferences(result, parserOptions)\n const outermostStatement = ast.body[0] as ESLintExpressionStatement\n const functionDecl = (\n outermostStatement.expression as ESLintUnaryExpression\n ).argument as ESLintFunctionExpression\n const block = functionDecl.body\n const body = block.body\n const firstStatement = body[0]\n const lastStatement = body.at(-1)\n const expression: VOnExpression = {\n type: \"VOnExpression\",\n range: [\n firstStatement != null\n ? firstStatement.range[0]\n : block.range[0] + 1,\n lastStatement != null\n ? lastStatement.range[1]\n : block.range[1] - 1,\n ],\n loc: {\n start:\n firstStatement != null\n ? firstStatement.loc.start\n : locationCalculator.getLocation(1),\n end:\n lastStatement != null\n ? lastStatement.loc.end\n : locationCalculator.getLocation(code.length + 1),\n },\n parent: DUMMY_PARENT,\n body,\n }\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n\n // Modify parent.\n for (const b of body) {\n b.parent = expression\n }\n\n // Remove braces.\n tokens.splice(0, 6)\n tokens.pop()\n\n return { expression, tokens, comments, references, variables: [] }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\n/**\n * Parse the source code of `slot-scope` directive.\n * @param code The source code of `slot-scope` directive.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseSlotScopeExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VSlotScopeExpression> {\n debug('[script] parse slot-scope expression: \"void function(%s) {}\"', code)\n\n if (code.trim() === \"\") {\n throwEmptyError(\n locationCalculator,\n \"an identifier or an array/object pattern\",\n )\n }\n\n try {\n const result = parseScriptFragment(\n `void function(${code}) {}`,\n locationCalculator.getSubCalculatorShift(-14),\n parserOptions,\n )\n const { ast } = result\n const statement = ast.body[0] as ESLintExpressionStatement\n const rawExpression = statement.expression as ESLintUnaryExpression\n const functionDecl = rawExpression.argument as ESLintFunctionExpression\n const params = functionDecl.params\n\n if (params.length === 0) {\n return {\n expression: null,\n tokens: [],\n comments: [],\n references: [],\n variables: [],\n }\n }\n\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const scope = analyzeVariablesAndExternalReferences(\n result,\n \"scope\",\n parserOptions,\n )\n const references = scope.references\n const variables = scope.variables\n const firstParam = params[0]\n const lastParam = params.at(-1)!\n const expression: VSlotScopeExpression = {\n type: \"VSlotScopeExpression\",\n range: [firstParam.range[0], lastParam.range[1]],\n loc: { start: firstParam.loc.start, end: lastParam.loc.end },\n parent: DUMMY_PARENT,\n params: functionDecl.params,\n }\n\n // Modify parent.\n for (const param of params) {\n param.parent = expression\n }\n\n // Remove `void` `function` `(` `)` `{` `}`.\n tokens.shift()\n tokens.shift()\n tokens.shift()\n tokens.pop()\n tokens.pop()\n tokens.pop()\n\n return { expression, tokens, comments, references, variables }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\n/**\n * Parse the source code of `generic` directive.\n * @param code The source code of `generic` directive.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseGenericExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VGenericExpression> {\n debug('[script] parse generic definition: \"void function<%s>() {}\"', code)\n\n if (code.trim() === \"\") {\n throwEmptyError(locationCalculator, \"a type parameter\")\n }\n\n function getParams(result: ESLintExtendedProgram) {\n const { ast } = result\n const statement = ast.body[0] as ESLintExpressionStatement\n const rawExpression = statement.expression as ESLintUnaryExpression\n const classDecl = rawExpression.argument as ESLintFunctionExpression\n const typeParameters = (classDecl as TSESTree.FunctionExpression)\n .typeParameters\n return typeParameters?.params\n }\n\n try {\n const rawParams: string[] = []\n const scriptLet = `void function<${code}>(){}`\n const result = parseScriptFragmentWithOption(\n scriptLet,\n locationCalculator.getSubCalculatorShift(-14),\n { ...parserOptions, project: undefined, projectService: undefined },\n {\n preFixLocationProcess(preResult) {\n const params = getParams(preResult)\n if (params) {\n for (const param of params) {\n rawParams.push(\n scriptLet.slice(param.range[0], param.range[1]),\n )\n }\n }\n },\n },\n )\n const { ast } = result\n const params = getParams(result)\n\n if (!params || params.length === 0) {\n return {\n expression: null,\n tokens: [],\n comments: [],\n references: [],\n variables: [],\n }\n }\n\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const scope = analyzeVariablesAndExternalReferences(\n result,\n \"generic\",\n parserOptions,\n )\n const references = scope.references\n const variables = scope.variables\n const firstParam = params[0]\n const lastParam = params.at(-1)!\n const expression: VGenericExpression = {\n type: \"VGenericExpression\",\n range: [firstParam.range[0], lastParam.range[1]],\n loc: { start: firstParam.loc.start, end: lastParam.loc.end },\n parent: DUMMY_PARENT,\n params,\n rawParams,\n }\n\n // Modify parent.\n for (const param of params) {\n ;(param as any).parent = expression\n }\n\n // Remove `void` `function` `<` `>` `(` `)` `{` `}`.\n tokens.shift()\n tokens.shift()\n tokens.shift()\n tokens.pop()\n tokens.pop()\n tokens.pop()\n tokens.pop()\n tokens.pop()\n\n return { expression, tokens, comments, references, variables }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n","import { sortedIndexBy, sortedLastIndexBy } from \"../utils/utils\"\nimport type { LocationRange, Token, VDocumentFragment } from \"../ast/index\"\nimport type { LinesAndColumns } from \"./lines-and-columns\"\n\ninterface HasRange {\n range: [number, number]\n}\n/**\n * Replace the tokens in the given range.\n * @param document The document that the node is belonging to.\n * @param node The node to specify the range of replacement.\n * @param newTokens The new tokens.\n */\nexport function replaceTokens(\n document: VDocumentFragment | null,\n node: HasRange,\n newTokens: Token[],\n): void {\n if (document == null) {\n return\n }\n\n const index = sortedIndexBy(document.tokens, node, byRange0)\n const count = sortedLastIndexBy(document.tokens, node, byRange1) - index\n document.tokens.splice(index, count, ...newTokens)\n}\n\n/**\n * Replace and split the tokens in the given range.\n * @param document The document that the node is belonging to.\n * @param node The node to specify the range of replacement.\n * @param newTokens The new tokens.\n */\nexport function replaceAndSplitTokens(\n document: VDocumentFragment | null,\n node: HasRange & {\n loc: LocationRange\n },\n newTokens: Token[],\n): void {\n if (document == null) {\n return\n }\n\n const index = sortedIndexBy(document.tokens, node, byRange0)\n if (\n document.tokens.length === index ||\n node.range[0] < document.tokens[index].range[0]\n ) {\n // split\n const beforeToken = document.tokens[index - 1]\n const value = beforeToken.value\n const splitOffset = node.range[0] - beforeToken.range[0]\n const afterToken: Token = {\n type: beforeToken.type,\n range: [node.range[0], beforeToken.range[1]],\n loc: {\n start: { ...node.loc.start },\n end: { ...beforeToken.loc.end },\n },\n value: value.slice(splitOffset),\n }\n beforeToken.range[1] = node.range[0]\n beforeToken.loc.end = { ...node.loc.start }\n beforeToken.value = value.slice(0, splitOffset)\n document.tokens.splice(index, 0, afterToken)\n }\n let lastIndex = sortedLastIndexBy(document.tokens, node, byRange1)\n if (\n lastIndex === 0 ||\n node.range[1] < document.tokens[lastIndex].range[1]\n ) {\n // split\n const beforeToken = document.tokens[lastIndex]\n const value = beforeToken.value\n const splitOffset =\n beforeToken.range[1] -\n beforeToken.range[0] -\n (beforeToken.range[1] - node.range[1])\n const afterToken: Token = {\n type: beforeToken.type,\n range: [node.range[1], beforeToken.range[1]],\n loc: {\n start: { ...node.loc.end },\n end: { ...beforeToken.loc.end },\n },\n value: value.slice(splitOffset),\n }\n beforeToken.range[1] = node.range[1]\n beforeToken.loc.end = { ...node.loc.end }\n beforeToken.value = value.slice(0, splitOffset)\n document.tokens.splice(lastIndex + 1, 0, afterToken)\n lastIndex++\n }\n const count = lastIndex - index\n document.tokens.splice(index, count, ...newTokens)\n}\n\n/**\n * Insert the given comment tokens.\n * @param document The document that the node is belonging to.\n * @param newComments The comments to insert.\n */\nexport function insertComments(\n document: VDocumentFragment | null,\n newComments: Token[],\n): void {\n if (document == null || newComments.length === 0) {\n return\n }\n\n const index = sortedIndexBy(document.comments, newComments[0], byRange0)\n document.comments.splice(index, 0, ...newComments)\n}\n\n/**\n * Create a simple token.\n * @param type The type of new token.\n * @param start The offset of the start position of new token.\n * @param end The offset of the end position of new token.\n * @param value The value of new token.\n * @returns The new token.\n */\nexport function createSimpleToken(\n type: string,\n start: number,\n end: number,\n value: string,\n linesAndColumns: LinesAndColumns,\n): Token {\n return {\n type,\n range: [start, end],\n loc: {\n start: linesAndColumns.getLocFromIndex(start),\n end: linesAndColumns.getLocFromIndex(end),\n },\n value,\n }\n}\n\n/**\n * Get `x.range[0]`.\n * @param x The object to get.\n * @returns `x.range[0]`.\n */\nfunction byRange0(x: HasRange): number {\n return x.range[0]\n}\n\n/**\n * Get `x.range[1]`.\n * @param x The object to get.\n * @returns `x.range[1]`.\n */\nfunction byRange1(x: HasRange): number {\n return x.range[1]\n}\n","import type { ParseError, VDocumentFragment } from \"../ast/index\"\nimport { sortedIndexBy } from \"../utils/utils\"\n/**\n * Insert the given error.\n * @param document The document that the node is belonging to.\n * @param error The error to insert.\n */\nexport function insertError(\n document: VDocumentFragment | null,\n error: ParseError,\n): void {\n if (document == null) {\n return\n }\n\n const index = sortedIndexBy(document.errors, error, byIndex)\n document.errors.splice(index, 0, error)\n}\n\n/**\n * Get `x.pos`.\n * @param x The object to get.\n * @returns `x.pos`.\n */\nfunction byIndex(x: ParseError): number {\n return x.index\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { ParserOptions } from \"../common/parser-options\"\nimport { isSFCFile } from \"../common/parser-options\"\nimport type {\n ESLintExpression,\n ESLintExtendedProgram,\n ESLintIdentifier,\n Reference,\n Token,\n VAttribute,\n VDirective,\n VDirectiveKey,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VFilterSequenceExpression,\n VForExpression,\n VGenericExpression,\n VIdentifier,\n VLiteral,\n VNode,\n VOnExpression,\n VSlotScopeExpression,\n} from \"../ast/index\"\nimport { ParseError } from \"../ast/index\"\nimport { debug } from \"../common/debug\"\nimport type { LocationCalculatorForHtml } from \"../common/location-calculator\"\nimport type { ExpressionParseResult } from \"../script/index\"\nimport {\n parseExpression,\n parseVForExpression,\n parseVOnExpression,\n parseSlotScopeExpression,\n parseGenericExpression,\n parseScriptFragment,\n} from \"../script/index\"\nimport {\n createSimpleToken,\n insertComments,\n replaceTokens,\n} from \"../common/token-utils\"\nimport {\n getOwnerDocument,\n isScriptSetupElement,\n isTSLang,\n} from \"../common/ast-utils\"\nimport { insertError } from \"../common/error-utils\"\nimport { camelize } from \"../utils/utils\"\n\nconst shorthandSign = /^[.:@#]/u\nconst shorthandNameMap = { \":\": \"bind\", \".\": \"bind\", \"@\": \"on\", \"#\": \"slot\" }\nconst invalidDynamicArgumentNextChar = /^[\\s\\r\\n=/>]$/u\n\n/**\n * Gets the tag name from the given node or token.\n * For SFC, it returns the value of `rawName` to be case sensitive.\n */\nfunction getTagName(\n startTagOrElement: { name: string; rawName: string },\n isSFC: boolean,\n) {\n return isSFC ? startTagOrElement.rawName : startTagOrElement.name\n}\n\n/**\n * Parse the given attribute name as a directive key.\n * @param node The identifier node to parse.\n * @param document The document to add parsing errors.\n * @returns The directive key node.\n */\nfunction parseDirectiveKeyStatically(\n node: VIdentifier,\n document: VDocumentFragment | null,\n): VDirectiveKey {\n const {\n name: text,\n rawName: rawText,\n range: [offset],\n loc: {\n start: { column, line },\n },\n } = node\n const directiveKey: VDirectiveKey = {\n type: \"VDirectiveKey\",\n range: node.range,\n loc: node.loc,\n parent: node.parent as any,\n name: null as any,\n argument: null as VIdentifier | null,\n modifiers: [] as VIdentifier[],\n }\n let i = 0\n\n function createIdentifier(\n start: number,\n end: number,\n name?: string,\n ): VIdentifier {\n return {\n type: \"VIdentifier\",\n parent: directiveKey,\n range: [offset + start, offset + end],\n loc: {\n start: { column: column + start, line },\n end: { column: column + end, line },\n },\n name: name || text.slice(start, end),\n rawName: rawText.slice(start, end),\n }\n }\n\n // Parse.\n if (shorthandSign.test(text)) {\n const sign = text[0] as \":\" | \".\" | \"@\" | \"#\"\n directiveKey.name = createIdentifier(0, 1, shorthandNameMap[sign])\n i = 1\n } else {\n const colon = text.indexOf(\":\")\n if (colon !== -1) {\n directiveKey.name = createIdentifier(0, colon)\n i = colon + 1\n }\n }\n\n if (directiveKey.name != null && text[i] === \"[\") {\n // Dynamic argument.\n const len = text.slice(i).lastIndexOf(\"]\")\n if (len !== -1) {\n directiveKey.argument = createIdentifier(i, i + len + 1)\n i = i + len + 1 + (text[i + len + 1] === \".\" ? 1 : 0)\n }\n }\n\n const modifiers = text\n .slice(i)\n .split(\".\")\n .map((modifierName) => {\n const modifier = createIdentifier(i, i + modifierName.length)\n if (modifierName === \"\" && i < text.length) {\n insertError(\n document,\n new ParseError(\n `Unexpected token '${text[i]}'`,\n undefined,\n offset + i,\n line,\n column + i,\n ),\n )\n }\n i += modifierName.length + 1\n return modifier\n })\n\n if (directiveKey.name == null) {\n directiveKey.name = modifiers.shift()!\n } else if (directiveKey.argument == null && modifiers[0].name !== \"\") {\n directiveKey.argument = modifiers.shift() ?? null\n }\n directiveKey.modifiers = modifiers.filter(isNotEmptyModifier)\n\n if (directiveKey.name.name === \"v-\") {\n insertError(\n document,\n new ParseError(\n `Unexpected token '${\n text[directiveKey.name.range[1] - offset]\n }'`,\n undefined,\n directiveKey.name.range[1],\n directiveKey.name.loc.end.line,\n directiveKey.name.loc.end.column,\n ),\n )\n }\n\n // v-bind.prop shorthand\n if (\n directiveKey.name.rawName === \".\" &&\n !directiveKey.modifiers.some(isPropModifier)\n ) {\n const pos =\n (directiveKey.argument || directiveKey.name).range[1] - offset\n const propModifier = createIdentifier(pos, pos, \"prop\")\n directiveKey.modifiers.unshift(propModifier)\n }\n\n return directiveKey\n}\n\n/**\n * Check whether a given identifier node is `prop` or not.\n * @param node The identifier node to check.\n */\nfunction isPropModifier(node: VIdentifier): boolean {\n return node.name === \"prop\"\n}\n\n/**\n * Check whether a given identifier node is empty or not.\n * @param node The identifier node to check.\n */\nfunction isNotEmptyModifier(node: VIdentifier): boolean {\n return node.name !== \"\"\n}\n\n/**\n * Parse the tokens of a given key node.\n * @param node The key node to parse.\n */\nfunction parseDirectiveKeyTokens(node: VDirectiveKey): Token[] {\n const { name, argument, modifiers } = node\n const shorthand = name.range[1] - name.range[0] === 1\n const tokens: Token[] = []\n\n if (shorthand) {\n tokens.push({\n type: \"Punctuator\",\n range: name.range,\n loc: name.loc,\n value: name.rawName,\n })\n } else {\n tokens.push({\n type: \"HTMLIdentifier\",\n range: name.range,\n loc: name.loc,\n value: name.rawName,\n })\n\n if (argument) {\n tokens.push({\n type: \"Punctuator\",\n range: [name.range[1], argument.range[0]],\n loc: { start: name.loc.end, end: argument.loc.start },\n value: \":\",\n })\n }\n }\n\n if (argument) {\n tokens.push({\n type: \"HTMLIdentifier\",\n range: argument.range,\n loc: argument.loc,\n value: (argument as VIdentifier).rawName,\n })\n }\n\n let lastNode = (argument as VIdentifier | null) || name\n for (const modifier of modifiers) {\n if (modifier.rawName === \"\") {\n continue\n }\n\n tokens.push(\n {\n type: \"Punctuator\",\n range: [lastNode.range[1], modifier.range[0]],\n loc: { start: lastNode.loc.end, end: modifier.loc.start },\n value: \".\",\n },\n {\n type: \"HTMLIdentifier\",\n range: modifier.range,\n loc: modifier.loc,\n value: modifier.rawName,\n },\n )\n lastNode = modifier\n }\n\n return tokens\n}\n\n/**\n * Convert `node.argument` property to a `VExpressionContainer` node if it's a dynamic argument.\n * @param text The source code text of the directive key node.\n * @param node The directive key node to convert.\n * @param document The belonging document node.\n * @param parserOptions The parser options to parse.\n * @param locationCalculator The location calculator to parse.\n */\nfunction convertDynamicArgument(\n node: VDirectiveKey,\n document: VDocumentFragment | null,\n parserOptions: ParserOptions,\n locationCalculator: LocationCalculatorForHtml,\n): void {\n const { argument } = node\n if (\n !(\n argument != null &&\n argument.type === \"VIdentifier\" &&\n argument.name.startsWith(\"[\") &&\n argument.name.endsWith(\"]\")\n )\n ) {\n return\n }\n\n const { rawName, range, loc } = argument\n try {\n const { comments, expression, references, tokens } = parseExpression(\n rawName.slice(1, -1),\n locationCalculator.getSubCalculatorAfter(range[0] + 1),\n parserOptions,\n )\n\n node.argument = {\n type: \"VExpressionContainer\",\n range,\n loc,\n parent: node,\n expression,\n references,\n }\n\n if (expression != null) {\n expression.parent = node.argument\n }\n\n // Add tokens of `[` and `]`.\n tokens.unshift(\n createSimpleToken(\n \"Punctuator\",\n range[0],\n range[0] + 1,\n \"[\",\n locationCalculator,\n ),\n )\n tokens.push(\n createSimpleToken(\n \"Punctuator\",\n range[1] - 1,\n range[1],\n \"]\",\n locationCalculator,\n ),\n )\n\n replaceTokens(document, node.argument, tokens)\n insertComments(document, comments)\n } catch (error) {\n debug(\"[template] Parse error: %s\", error)\n\n if (ParseError.isParseError(error)) {\n node.argument = {\n type: \"VExpressionContainer\",\n range,\n loc,\n parent: node,\n expression: null,\n references: [],\n }\n insertError(document, error)\n } else {\n throw error\n }\n }\n}\n\n/**\n * Parse the given attribute name as a directive key.\n * @param node The identifier node to parse.\n * @returns The directive key node.\n */\nfunction createDirectiveKey(\n node: VIdentifier,\n document: VDocumentFragment | null,\n parserOptions: ParserOptions,\n locationCalculator: LocationCalculatorForHtml,\n): VDirectiveKey {\n // Parse node and tokens.\n const directiveKey = parseDirectiveKeyStatically(node, document)\n const tokens = parseDirectiveKeyTokens(directiveKey)\n replaceTokens(document, directiveKey, tokens)\n\n // Drop `v-` prefix.\n if (directiveKey.name.name.startsWith(\"v-\")) {\n directiveKey.name.name = directiveKey.name.name.slice(2)\n }\n if (directiveKey.name.rawName.startsWith(\"v-\")) {\n directiveKey.name.rawName = directiveKey.name.rawName.slice(2)\n }\n\n // Parse dynamic argument.\n convertDynamicArgument(\n directiveKey,\n document,\n parserOptions,\n locationCalculator,\n )\n\n return directiveKey\n}\n\n/**\n * Parse the given attribute value as an expression.\n * @param code Whole source code text.\n * @param parserOptions The parser options to parse expressions.\n * @param globalLocationCalculator The location calculator to adjust the locations of nodes.\n * @param node The attribute node to replace. This function modifies this node directly.\n * @param tagName The name of this tag.\n * @param directiveKey The key of this directive.\n */\nfunction parseAttributeValue(\n code: string,\n parserOptions: ParserOptions,\n scriptParserOptions: ParserOptions,\n globalLocationCalculator: LocationCalculatorForHtml,\n node: VLiteral,\n element: VElement,\n directiveKey: VDirectiveKey,\n): ExpressionParseResult<\n | ESLintExpression\n | VFilterSequenceExpression\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\n | VGenericExpression\n> {\n const firstChar = code[node.range[0]]\n const quoted = firstChar === '\"' || firstChar === \"'\"\n const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n node.range[0] + (quoted ? 1 : 0),\n )\n const directiveKind = getStandardDirectiveKind(\n parserOptions,\n element,\n directiveKey,\n )\n\n let result: ExpressionParseResult<\n | ESLintExpression\n | VFilterSequenceExpression\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\n | VGenericExpression\n >\n if (quoted && node.value === \"\") {\n result = {\n expression: null,\n tokens: [],\n comments: [],\n variables: [],\n references: [],\n }\n } else if (directiveKind === \"for\") {\n result = parseVForExpression(\n node.value,\n locationCalculator,\n parserOptions,\n )\n } else if (directiveKind === \"on\" && directiveKey.argument != null) {\n result = parseVOnExpression(\n node.value,\n locationCalculator,\n parserOptions,\n )\n } else if (directiveKind === \"slot\") {\n result = parseSlotScopeExpression(\n node.value,\n locationCalculator,\n parserOptions,\n )\n } else if (directiveKind === \"bind\") {\n result = parseExpression(\n node.value,\n locationCalculator,\n parserOptions,\n { allowFilters: true },\n )\n } else if (directiveKind === \"generic\") {\n result = parseGenericExpression(\n node.value,\n locationCalculator,\n scriptParserOptions,\n )\n } else {\n result = parseExpression(node.value, locationCalculator, parserOptions)\n }\n\n // Add the tokens of quotes.\n if (quoted) {\n result.tokens.unshift(\n createSimpleToken(\n \"Punctuator\",\n node.range[0],\n node.range[0] + 1,\n firstChar,\n globalLocationCalculator,\n ),\n )\n result.tokens.push(\n createSimpleToken(\n \"Punctuator\",\n node.range[1] - 1,\n node.range[1],\n firstChar,\n globalLocationCalculator,\n ),\n )\n }\n\n return result\n}\n\nfunction getStandardDirectiveKind(\n parserOptions: ParserOptions,\n element: VElement,\n directiveKey: VDirectiveKey,\n) {\n const directiveName = directiveKey.name.name\n\n if (directiveName === \"for\") {\n return \"for\"\n } else if (directiveName === \"on\") {\n return \"on\"\n } else if (\n directiveName === \"slot\" ||\n directiveName === \"slot-scope\" ||\n (directiveName === \"scope\" &&\n getTagName(element, isSFCFile(parserOptions)) === \"template\")\n ) {\n return \"slot\"\n } else if (directiveName === \"bind\") {\n return \"bind\"\n } else if (\n directiveName === \"generic\" &&\n element.parent.type === \"VDocumentFragment\" &&\n getTagName(element, isSFCFile(parserOptions)) === \"script\" &&\n isScriptSetupElement(element) &&\n isTSLang(element)\n ) {\n return \"generic\"\n }\n return null\n}\n\n/**\n * Resolve the variable of the given reference.\n * @param referene The reference to resolve.\n * @param element The belonging element of the reference.\n */\nfunction resolveReference(referene: Reference, element: VElement): void {\n let node: VNode | null = element\n\n // Find the variable of this reference.\n while (node?.type === \"VElement\") {\n for (const variable of node.variables) {\n if (variable.id.name === referene.id.name) {\n referene.variable = variable\n variable.references.push(referene)\n return\n }\n }\n\n node = node.parent\n }\n}\n\n/**\n * Information of a mustache.\n */\nexport interface Mustache {\n value: string\n startToken: Token\n endToken: Token\n}\n\n/**\n * Replace the given attribute by a directive.\n * @param code Whole source code text.\n * @param parserOptions The parser options to parse expressions.\n * @param locationCalculator The location calculator to adjust the locations of nodes.\n * @param node The attribute node to replace. This function modifies this node directly.\n */\nexport function convertToDirective(\n code: string,\n parserOptions: ParserOptions,\n scriptParserOptions: ParserOptions,\n locationCalculator: LocationCalculatorForHtml,\n node: VAttribute,\n): void {\n debug(\n '[template] convert to directive: %s=\"%s\" %j',\n node.key.name,\n node.value?.value,\n node.range,\n )\n\n const document = getOwnerDocument(node)\n const directive: VDirective = node as any\n directive.directive = true\n directive.key = createDirectiveKey(\n node.key,\n document,\n parserOptions,\n locationCalculator,\n )\n\n const { argument } = directive.key\n if (argument?.type === \"VIdentifier\" && argument.name.startsWith(\"[\")) {\n const nextChar = code[argument.range[1]]\n if (nextChar == null || invalidDynamicArgumentNextChar.test(nextChar)) {\n const char =\n nextChar == null ? \"EOF\" : JSON.stringify(nextChar).slice(1, -1)\n insertError(\n document,\n new ParseError(\n `Dynamic argument cannot contain the '${char}' character.`,\n undefined,\n argument.range[1],\n argument.loc.end.line,\n argument.loc.end.column,\n ),\n )\n }\n }\n\n if (node.value == null) {\n if (directive.key.name.name === \"bind\") {\n // v-bind same-name shorthand (Vue 3.4+)\n convertForVBindSameNameShorthandValue(\n directive,\n parserOptions,\n locationCalculator,\n )\n }\n return\n }\n\n try {\n const ret = parseAttributeValue(\n code,\n parserOptions,\n scriptParserOptions,\n locationCalculator,\n node.value,\n node.parent.parent,\n directive.key,\n )\n\n directive.value = {\n type: \"VExpressionContainer\",\n range: node.value.range,\n loc: node.value.loc,\n parent: directive,\n expression: ret.expression,\n references: ret.references,\n }\n if (ret.expression != null) {\n ret.expression.parent = directive.value\n }\n\n for (const variable of ret.variables) {\n node.parent.parent.variables.push(variable)\n }\n\n replaceTokens(document, node.value, ret.tokens)\n insertComments(document, ret.comments)\n } catch (err) {\n debug(\"[template] Parse error: %s\", err)\n\n if (ParseError.isParseError(err)) {\n directive.value = {\n type: \"VExpressionContainer\",\n range: node.value.range,\n loc: node.value.loc,\n parent: directive,\n expression: null,\n references: [],\n }\n insertError(document, err)\n } else {\n throw err\n }\n }\n}\n\nfunction convertForVBindSameNameShorthandValue(\n directive: VDirective,\n parserOptions: ParserOptions,\n locationCalculator: LocationCalculatorForHtml,\n) {\n if (\n directive.key.name.name !== \"bind\" ||\n directive.key.argument == null ||\n directive.key.argument.type !== \"VIdentifier\"\n ) {\n return\n }\n // v-bind same-name shorthand (Vue 3.4+)\n const vId = directive.key.argument\n const camelName = camelize(vId.rawName)\n let result: ESLintExtendedProgram | null = null\n try {\n result = parseScriptFragment(\n camelName,\n locationCalculator.getSubCalculatorAfter(vId.range[0]),\n parserOptions,\n )\n } catch (err) {\n debug(\"[template] Parse error: %s\", err)\n }\n if (\n result == null ||\n result.ast.body.length !== 1 ||\n result.ast.body[0].type !== \"ExpressionStatement\" ||\n result.ast.body[0].expression.type !== \"Identifier\"\n ) {\n return\n }\n const id: ESLintIdentifier = result.ast.body[0].expression\n id.range[1] = vId.range[1]\n id.loc.end = { ...vId.loc.end }\n if (id.end != null) {\n id.end = vId.end\n }\n directive.value = {\n type: \"VExpressionContainer\",\n range: [...vId.range],\n loc: {\n start: { ...vId.loc.start },\n end: { ...vId.loc.end },\n },\n parent: directive,\n expression: id,\n references: [\n {\n id,\n mode: \"r\",\n variable: null,\n },\n ],\n }\n id.parent = directive.value\n}\n\n/**\n * Parse the content of the given mustache.\n * @param parserOptions The parser options to parse expressions.\n * @param globalLocationCalculator The location calculator to adjust the locations of nodes.\n * @param node The expression container node. This function modifies the `expression` and `references` properties of this node.\n * @param mustache The information of mustache to parse.\n */\nexport function processMustache(\n parserOptions: ParserOptions,\n globalLocationCalculator: LocationCalculatorForHtml,\n node: VExpressionContainer,\n mustache: Mustache,\n): void {\n const range: [number, number] = [\n mustache.startToken.range[1],\n mustache.endToken.range[0],\n ]\n debug(\"[template] convert mustache {{%s}} %j\", mustache.value, range)\n\n const document = getOwnerDocument(node)\n try {\n const locationCalculator =\n globalLocationCalculator.getSubCalculatorAfter(range[0])\n const ret = parseExpression(\n mustache.value,\n locationCalculator,\n parserOptions,\n { allowEmpty: true, allowFilters: true },\n )\n\n node.expression = ret.expression ?? null\n node.references = ret.references\n if (ret.expression != null) {\n ret.expression.parent = node\n }\n\n replaceTokens(document, { range }, ret.tokens)\n insertComments(document, ret.comments)\n } catch (err) {\n debug(\"[template] Parse error: %s\", err)\n\n if (ParseError.isParseError(err)) {\n insertError(document, err)\n } else {\n throw err\n }\n }\n}\n\n/**\n * Resolve all references of the given expression container.\n * @param container The expression container to resolve references.\n */\nexport function resolveReferences(container: VExpressionContainer): void {\n let element: VNode | null = container.parent\n\n // Get the belonging element.\n while (element != null && element.type !== \"VElement\") {\n element = element.parent\n }\n\n // Resolve.\n if (element != null) {\n for (const reference of container.references) {\n resolveReference(reference, element)\n }\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nexport const SVG_ATTRIBUTE_NAME_MAP = new Map([\n [\"attributename\", \"attributeName\"],\n [\"attributetype\", \"attributeType\"],\n [\"basefrequency\", \"baseFrequency\"],\n [\"baseprofile\", \"baseProfile\"],\n [\"calcmode\", \"calcMode\"],\n [\"clippathunits\", \"clipPathUnits\"],\n [\"diffuseconstant\", \"diffuseConstant\"],\n [\"edgemode\", \"edgeMode\"],\n [\"filterunits\", \"filterUnits\"],\n [\"glyphref\", \"glyphRef\"],\n [\"gradienttransform\", \"gradientTransform\"],\n [\"gradientunits\", \"gradientUnits\"],\n [\"kernelmatrix\", \"kernelMatrix\"],\n [\"kernelunitlength\", \"kernelUnitLength\"],\n [\"keypoints\", \"keyPoints\"],\n [\"keysplines\", \"keySplines\"],\n [\"keytimes\", \"keyTimes\"],\n [\"lengthadjust\", \"lengthAdjust\"],\n [\"limitingconeangle\", \"limitingConeAngle\"],\n [\"markerheight\", \"markerHeight\"],\n [\"markerunits\", \"markerUnits\"],\n [\"markerwidth\", \"markerWidth\"],\n [\"maskcontentunits\", \"maskContentUnits\"],\n [\"maskunits\", \"maskUnits\"],\n [\"numoctaves\", \"numOctaves\"],\n [\"pathlength\", \"pathLength\"],\n [\"patterncontentunits\", \"patternContentUnits\"],\n [\"patterntransform\", \"patternTransform\"],\n [\"patternunits\", \"patternUnits\"],\n [\"pointsatx\", \"pointsAtX\"],\n [\"pointsaty\", \"pointsAtY\"],\n [\"pointsatz\", \"pointsAtZ\"],\n [\"preservealpha\", \"preserveAlpha\"],\n [\"preserveaspectratio\", \"preserveAspectRatio\"],\n [\"primitiveunits\", \"primitiveUnits\"],\n [\"refx\", \"refX\"],\n [\"refy\", \"refY\"],\n [\"repeatcount\", \"repeatCount\"],\n [\"repeatdur\", \"repeatDur\"],\n [\"requiredextensions\", \"requiredExtensions\"],\n [\"requiredfeatures\", \"requiredFeatures\"],\n [\"specularconstant\", \"specularConstant\"],\n [\"specularexponent\", \"specularExponent\"],\n [\"spreadmethod\", \"spreadMethod\"],\n [\"startoffset\", \"startOffset\"],\n [\"stddeviation\", \"stdDeviation\"],\n [\"stitchtiles\", \"stitchTiles\"],\n [\"surfacescale\", \"surfaceScale\"],\n [\"systemlanguage\", \"systemLanguage\"],\n [\"tablevalues\", \"tableValues\"],\n [\"targetx\", \"targetX\"],\n [\"targety\", \"targetY\"],\n [\"textlength\", \"textLength\"],\n [\"viewbox\", \"viewBox\"],\n [\"viewtarget\", \"viewTarget\"],\n [\"xchannelselector\", \"xChannelSelector\"],\n [\"ychannelselector\", \"yChannelSelector\"],\n [\"zoomandpan\", \"zoomAndPan\"],\n])\n\nexport const MATHML_ATTRIBUTE_NAME_MAP = new Map([\n [\"definitionurl\", \"definitionUrl\"]\n])\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * HTML tag names.\n */\nexport const HTML_TAGS = new Set([\n \"a\", \"abbr\", \"address\", \"area\", \"article\",\"aside\", \"audio\", \"b\", \"base\",\n \"bdi\", \"bdo\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\",\n \"cite\", \"code\", \"col\", \"colgroup\", \"data\", \"datalist\", \"dd\", \"del\",\n \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"document\", \"dt\", \"em\", \"embed\",\n \"fieldset\", \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\",\n \"h4\", \"h5\", \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\",\n \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"link\", \"main\",\n \"map\", \"mark\", \"marquee\", \"menu\", \"meta\", \"meter\", \"nav\", \"noscript\",\n \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\",\n \"pre\", \"progress\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"script\",\n \"section\", \"select\", \"slot\", \"small\", \"source\", \"span\", \"strong\", \"style\",\n \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\",\n \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"u\", \"ul\", \"var\",\n \"video\", \"wbr\"\n])\n\n/**\n * HTML tag names of void elements.\n */\nexport const HTML_VOID_ELEMENT_TAGS = new Set([\n \"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"link\", \"meta\",\n \"param\", \"source\", \"track\", \"wbr\",\n])\n\n/**\n * https://github.com/vuejs/vue/blob/e4da249ab8ef32a0b8156c840c9d2b9773090f8a/src/platforms/web/compiler/util.js#L12\n */\nexport const HTML_CAN_BE_LEFT_OPEN_TAGS = new Set([\n \"colgroup\", \"li\", \"options\", \"p\", \"td\", \"tfoot\", \"th\", \"thead\", \n \"tr\", \"source\",\n])\n\n/**\n * https://github.com/vuejs/vue/blob/e4da249ab8ef32a0b8156c840c9d2b9773090f8a/src/platforms/web/compiler/util.js#L18\n */\nexport const HTML_NON_FHRASING_TAGS = new Set([\n \"address\", \"article\", \"aside\", \"base\", \"blockquote\", \"body\", \"caption\", \n \"col\", \"colgroup\", \"dd\", \"details\", \"dialog\", \"div\", \"dl\", \"dt\", \"fieldset\", \n \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \n \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"legend\", \"li\", \"menuitem\", \n \"meta\", \"optgroup\", \"option\", \"param\", \"rp\", \"rt\", \"source\", \"style\", \n \"summary\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"title\", \"tr\", \"track\",\n])\n\n/**\n * HTML tag names of RCDATA.\n */\nexport const HTML_RCDATA_TAGS = new Set([\n \"title\", \"textarea\",\n])\n\n/**\n * HTML tag names of RAWTEXT.\n */\nexport const HTML_RAWTEXT_TAGS = new Set([\n \"style\", \"xmp\", \"iframe\", \"noembed\", \"noframes\", \"noscript\", \"script\",\n])\n\n/**\n * SVG tag names.\n */\nexport const SVG_TAGS = new Set([\n \"a\", \"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \n \"animateMotion\", \"animateTransform\", \"animation\", \"audio\", \"canvas\", \n \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"discard\", \n \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \n \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \n \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \n \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \n \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \n \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \n \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \n \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"handler\", \"hatch\", \"hatchpath\", \n \"hkern\", \"iframe\", \"image\", \"line\", \"linearGradient\", \"listener\", \"marker\", \n \"mask\", \"mesh\", \"meshgradient\", \"meshpatch\", \"meshrow\", \"metadata\", \n \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \n \"prefetch\", \"radialGradient\", \"rect\", \"script\", \"set\", \"solidColor\", \n \"solidcolor\", \"stop\", \"style\", \"svg\", \"switch\", \"symbol\", \"tbreak\", \"text\", \n \"textArea\", \"textPath\", \"title\", \"tref\", \"tspan\", \"unknown\", \"use\", \"video\", \n \"view\", \"vkern\",\n])\n\n/**\n * The map from lowercase names to actual names in SVG.\n */\nexport const SVG_ELEMENT_NAME_MAP = new Map<string, string>()\nfor (const name of SVG_TAGS) {\n if (/[A-Z]/.test(name)) {\n SVG_ELEMENT_NAME_MAP.set(name.toLowerCase(), name)\n }\n}\n\n/**\n * MathML tag names.\n */\nexport const MATHML_TAGS = new Set([\n \"abs\", \"and\", \"annotation\", \"annotation-xml\", \"apply\", \"approx\", \"arccos\", \n \"arccosh\", \"arccot\", \"arccoth\", \"arccsc\", \"arccsch\", \"arcsec\", \"arcsech\", \n \"arcsin\", \"arcsinh\", \"arctan\", \"arctanh\", \"arg\", \"bind\", \"bvar\", \"card\", \n \"cartesianproduct\", \"cbytes\", \"ceiling\", \"cerror\", \"ci\", \"cn\", \"codomain\", \n \"complexes\", \"compose\", \"condition\", \"conjugate\", \"cos\", \"cosh\", \"cot\", \n \"coth\", \"cs\", \"csc\", \"csch\", \"csymbol\", \"curl\", \"declare\", \"degree\", \n \"determinant\", \"diff\", \"divergence\", \"divide\", \"domain\", \n \"domainofapplication\", \"emptyset\", \"encoding\", \"eq\", \"equivalent\", \n \"eulergamma\", \"exists\", \"exp\", \"exponentiale\", \"factorial\", \"factorof\", \n \"false\", \"floor\", \"fn\", \"forall\", \"function\", \"gcd\", \"geq\", \"grad\", \"gt\", \n \"ident\", \"image\", \"imaginary\", \"imaginaryi\", \"implies\", \"in\", \"infinity\", \n \"int\", \"integers\", \"intersect\", \"interval\", \"inverse\", \"lambda\", \n \"laplacian\", \"lcm\", \"leq\", \"limit\", \"list\", \"ln\", \"log\", \"logbase\", \n \"lowlimit\", \"lt\", \"m:apply\", \"m:mrow\", \"maction\", \"malign\", \"maligngroup\", \n \"malignmark\", \"malignscope\", \"math\", \"matrix\", \"matrixrow\", \"max\", \"mean\", \n \"median\", \"menclose\", \"merror\", \"mfenced\", \"mfrac\", \"mfraction\", \"mglyph\", \n \"mi\", \"mi\\\"\", \"min\", \"minus\", \"mlabeledtr\", \"mlongdiv\", \"mmultiscripts\", \n \"mn\", \"mo\", \"mode\", \"moment\", \"momentabout\", \"mover\", \"mpadded\", \"mphantom\", \n \"mprescripts\", \"mroot\", \"mrow\", \"ms\", \"mscarries\", \"mscarry\", \"msgroup\", \n \"msline\", \"mspace\", \"msqrt\", \"msrow\", \"mstack\", \"mstyle\", \"msub\", \"msubsup\", \n \"msup\", \"mtable\", \"mtd\", \"mtext\", \"mtr\", \"munder\", \"munderover\", \n \"naturalnumbers\", \"neq\", \"none\", \"not\", \"notanumber\", \"notin\", \n \"notprsubset\", \"notsubset\", \"or\", \"otherwise\", \"outerproduct\", \n \"partialdiff\", \"pi\", \"piece\", \"piecewice\", \"piecewise\", \"plus\", \"power\", \n \"primes\", \"product\", \"prsubset\", \"quotient\", \"rationals\", \"real\", \"reals\", \n \"reln\", \"rem\", \"root\", \"scalarproduct\", \"sdev\", \"sec\", \"sech\", \"select\", \n \"selector\", \"semantics\", \"sep\", \"set\", \"setdiff\", \"share\", \"sin\", \"sinh\", \n \"span\", \"subset\", \"sum\", \"tan\", \"tanh\", \"tendsto\", \"times\", \"transpose\", \n \"true\", \"union\", \"uplimit\", \"var\", \"variance\", \"vector\", \"vectorproduct\", \n \"xor\",\n])\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport assert from \"assert\"\nimport type {\n ErrorCode,\n HasLocation,\n Namespace,\n Token,\n VAttribute,\n} from \"../ast/index\"\nimport { ParseError } from \"../ast/index\"\nimport { debug } from \"../common/debug\"\nimport type { Tokenizer, TokenizerState, TokenType } from \"./tokenizer\"\n\nconst DUMMY_PARENT: any = Object.freeze({})\n\n/**\n * Concatenate token values.\n * @param text Concatenated text.\n * @param token The token to concatenate.\n */\nfunction concat(text: string, token: Token): string {\n return text + token.value\n}\n\n/**\n * The type of intermediate tokens.\n */\nexport type IntermediateToken = StartTag | EndTag | Text | Mustache\n\n/**\n * The type of start tags.\n */\nexport interface StartTag extends HasLocation {\n type: \"StartTag\"\n name: string\n rawName: string\n selfClosing: boolean\n attributes: VAttribute[]\n}\n\n/**\n * The type of end tags.\n */\nexport interface EndTag extends HasLocation {\n type: \"EndTag\"\n name: string\n}\n\n/**\n * The type of text chunks.\n */\nexport interface Text extends HasLocation {\n type: \"Text\"\n value: string\n}\n\n/**\n * The type of text chunks of an expression container.\n */\nexport interface Mustache extends HasLocation {\n type: \"Mustache\"\n value: string\n startToken: Token\n endToken: Token\n}\n\n/**\n * The class to create HTML tokens from ESTree-like tokens which are created by a Tokenizer.\n */\nexport class IntermediateTokenizer {\n private tokenizer: Tokenizer\n private currentToken: IntermediateToken | null\n private attribute: VAttribute | null\n private attributeNames: Set<string>\n private expressionStartToken: Token | null\n private expressionTokens: Token[]\n\n public readonly tokens: Token[]\n public readonly comments: Token[]\n\n /**\n * The source code text.\n */\n public get text(): string {\n return this.tokenizer.text\n }\n\n /**\n * The parse errors.\n */\n public get errors(): ParseError[] {\n return this.tokenizer.errors\n }\n\n /**\n * The current state.\n */\n public get state(): TokenizerState {\n return this.tokenizer.state\n }\n public set state(value: TokenizerState) {\n this.tokenizer.state = value\n }\n\n /**\n * The current namespace.\n */\n public get namespace(): Namespace {\n return this.tokenizer.namespace\n }\n public set namespace(value: Namespace) {\n this.tokenizer.namespace = value\n }\n\n /**\n * The current flag of expression enabled.\n */\n public get expressionEnabled(): boolean {\n return this.tokenizer.expressionEnabled\n }\n public set expressionEnabled(value: boolean) {\n this.tokenizer.expressionEnabled = value\n }\n\n /**\n * Initialize this intermediate tokenizer.\n * @param tokenizer The tokenizer.\n */\n public constructor(tokenizer: Tokenizer) {\n this.tokenizer = tokenizer\n this.currentToken = null\n this.attribute = null\n this.attributeNames = new Set<string>()\n this.expressionStartToken = null\n this.expressionTokens = []\n this.tokens = []\n this.comments = []\n }\n\n /**\n * Get the next intermediate token.\n * @returns The intermediate token or null.\n */\n public nextToken(): IntermediateToken | null {\n let token: Token | null = null\n let result: IntermediateToken | null = null\n\n while (result == null && (token = this.tokenizer.nextToken()) != null) {\n result = this[token.type as TokenType](token)\n }\n\n if (result == null && token == null && this.currentToken != null) {\n result = this.commit()\n }\n\n return result\n }\n\n /**\n * Commit the current token.\n */\n private commit(): IntermediateToken {\n assert(this.currentToken != null || this.expressionStartToken != null)\n\n let token = this.currentToken\n this.currentToken = null\n this.attribute = null\n\n if (this.expressionStartToken != null) {\n // VExpressionEnd was not found.\n // Concatenate the deferred tokens to the committed token.\n const start = this.expressionStartToken\n const end = this.expressionTokens.at(-1) || start\n const value = this.expressionTokens.reduce(concat, start.value)\n this.expressionStartToken = null\n this.expressionTokens = []\n\n if (token == null) {\n token = {\n type: \"Text\",\n range: [start.range[0], end.range[1]],\n loc: { start: start.loc.start, end: end.loc.end },\n value,\n }\n } else if (token.type === \"Text\") {\n token.range[1] = end.range[1]\n token.loc.end = end.loc.end\n token.value += value\n } else {\n throw new Error(\"unreachable\")\n }\n }\n\n return token as IntermediateToken\n }\n\n /**\n * Report an invalid character error.\n * @param code The error code.\n */\n private reportParseError(token: HasLocation, code: ErrorCode): void {\n const error = ParseError.fromCode(\n code,\n token.range[0],\n token.loc.start.line,\n token.loc.start.column,\n )\n this.errors.push(error)\n\n debug(\"[html] syntax error:\", error.message)\n }\n\n /**\n * Process the given comment token.\n * @param token The comment token to process.\n */\n private processComment(token: Token): IntermediateToken | null {\n this.comments.push(token)\n\n if (this.currentToken?.type === \"Text\") {\n return this.commit()\n }\n return null\n }\n\n /**\n * Process the given text token.\n * @param token The text token to process.\n */\n private processText(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n let result: IntermediateToken | null = null\n\n if (this.expressionStartToken != null) {\n // Defer this token until a VExpressionEnd token or a non-text token appear.\n const lastToken =\n this.expressionTokens.at(-1) || this.expressionStartToken\n if (lastToken.range[1] === token.range[0]) {\n this.expressionTokens.push(token)\n return null\n }\n\n result = this.commit()\n } else if (this.currentToken != null) {\n // Concatenate this token to the current text token.\n if (\n this.currentToken.type === \"Text\" &&\n this.currentToken.range[1] === token.range[0]\n ) {\n this.currentToken.value += token.value\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n return null\n }\n\n result = this.commit()\n }\n assert(this.currentToken == null)\n\n this.currentToken = {\n type: \"Text\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n value: token.value,\n }\n\n return result\n }\n\n /**\n * Process a HTMLAssociation token.\n * @param token The token to process.\n */\n protected HTMLAssociation(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (this.attribute != null) {\n this.attribute.range[1] = token.range[1]\n this.attribute.loc.end = token.loc.end\n\n if (\n this.currentToken == null ||\n this.currentToken.type !== \"StartTag\"\n ) {\n throw new Error(\"unreachable\")\n }\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n }\n\n return null\n }\n\n /**\n * Process a HTMLBogusComment token.\n * @param token The token to process.\n */\n protected HTMLBogusComment(token: Token): IntermediateToken | null {\n return this.processComment(token)\n }\n\n /**\n * Process a HTMLCDataText token.\n * @param token The token to process.\n */\n protected HTMLCDataText(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a HTMLComment token.\n * @param token The token to process.\n */\n protected HTMLComment(token: Token): IntermediateToken | null {\n return this.processComment(token)\n }\n\n /**\n * Process a HTMLEndTagOpen token.\n * @param token The token to process.\n */\n protected HTMLEndTagOpen(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n let result: IntermediateToken | null = null\n\n if (this.currentToken != null || this.expressionStartToken != null) {\n result = this.commit()\n }\n\n this.currentToken = {\n type: \"EndTag\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n name: token.value,\n }\n\n return result\n }\n\n /**\n * Process a HTMLIdentifier token.\n * @param token The token to process.\n */\n protected HTMLIdentifier(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (\n this.currentToken == null ||\n this.currentToken.type === \"Text\" ||\n this.currentToken.type === \"Mustache\"\n ) {\n throw new Error(\"unreachable\")\n }\n if (this.currentToken.type === \"EndTag\") {\n this.reportParseError(token, \"end-tag-with-attributes\")\n return null\n }\n if (this.attributeNames.has(token.value)) {\n this.reportParseError(token, \"duplicate-attribute\")\n }\n this.attributeNames.add(token.value)\n\n this.attribute = {\n type: \"VAttribute\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n parent: DUMMY_PARENT,\n directive: false,\n key: {\n type: \"VIdentifier\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n parent: DUMMY_PARENT,\n name: token.value,\n rawName: this.text.slice(token.range[0], token.range[1]),\n },\n value: null,\n }\n this.attribute.key.parent = this.attribute\n\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n this.currentToken.attributes.push(this.attribute)\n\n return null\n }\n\n /**\n * Process a HTMLLiteral token.\n * @param token The token to process.\n */\n protected HTMLLiteral(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (this.attribute != null) {\n this.attribute.range[1] = token.range[1]\n this.attribute.loc.end = token.loc.end\n this.attribute.value = {\n type: \"VLiteral\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n parent: this.attribute,\n value: token.value,\n }\n\n if (\n this.currentToken == null ||\n this.currentToken.type !== \"StartTag\"\n ) {\n throw new Error(\"unreachable\")\n }\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n }\n\n return null\n }\n\n /**\n * Process a HTMLRCDataText token.\n * @param token The token to process.\n */\n protected HTMLRCDataText(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a HTMLRawText token.\n * @param token The token to process.\n */\n protected HTMLRawText(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a HTMLSelfClosingTagClose token.\n * @param token The token to process.\n */\n protected HTMLSelfClosingTagClose(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (this.currentToken == null || this.currentToken.type === \"Text\") {\n throw new Error(\"unreachable\")\n }\n\n if (this.currentToken.type === \"StartTag\") {\n this.currentToken.selfClosing = true\n } else {\n this.reportParseError(token, \"end-tag-with-trailing-solidus\")\n }\n\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n\n return this.commit()\n }\n\n /**\n * Process a HTMLTagClose token.\n * @param token The token to process.\n */\n protected HTMLTagClose(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (this.currentToken == null || this.currentToken.type === \"Text\") {\n throw new Error(\"unreachable\")\n }\n\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n\n return this.commit()\n }\n\n /**\n * Process a HTMLTagOpen token.\n * @param token The token to process.\n */\n protected HTMLTagOpen(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n let result: IntermediateToken | null = null\n\n if (this.currentToken != null || this.expressionStartToken != null) {\n result = this.commit()\n }\n\n this.currentToken = {\n type: \"StartTag\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n name: token.value,\n rawName: this.text.slice(token.range[0] + 1, token.range[1]),\n selfClosing: false,\n attributes: [],\n }\n this.attribute = null\n this.attributeNames.clear()\n\n return result\n }\n\n /**\n * Process a HTMLText token.\n * @param token The token to process.\n */\n protected HTMLText(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a HTMLWhitespace token.\n * @param token The token to process.\n */\n protected HTMLWhitespace(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a VExpressionStart token.\n * @param token The token to process.\n */\n protected VExpressionStart(token: Token): IntermediateToken | null {\n if (this.expressionStartToken != null) {\n return this.processText(token)\n }\n const separated =\n this.currentToken != null &&\n this.currentToken.range[1] !== token.range[0]\n const result = separated ? this.commit() : null\n\n this.tokens.push(token)\n this.expressionStartToken = token\n\n return result\n }\n\n /**\n * Process a VExpressionEnd token.\n * @param token The token to process.\n */\n protected VExpressionEnd(token: Token): IntermediateToken | null {\n if (this.expressionStartToken == null) {\n return this.processText(token)\n }\n\n const start = this.expressionStartToken\n const end = this.expressionTokens.at(-1) || start\n\n // If it's '{{}}', it's handled as a text.\n if (token.range[0] === start.range[1]) {\n this.tokens.pop()\n this.expressionStartToken = null\n const result = this.processText(start)\n this.processText(token)\n return result\n }\n\n // If invalid notation `</>` exists directly before this token, separate it.\n if (end.range[1] !== token.range[0]) {\n const result = this.commit()\n this.processText(token)\n return result\n }\n\n // Clear state.\n const value = this.expressionTokens.reduce(concat, \"\")\n this.tokens.push(token)\n this.expressionStartToken = null\n this.expressionTokens = []\n\n // Create token.\n const result = this.currentToken != null ? this.commit() : null\n this.currentToken = {\n type: \"Mustache\",\n range: [start.range[0], token.range[1]],\n loc: { start: start.loc.start, end: token.loc.end },\n value,\n startToken: start,\n endToken: token,\n }\n\n return result || this.commit()\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport assert from \"assert\"\nimport type {\n ErrorCode,\n HasLocation,\n Namespace,\n Token,\n VAttribute,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VLiteral,\n} from \"../ast/index\"\nimport { NS, ParseError } from \"../ast/index\"\nimport { debug } from \"../common/debug\"\nimport { LocationCalculatorForHtml } from \"../common/location-calculator\"\nimport {\n convertToDirective,\n processMustache,\n resolveReferences,\n} from \"../template/index\"\nimport {\n MATHML_ATTRIBUTE_NAME_MAP,\n SVG_ATTRIBUTE_NAME_MAP,\n} from \"./util/attribute-names\"\nimport {\n HTML_CAN_BE_LEFT_OPEN_TAGS,\n HTML_NON_FHRASING_TAGS,\n HTML_RAWTEXT_TAGS,\n HTML_RCDATA_TAGS,\n HTML_VOID_ELEMENT_TAGS,\n SVG_ELEMENT_NAME_MAP,\n} from \"./util/tag-names\"\nimport type {\n IntermediateToken,\n EndTag,\n Mustache,\n StartTag,\n Text,\n} from \"./intermediate-tokenizer\"\nimport { IntermediateTokenizer } from \"./intermediate-tokenizer\"\nimport type { Tokenizer } from \"./tokenizer\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport {\n isSFCFile,\n getScriptParser,\n getParserLangFromSFC,\n} from \"../common/parser-options\"\nimport { sortedIndexBy, sortedLastIndexBy } from \"../utils/utils\"\nimport type {\n CustomTemplateTokenizer,\n CustomTemplateTokenizerConstructor,\n} from \"./custom-tokenizer\"\nimport { isScriptSetupElement, isTSLang } from \"../common/ast-utils\"\n\nconst DIRECTIVE_NAME = /^(?:v-|[.:@#]).*[^.:@#]$/u\nconst DT_DD = /^d[dt]$/u\nconst DUMMY_PARENT: any = Object.freeze({})\n\n/**\n * Gets the tag name from the given node or token.\n * For SFC, it returns the value of `rawName` to be case sensitive.\n */\nfunction getTagName(\n startTagOrElement: { name: string; rawName: string },\n isSFC: boolean,\n) {\n return isSFC ? startTagOrElement.rawName : startTagOrElement.name\n}\n\n/**\n * Check whether the element is a MathML text integration point or not.\n * @see https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n * @param element The current element.\n * @param isSFC For SFC, give `true`.\n * @returns `true` if the element is a MathML text integration point.\n */\nfunction isMathMLIntegrationPoint(element: VElement, isSFC: boolean): boolean {\n if (element.namespace === NS.MathML) {\n const name = getTagName(element, isSFC)\n return (\n name === \"mi\" ||\n name === \"mo\" ||\n name === \"mn\" ||\n name === \"ms\" ||\n name === \"mtext\"\n )\n }\n return false\n}\n\n/**\n * Check whether the element is a HTML integration point or not.\n * @see https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n * @param element The current element.\n * @param isSFC For SFC, give `true`.\n * @returns `true` if the element is a HTML integration point.\n */\nfunction isHTMLIntegrationPoint(element: VElement, isSFC: boolean): boolean {\n if (element.namespace === NS.MathML) {\n return (\n getTagName(element, isSFC) === \"annotation-xml\" &&\n element.startTag.attributes.some(\n (a) =>\n a.directive === false &&\n a.key.name === \"encoding\" &&\n a.value != null &&\n (a.value.value === \"text/html\" ||\n a.value.value === \"application/xhtml+xml\"),\n )\n )\n }\n if (element.namespace === NS.SVG) {\n const name = getTagName(element, isSFC)\n return name === \"foreignObject\" || name === \"desc\" || name === \"title\"\n }\n\n return false\n}\n\n/**\n * Adjust element names by the current namespace.\n * @param name The lowercase element name to adjust.\n * @param namespace The current namespace.\n * @returns The adjusted element name.\n */\nfunction adjustElementName(name: string, namespace: Namespace): string {\n if (namespace === NS.SVG) {\n return SVG_ELEMENT_NAME_MAP.get(name) || name\n }\n return name\n}\n\n/**\n * Adjust attribute names by the current namespace.\n * @param name The lowercase attribute name to adjust.\n * @param namespace The current namespace.\n * @returns The adjusted attribute name.\n */\nfunction adjustAttributeName(name: string, namespace: Namespace): string {\n if (namespace === NS.SVG) {\n return SVG_ATTRIBUTE_NAME_MAP.get(name) || name\n }\n if (namespace === NS.MathML) {\n return MATHML_ATTRIBUTE_NAME_MAP.get(name) || name\n }\n return name\n}\n\n/**\n * Set the location of the last child node to the end location of the given node.\n * @param node The node to commit the end location.\n */\nfunction propagateEndLocation(node: VDocumentFragment | VElement): void {\n const lastChild =\n (node.type === \"VElement\" ? node.endTag : null) || node.children.at(-1)\n if (lastChild != null) {\n node.range[1] = lastChild.range[1]\n node.loc.end = lastChild.loc.end\n }\n}\n\n/**\n * The parser of HTML.\n * This is not following to the HTML spec completely because Vue.js template spec is pretty different to HTML.\n */\nexport class Parser {\n private tokenizer: IntermediateTokenizer | CustomTemplateTokenizer\n private locationCalculator: LocationCalculatorForHtml\n private baseParserOptions: ParserOptions\n private isSFC: boolean\n private document: VDocumentFragment\n private elementStack: VElement[]\n private vPreElement: VElement | null\n private postProcessesForScript: ((\n htmlParserOptions: ParserOptions,\n scriptParserOptions: ParserOptions,\n ) => void)[] = []\n\n /**\n * The source code text.\n */\n private get text(): string {\n return this.tokenizer.text\n }\n\n /**\n * The tokens.\n */\n private get tokens(): Token[] {\n return this.tokenizer.tokens\n }\n\n /**\n * The comments.\n */\n private get comments(): Token[] {\n return this.tokenizer.comments\n }\n\n /**\n * The syntax errors which are found in this parsing.\n */\n private get errors(): ParseError[] {\n return this.tokenizer.errors\n }\n\n /**\n * The current namespace.\n */\n private get namespace(): Namespace {\n return this.tokenizer.namespace\n }\n private set namespace(value: Namespace) {\n this.tokenizer.namespace = value\n }\n\n /**\n * The current flag of expression enabled.\n */\n private get expressionEnabled(): boolean {\n return this.tokenizer.expressionEnabled\n }\n private set expressionEnabled(value: boolean) {\n this.tokenizer.expressionEnabled = value\n }\n\n /**\n * Get the current node.\n */\n private get currentNode(): VDocumentFragment | VElement {\n return this.elementStack.at(-1) || this.document\n }\n\n /**\n * Check if the current location is in a v-pre element.\n */\n private get isInVPreElement(): boolean {\n return this.vPreElement != null\n }\n\n /**\n * Initialize this parser.\n * @param tokenizer The tokenizer to parse.\n * @param parserOptions The parser options to parse inline expressions.\n */\n public constructor(tokenizer: Tokenizer, parserOptions: ParserOptions) {\n this.tokenizer = new IntermediateTokenizer(tokenizer)\n this.locationCalculator = new LocationCalculatorForHtml(\n tokenizer.gaps,\n tokenizer.lineTerminators,\n )\n this.baseParserOptions = parserOptions\n this.isSFC = isSFCFile(parserOptions)\n this.document = {\n type: \"VDocumentFragment\",\n range: [0, 0],\n loc: {\n start: { line: 1, column: 0 },\n end: { line: 1, column: 0 },\n },\n parent: null,\n children: [],\n tokens: this.tokens,\n comments: this.comments,\n errors: this.errors,\n }\n this.elementStack = []\n this.vPreElement = null\n\n this.postProcessesForScript = []\n }\n\n /**\n * Parse the HTML which was given in this constructor.\n * @returns The result of parsing.\n */\n public parse(): VDocumentFragment {\n let token: IntermediateToken | null = null\n while ((token = this.tokenizer.nextToken()) != null) {\n ;(this as any)[token.type](token)\n }\n\n this.popElementStackUntil(0)\n propagateEndLocation(this.document)\n\n const doc = this.document\n\n const htmlParserOptions = {\n ...this.baseParserOptions,\n parser: getScriptParser(\n this.baseParserOptions.parser,\n function* () {\n yield \"<template>\"\n yield getParserLangFromSFC(doc)\n },\n ),\n project: undefined,\n projectService: undefined,\n }\n const scriptParserOptions = {\n ...this.baseParserOptions,\n parser: getScriptParser(this.baseParserOptions.parser, () =>\n getParserLangFromSFC(doc),\n ),\n }\n for (const proc of this.postProcessesForScript) {\n proc(htmlParserOptions, scriptParserOptions)\n }\n this.postProcessesForScript = []\n\n return doc\n }\n\n /**\n * Report an invalid character error.\n * @param code The error code.\n */\n private reportParseError(token: HasLocation, code: ErrorCode): void {\n const error = ParseError.fromCode(\n code,\n token.range[0],\n token.loc.start.line,\n token.loc.start.column,\n )\n this.errors.push(error)\n\n debug(\"[html] syntax error:\", error.message)\n }\n\n /**\n * Pop an element from the current element stack.\n */\n private popElementStack(): void {\n assert(this.elementStack.length >= 1)\n\n const element = this.elementStack.pop()!\n propagateEndLocation(element)\n\n // Update the current namespace.\n const current = this.currentNode\n this.namespace =\n current.type === \"VElement\" ? current.namespace : NS.HTML\n\n // Update v-pre state.\n if (this.vPreElement === element) {\n this.vPreElement = null\n this.expressionEnabled = true\n }\n\n // Update expression flag.\n if (this.elementStack.length === 0) {\n this.expressionEnabled = false\n }\n }\n\n /**\n * Pop elements from the current element stack.\n * @param index The index of the element you want to pop.\n */\n private popElementStackUntil(index: number): void {\n while (this.elementStack.length > index) {\n this.popElementStack()\n }\n }\n\n /**\n * Gets the tag name from the given node or token.\n * For SFC, it returns the value of `rawName` to be case sensitive.\n */\n private getTagName(startTagOrElement: { name: string; rawName: string }) {\n return getTagName(startTagOrElement, this.isSFC)\n }\n\n /**\n * Detect the namespace of the new element.\n * @param token The StartTag token to detect.\n * @returns The namespace of the new element.\n */\n //eslint-disable-next-line complexity\n private detectNamespace(token: StartTag): Namespace {\n const name = this.getTagName(token)\n let ns = this.namespace\n\n if (ns === NS.MathML || ns === NS.SVG) {\n const element = this.currentNode\n if (element.type === \"VElement\") {\n if (\n element.namespace === NS.MathML &&\n this.getTagName(element) === \"annotation-xml\" &&\n name === \"svg\"\n ) {\n return NS.SVG\n }\n if (\n isHTMLIntegrationPoint(element, this.isSFC) ||\n (isMathMLIntegrationPoint(element, this.isSFC) &&\n name !== \"mglyph\" &&\n name !== \"malignmark\")\n ) {\n ns = NS.HTML\n }\n }\n }\n\n if (ns === NS.HTML) {\n if (name === \"svg\") {\n return NS.SVG\n }\n if (name === \"math\") {\n return NS.MathML\n }\n }\n\n if (name === \"template\") {\n const xmlns = token.attributes.find((a) => a.key.name === \"xmlns\")\n const value = xmlns?.value?.value\n\n if (value === NS.HTML || value === NS.MathML || value === NS.SVG) {\n return value\n }\n }\n\n return ns\n }\n\n /**\n * Close the current element if necessary.\n * @param token The start tag to check.\n */\n private closeCurrentElementIfNecessary(token: StartTag): void {\n const element = this.currentNode\n if (element.type !== \"VElement\") {\n return\n }\n const name = this.getTagName(token)\n const elementName = this.getTagName(element)\n\n if (elementName === \"p\" && HTML_NON_FHRASING_TAGS.has(name)) {\n this.popElementStack()\n }\n if (elementName === name && HTML_CAN_BE_LEFT_OPEN_TAGS.has(name)) {\n this.popElementStack()\n }\n if (DT_DD.test(elementName) && DT_DD.test(name)) {\n this.popElementStack()\n }\n }\n\n /**\n * Adjust and validate the given attribute node.\n * @param node The attribute node to handle.\n * @param namespace The current namespace.\n */\n private processAttribute(node: VAttribute, namespace: Namespace): void {\n if (this.needConvertToDirective(node)) {\n this.postProcessesForScript.push(\n (parserOptions, scriptParserOptions) => {\n convertToDirective(\n this.text,\n parserOptions,\n scriptParserOptions,\n this.locationCalculator,\n node,\n )\n },\n )\n return\n }\n\n node.key.name = adjustAttributeName(node.key.name, namespace)\n const key = this.getTagName(node.key)\n const value = node.value?.value\n\n if (key === \"xmlns\" && value !== namespace) {\n this.reportParseError(node, \"x-invalid-namespace\")\n } else if (key === \"xmlns:xlink\" && value !== NS.XLink) {\n this.reportParseError(node, \"x-invalid-namespace\")\n }\n }\n /**\n * Checks whether the given attribute node is need convert to directive.\n * @param node The node to check\n */\n private needConvertToDirective(node: VAttribute) {\n const element = node.parent.parent\n const tagName = this.getTagName(element)\n const attrName = this.getTagName(node.key)\n\n if (\n attrName === \"generic\" &&\n element.parent.type === \"VDocumentFragment\" &&\n isScriptSetupElement(element) &&\n isTSLang(element)\n ) {\n return true\n }\n const expressionEnabled =\n this.expressionEnabled ||\n (attrName === \"v-pre\" && !this.isInVPreElement)\n if (!expressionEnabled) {\n return false\n }\n return (\n DIRECTIVE_NAME.test(attrName) ||\n attrName === \"slot-scope\" ||\n (tagName === \"template\" && attrName === \"scope\")\n )\n }\n\n /**\n * Process the given template text token with a configured template tokenizer, based on language.\n * @param token The template text token to process.\n * @param templateTokenizerOption The template tokenizer option.\n */\n private processTemplateText(\n token: Text,\n templateTokenizerOption: string | CustomTemplateTokenizerConstructor,\n ): void {\n const TemplateTokenizer: CustomTemplateTokenizerConstructor =\n typeof templateTokenizerOption === \"function\"\n ? templateTokenizerOption\n : // eslint-disable-next-line @typescript-eslint/no-require-imports\n require(templateTokenizerOption)\n const templateTokenizer = new TemplateTokenizer(\n token.value,\n this.text,\n {\n startingLine: token.loc.start.line,\n startingColumn: token.loc.start.column,\n },\n )\n\n // override this.tokenizer to forward expressionEnabled and state changes\n const rootTokenizer = this.tokenizer\n this.tokenizer = templateTokenizer\n\n let templateToken: IntermediateToken | null = null\n while ((templateToken = templateTokenizer.nextToken()) != null) {\n ;(this as any)[templateToken.type](templateToken)\n }\n\n this.tokenizer = rootTokenizer\n\n const index = sortedIndexBy(\n this.tokenizer.tokens,\n token,\n (x) => x.range[0],\n )\n const count =\n sortedLastIndexBy(this.tokenizer.tokens, token, (x) => x.range[1]) -\n index\n this.tokenizer.tokens.splice(index, count, ...templateTokenizer.tokens)\n this.tokenizer.comments.push(...templateTokenizer.comments)\n this.tokenizer.errors.push(...templateTokenizer.errors)\n }\n\n /**\n * Handle the start tag token.\n * @param token The token to handle.\n */\n //eslint-disable-next-line complexity\n protected StartTag(token: StartTag): void {\n debug(\"[html] StartTag %j\", token)\n\n this.closeCurrentElementIfNecessary(token)\n\n const parent = this.currentNode\n const namespace = this.detectNamespace(token)\n const element: VElement = {\n type: \"VElement\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n parent,\n name: adjustElementName(token.name, namespace),\n rawName: token.rawName,\n namespace,\n startTag: {\n type: \"VStartTag\",\n range: token.range,\n loc: token.loc,\n parent: DUMMY_PARENT,\n selfClosing: token.selfClosing,\n attributes: token.attributes,\n },\n children: [],\n endTag: null,\n variables: [],\n }\n const hasVPre =\n !this.isInVPreElement &&\n token.attributes.some((a) => this.getTagName(a.key) === \"v-pre\")\n\n // Disable expression if v-pre\n if (hasVPre) {\n this.expressionEnabled = false\n }\n\n // Setup relations.\n parent.children.push(element)\n element.startTag.parent = element\n for (const attribute of token.attributes) {\n attribute.parent = element.startTag\n this.processAttribute(attribute, namespace)\n }\n\n // Resolve references.\n this.postProcessesForScript.push(() => {\n for (const attribute of element.startTag.attributes) {\n if (attribute.directive) {\n if (\n attribute.key.argument?.type === \"VExpressionContainer\"\n ) {\n resolveReferences(attribute.key.argument)\n }\n if (attribute.value != null) {\n resolveReferences(attribute.value)\n }\n }\n }\n })\n\n // Check whether the self-closing is valid.\n const isVoid =\n namespace === NS.HTML &&\n HTML_VOID_ELEMENT_TAGS.has(this.getTagName(element))\n if (token.selfClosing && !isVoid && namespace === NS.HTML) {\n this.reportParseError(\n token,\n \"non-void-html-element-start-tag-with-trailing-solidus\",\n )\n }\n\n // Vue.js supports self-closing elements even if it's not one of void elements.\n if (token.selfClosing || isVoid) {\n this.expressionEnabled = !this.isInVPreElement\n return\n }\n\n // Push to stack.\n this.elementStack.push(element)\n if (hasVPre) {\n assert(this.vPreElement === null)\n this.vPreElement = element\n }\n this.namespace = namespace\n\n // Update the content type of this element.\n if (namespace === NS.HTML) {\n const elementName = this.getTagName(element)\n if (element.parent.type === \"VDocumentFragment\") {\n const langAttr = element.startTag.attributes.find(\n (a) => !a.directive && a.key.name === \"lang\",\n ) as VAttribute | undefined\n const lang = langAttr?.value?.value\n\n if (elementName === \"template\") {\n this.expressionEnabled = true\n if (lang && lang !== \"html\") {\n // It is not an HTML template.\n this.tokenizer.state = \"RAWTEXT\"\n this.expressionEnabled = false\n }\n } else if (this.isSFC) {\n // Element is Custom Block. e.g. <i18n>\n // Referred to the Vue parser. See https://github.com/vuejs/vue-next/blob/cbaa3805064cb581fc2007cf63774c91d39844fe/packages/compiler-sfc/src/parse.ts#L127\n if (!lang || lang !== \"html\") {\n // Custom Block is not HTML.\n this.tokenizer.state = \"RAWTEXT\"\n }\n } else {\n if (HTML_RCDATA_TAGS.has(elementName)) {\n this.tokenizer.state = \"RCDATA\"\n }\n if (HTML_RAWTEXT_TAGS.has(elementName)) {\n this.tokenizer.state = \"RAWTEXT\"\n }\n }\n } else {\n if (HTML_RCDATA_TAGS.has(elementName)) {\n this.tokenizer.state = \"RCDATA\"\n }\n if (HTML_RAWTEXT_TAGS.has(elementName)) {\n this.tokenizer.state = \"RAWTEXT\"\n }\n }\n }\n }\n\n /**\n * Handle the end tag token.\n * @param token The token to handle.\n */\n protected EndTag(token: EndTag): void {\n debug(\"[html] EndTag %j\", token)\n\n const i = this.elementStack.findLastIndex(\n (el) => el.name.toLowerCase() === token.name,\n )\n if (i === -1) {\n this.reportParseError(token, \"x-invalid-end-tag\")\n return\n }\n\n const element = this.elementStack[i]\n element.endTag = {\n type: \"VEndTag\",\n range: token.range,\n loc: token.loc,\n parent: element,\n }\n\n this.popElementStackUntil(i)\n }\n\n /**\n * Handle the text token.\n * @param token The token to handle.\n */\n protected Text(token: Text): void {\n debug(\"[html] Text %j\", token)\n const parent = this.currentNode\n if (\n token.value &&\n parent.type === \"VElement\" &&\n parent.name === \"template\" &&\n parent.parent.type === \"VDocumentFragment\"\n ) {\n const langAttribute = parent.startTag.attributes.find(\n (a) => a.key.name === \"lang\",\n )\n const lang = (langAttribute?.value as VLiteral)?.value\n if (lang && lang !== \"html\") {\n const templateTokenizerOption =\n this.baseParserOptions.templateTokenizer?.[lang]\n if (templateTokenizerOption) {\n this.processTemplateText(token, templateTokenizerOption)\n return\n }\n }\n }\n parent.children.push({\n type: \"VText\",\n range: token.range,\n loc: token.loc,\n parent,\n value: token.value,\n })\n }\n\n /**\n * Handle the text token.\n * @param token The token to handle.\n */\n protected Mustache(token: Mustache): void {\n debug(\"[html] Mustache %j\", token)\n\n const parent = this.currentNode\n const container: VExpressionContainer = {\n type: \"VExpressionContainer\",\n range: token.range,\n loc: token.loc,\n parent,\n expression: null,\n references: [],\n }\n // Set relationship.\n parent.children.push(container)\n\n this.postProcessesForScript.push((parserOptions) => {\n processMustache(\n parserOptions,\n this.locationCalculator,\n container,\n token,\n )\n // Resolve references.\n resolveReferences(container)\n })\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * Code mapping of HTML numeric entities.\n */\nexport const alternativeCR = new Map(\n [[128, 8364], [130, 8218], [131, 402], [132, 8222], [133, 8230], [134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249], [140, 338], [142, 381], [145, 8216], [146, 8217], [147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732], [153, 8482], [154, 353], [155, 8250], [156, 339], [158, 382], [159, 376]]\n)\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * HTML entities which are separated by their length.\n */\nexport const entitySets: {\n length: number,\n entities: {\n [name: string]: number[] | undefined\n }\n}[] = [{\"length\":32,\"entities\":{\"CounterClockwiseContourIntegral;\":[8755]}},{\"length\":25,\"entities\":{\"ClockwiseContourIntegral;\":[8754],\"DoubleLongLeftRightArrow;\":[10234]}},{\"length\":24,\"entities\":{\"NotNestedGreaterGreater;\":[10914,824]}},{\"length\":23,\"entities\":{\"DiacriticalDoubleAcute;\":[733],\"NotSquareSupersetEqual;\":[8931]}},{\"length\":22,\"entities\":{\"CloseCurlyDoubleQuote;\":[8221],\"DoubleContourIntegral;\":[8751],\"FilledVerySmallSquare;\":[9642],\"NegativeVeryThinSpace;\":[8203],\"NotPrecedesSlantEqual;\":[8928],\"NotRightTriangleEqual;\":[8941],\"NotSucceedsSlantEqual;\":[8929]}},{\"length\":21,\"entities\":{\"CapitalDifferentialD;\":[8517],\"DoubleLeftRightArrow;\":[8660],\"DoubleLongRightArrow;\":[10233],\"EmptyVerySmallSquare;\":[9643],\"NestedGreaterGreater;\":[8811],\"NotDoubleVerticalBar;\":[8742],\"NotGreaterSlantEqual;\":[10878,824],\"NotLeftTriangleEqual;\":[8940],\"NotSquareSubsetEqual;\":[8930],\"OpenCurlyDoubleQuote;\":[8220],\"ReverseUpEquilibrium;\":[10607]}},{\"length\":20,\"entities\":{\"DoubleLongLeftArrow;\":[10232],\"DownLeftRightVector;\":[10576],\"LeftArrowRightArrow;\":[8646],\"NegativeMediumSpace;\":[8203],\"NotGreaterFullEqual;\":[8807,824],\"NotRightTriangleBar;\":[10704,824],\"RightArrowLeftArrow;\":[8644],\"SquareSupersetEqual;\":[8850],\"leftrightsquigarrow;\":[8621]}},{\"length\":19,\"entities\":{\"DownRightTeeVector;\":[10591],\"DownRightVectorBar;\":[10583],\"LongLeftRightArrow;\":[10231],\"Longleftrightarrow;\":[10234],\"NegativeThickSpace;\":[8203],\"NotLeftTriangleBar;\":[10703,824],\"PrecedesSlantEqual;\":[8828],\"ReverseEquilibrium;\":[8651],\"RightDoubleBracket;\":[10215],\"RightDownTeeVector;\":[10589],\"RightDownVectorBar;\":[10581],\"RightTriangleEqual;\":[8885],\"SquareIntersection;\":[8851],\"SucceedsSlantEqual;\":[8829],\"blacktriangleright;\":[9656],\"longleftrightarrow;\":[10231]}},{\"length\":18,\"entities\":{\"DoubleUpDownArrow;\":[8661],\"DoubleVerticalBar;\":[8741],\"DownLeftTeeVector;\":[10590],\"DownLeftVectorBar;\":[10582],\"FilledSmallSquare;\":[9724],\"GreaterSlantEqual;\":[10878],\"LeftDoubleBracket;\":[10214],\"LeftDownTeeVector;\":[10593],\"LeftDownVectorBar;\":[10585],\"LeftTriangleEqual;\":[8884],\"NegativeThinSpace;\":[8203],\"NotGreaterGreater;\":[8811,824],\"NotLessSlantEqual;\":[10877,824],\"NotNestedLessLess;\":[10913,824],\"NotReverseElement;\":[8716],\"NotSquareSuperset;\":[8848,824],\"NotTildeFullEqual;\":[8775],\"RightAngleBracket;\":[10217],\"RightUpDownVector;\":[10575],\"SquareSubsetEqual;\":[8849],\"VerticalSeparator;\":[10072],\"blacktriangledown;\":[9662],\"blacktriangleleft;\":[9666],\"leftrightharpoons;\":[8651],\"rightleftharpoons;\":[8652],\"twoheadrightarrow;\":[8608]}},{\"length\":17,\"entities\":{\"DiacriticalAcute;\":[180],\"DiacriticalGrave;\":[96],\"DiacriticalTilde;\":[732],\"DoubleRightArrow;\":[8658],\"DownArrowUpArrow;\":[8693],\"EmptySmallSquare;\":[9723],\"GreaterEqualLess;\":[8923],\"GreaterFullEqual;\":[8807],\"LeftAngleBracket;\":[10216],\"LeftUpDownVector;\":[10577],\"LessEqualGreater;\":[8922],\"NonBreakingSpace;\":[160],\"NotPrecedesEqual;\":[10927,824],\"NotRightTriangle;\":[8939],\"NotSucceedsEqual;\":[10928,824],\"NotSucceedsTilde;\":[8831,824],\"NotSupersetEqual;\":[8841],\"RightTriangleBar;\":[10704],\"RightUpTeeVector;\":[10588],\"RightUpVectorBar;\":[10580],\"UnderParenthesis;\":[9181],\"UpArrowDownArrow;\":[8645],\"circlearrowright;\":[8635],\"downharpoonright;\":[8642],\"ntrianglerighteq;\":[8941],\"rightharpoondown;\":[8641],\"rightrightarrows;\":[8649],\"twoheadleftarrow;\":[8606],\"vartriangleright;\":[8883]}},{\"length\":16,\"entities\":{\"CloseCurlyQuote;\":[8217],\"ContourIntegral;\":[8750],\"DoubleDownArrow;\":[8659],\"DoubleLeftArrow;\":[8656],\"DownRightVector;\":[8641],\"LeftRightVector;\":[10574],\"LeftTriangleBar;\":[10703],\"LeftUpTeeVector;\":[10592],\"LeftUpVectorBar;\":[10584],\"LowerRightArrow;\":[8600],\"NotGreaterEqual;\":[8817],\"NotGreaterTilde;\":[8821],\"NotHumpDownHump;\":[8782,824],\"NotLeftTriangle;\":[8938],\"NotSquareSubset;\":[8847,824],\"OverParenthesis;\":[9180],\"RightDownVector;\":[8642],\"ShortRightArrow;\":[8594],\"UpperRightArrow;\":[8599],\"bigtriangledown;\":[9661],\"circlearrowleft;\":[8634],\"curvearrowright;\":[8631],\"downharpoonleft;\":[8643],\"leftharpoondown;\":[8637],\"leftrightarrows;\":[8646],\"nLeftrightarrow;\":[8654],\"nleftrightarrow;\":[8622],\"ntrianglelefteq;\":[8940],\"rightleftarrows;\":[8644],\"rightsquigarrow;\":[8605],\"rightthreetimes;\":[8908],\"straightepsilon;\":[1013],\"trianglerighteq;\":[8885],\"vartriangleleft;\":[8882]}},{\"length\":15,\"entities\":{\"DiacriticalDot;\":[729],\"DoubleRightTee;\":[8872],\"DownLeftVector;\":[8637],\"GreaterGreater;\":[10914],\"HorizontalLine;\":[9472],\"InvisibleComma;\":[8291],\"InvisibleTimes;\":[8290],\"LeftDownVector;\":[8643],\"LeftRightArrow;\":[8596],\"Leftrightarrow;\":[8660],\"LessSlantEqual;\":[10877],\"LongRightArrow;\":[10230],\"Longrightarrow;\":[10233],\"LowerLeftArrow;\":[8601],\"NestedLessLess;\":[8810],\"NotGreaterLess;\":[8825],\"NotLessGreater;\":[8824],\"NotSubsetEqual;\":[8840],\"NotVerticalBar;\":[8740],\"OpenCurlyQuote;\":[8216],\"ReverseElement;\":[8715],\"RightTeeVector;\":[10587],\"RightVectorBar;\":[10579],\"ShortDownArrow;\":[8595],\"ShortLeftArrow;\":[8592],\"SquareSuperset;\":[8848],\"TildeFullEqual;\":[8773],\"UpperLeftArrow;\":[8598],\"ZeroWidthSpace;\":[8203],\"curvearrowleft;\":[8630],\"doublebarwedge;\":[8966],\"downdownarrows;\":[8650],\"hookrightarrow;\":[8618],\"leftleftarrows;\":[8647],\"leftrightarrow;\":[8596],\"leftthreetimes;\":[8907],\"longrightarrow;\":[10230],\"looparrowright;\":[8620],\"nshortparallel;\":[8742],\"ntriangleright;\":[8939],\"rightarrowtail;\":[8611],\"rightharpoonup;\":[8640],\"trianglelefteq;\":[8884],\"upharpoonright;\":[8638]}},{\"length\":14,\"entities\":{\"ApplyFunction;\":[8289],\"DifferentialD;\":[8518],\"DoubleLeftTee;\":[10980],\"DoubleUpArrow;\":[8657],\"LeftTeeVector;\":[10586],\"LeftVectorBar;\":[10578],\"LessFullEqual;\":[8806],\"LongLeftArrow;\":[10229],\"Longleftarrow;\":[10232],\"NotEqualTilde;\":[8770,824],\"NotTildeEqual;\":[8772],\"NotTildeTilde;\":[8777],\"Poincareplane;\":[8460],\"PrecedesEqual;\":[10927],\"PrecedesTilde;\":[8830],\"RightArrowBar;\":[8677],\"RightTeeArrow;\":[8614],\"RightTriangle;\":[8883],\"RightUpVector;\":[8638],\"SucceedsEqual;\":[10928],\"SucceedsTilde;\":[8831],\"SupersetEqual;\":[8839],\"UpEquilibrium;\":[10606],\"VerticalTilde;\":[8768],\"VeryThinSpace;\":[8202],\"bigtriangleup;\":[9651],\"blacktriangle;\":[9652],\"divideontimes;\":[8903],\"fallingdotseq;\":[8786],\"hookleftarrow;\":[8617],\"leftarrowtail;\":[8610],\"leftharpoonup;\":[8636],\"longleftarrow;\":[10229],\"looparrowleft;\":[8619],\"measuredangle;\":[8737],\"ntriangleleft;\":[8938],\"shortparallel;\":[8741],\"smallsetminus;\":[8726],\"triangleright;\":[9657],\"upharpoonleft;\":[8639],\"varsubsetneqq;\":[10955,65024],\"varsupsetneqq;\":[10956,65024]}},{\"length\":13,\"entities\":{\"DownArrowBar;\":[10515],\"DownTeeArrow;\":[8615],\"ExponentialE;\":[8519],\"GreaterEqual;\":[8805],\"GreaterTilde;\":[8819],\"HilbertSpace;\":[8459],\"HumpDownHump;\":[8782],\"Intersection;\":[8898],\"LeftArrowBar;\":[8676],\"LeftTeeArrow;\":[8612],\"LeftTriangle;\":[8882],\"LeftUpVector;\":[8639],\"NotCongruent;\":[8802],\"NotHumpEqual;\":[8783,824],\"NotLessEqual;\":[8816],\"NotLessTilde;\":[8820],\"Proportional;\":[8733],\"RightCeiling;\":[8969],\"RoundImplies;\":[10608],\"ShortUpArrow;\":[8593],\"SquareSubset;\":[8847],\"UnderBracket;\":[9141],\"VerticalLine;\":[124],\"blacklozenge;\":[10731],\"exponentiale;\":[8519],\"risingdotseq;\":[8787],\"triangledown;\":[9663],\"triangleleft;\":[9667],\"varsubsetneq;\":[8842,65024],\"varsupsetneq;\":[8843,65024]}},{\"length\":12,\"entities\":{\"CircleMinus;\":[8854],\"CircleTimes;\":[8855],\"Equilibrium;\":[8652],\"GreaterLess;\":[8823],\"LeftCeiling;\":[8968],\"LessGreater;\":[8822],\"MediumSpace;\":[8287],\"NotLessLess;\":[8810,824],\"NotPrecedes;\":[8832],\"NotSucceeds;\":[8833],\"NotSuperset;\":[8835,8402],\"OverBracket;\":[9140],\"RightVector;\":[8640],\"Rrightarrow;\":[8667],\"RuleDelayed;\":[10740],\"SmallCircle;\":[8728],\"SquareUnion;\":[8852],\"SubsetEqual;\":[8838],\"UpDownArrow;\":[8597],\"Updownarrow;\":[8661],\"VerticalBar;\":[8739],\"backepsilon;\":[1014],\"blacksquare;\":[9642],\"circledcirc;\":[8858],\"circleddash;\":[8861],\"curlyeqprec;\":[8926],\"curlyeqsucc;\":[8927],\"diamondsuit;\":[9830],\"eqslantless;\":[10901],\"expectation;\":[8496],\"nRightarrow;\":[8655],\"nrightarrow;\":[8603],\"preccurlyeq;\":[8828],\"precnapprox;\":[10937],\"quaternions;\":[8461],\"straightphi;\":[981],\"succcurlyeq;\":[8829],\"succnapprox;\":[10938],\"thickapprox;\":[8776],\"updownarrow;\":[8597]}},{\"length\":11,\"entities\":{\"Bernoullis;\":[8492],\"CirclePlus;\":[8853],\"EqualTilde;\":[8770],\"Fouriertrf;\":[8497],\"ImaginaryI;\":[8520],\"Laplacetrf;\":[8466],\"LeftVector;\":[8636],\"Lleftarrow;\":[8666],\"NotElement;\":[8713],\"NotGreater;\":[8815],\"Proportion;\":[8759],\"RightArrow;\":[8594],\"RightFloor;\":[8971],\"Rightarrow;\":[8658],\"ThickSpace;\":[8287,8202],\"TildeEqual;\":[8771],\"TildeTilde;\":[8776],\"UnderBrace;\":[9183],\"UpArrowBar;\":[10514],\"UpTeeArrow;\":[8613],\"circledast;\":[8859],\"complement;\":[8705],\"curlywedge;\":[8911],\"eqslantgtr;\":[10902],\"gtreqqless;\":[10892],\"lessapprox;\":[10885],\"lesseqqgtr;\":[10891],\"lmoustache;\":[9136],\"longmapsto;\":[10236],\"mapstodown;\":[8615],\"mapstoleft;\":[8612],\"nLeftarrow;\":[8653],\"nleftarrow;\":[8602],\"nsubseteqq;\":[10949,824],\"nsupseteqq;\":[10950,824],\"precapprox;\":[10935],\"rightarrow;\":[8594],\"rmoustache;\":[9137],\"sqsubseteq;\":[8849],\"sqsupseteq;\":[8850],\"subsetneqq;\":[10955],\"succapprox;\":[10936],\"supsetneqq;\":[10956],\"upuparrows;\":[8648],\"varepsilon;\":[1013],\"varnothing;\":[8709]}},{\"length\":10,\"entities\":{\"Backslash;\":[8726],\"CenterDot;\":[183],\"CircleDot;\":[8857],\"Congruent;\":[8801],\"Coproduct;\":[8720],\"DoubleDot;\":[168],\"DownArrow;\":[8595],\"DownBreve;\":[785],\"Downarrow;\":[8659],\"HumpEqual;\":[8783],\"LeftArrow;\":[8592],\"LeftFloor;\":[8970],\"Leftarrow;\":[8656],\"LessTilde;\":[8818],\"Mellintrf;\":[8499],\"MinusPlus;\":[8723],\"NotCupCap;\":[8813],\"NotExists;\":[8708],\"NotSubset;\":[8834,8402],\"OverBrace;\":[9182],\"PlusMinus;\":[177],\"Therefore;\":[8756],\"ThinSpace;\":[8201],\"TripleDot;\":[8411],\"UnionPlus;\":[8846],\"backprime;\":[8245],\"backsimeq;\":[8909],\"bigotimes;\":[10754],\"centerdot;\":[183],\"checkmark;\":[10003],\"complexes;\":[8450],\"dotsquare;\":[8865],\"downarrow;\":[8595],\"gtrapprox;\":[10886],\"gtreqless;\":[8923],\"gvertneqq;\":[8809,65024],\"heartsuit;\":[9829],\"leftarrow;\":[8592],\"lesseqgtr;\":[8922],\"lvertneqq;\":[8808,65024],\"ngeqslant;\":[10878,824],\"nleqslant;\":[10877,824],\"nparallel;\":[8742],\"nshortmid;\":[8740],\"nsubseteq;\":[8840],\"nsupseteq;\":[8841],\"pitchfork;\":[8916],\"rationals;\":[8474],\"spadesuit;\":[9824],\"subseteqq;\":[10949],\"subsetneq;\":[8842],\"supseteqq;\":[10950],\"supsetneq;\":[8843],\"therefore;\":[8756],\"triangleq;\":[8796],\"varpropto;\":[8733]}},{\"length\":9,\"entities\":{\"DDotrahd;\":[10513],\"DotEqual;\":[8784],\"Integral;\":[8747],\"LessLess;\":[10913],\"NotEqual;\":[8800],\"NotTilde;\":[8769],\"PartialD;\":[8706],\"Precedes;\":[8826],\"RightTee;\":[8866],\"Succeeds;\":[8827],\"SuchThat;\":[8715],\"Superset;\":[8835],\"Uarrocir;\":[10569],\"UnderBar;\":[95],\"andslope;\":[10840],\"angmsdaa;\":[10664],\"angmsdab;\":[10665],\"angmsdac;\":[10666],\"angmsdad;\":[10667],\"angmsdae;\":[10668],\"angmsdaf;\":[10669],\"angmsdag;\":[10670],\"angmsdah;\":[10671],\"angrtvbd;\":[10653],\"approxeq;\":[8778],\"awconint;\":[8755],\"backcong;\":[8780],\"barwedge;\":[8965],\"bbrktbrk;\":[9142],\"bigoplus;\":[10753],\"bigsqcup;\":[10758],\"biguplus;\":[10756],\"bigwedge;\":[8896],\"boxminus;\":[8863],\"boxtimes;\":[8864],\"bsolhsub;\":[10184],\"capbrcup;\":[10825],\"circledR;\":[174],\"circledS;\":[9416],\"cirfnint;\":[10768],\"clubsuit;\":[9827],\"cupbrcap;\":[10824],\"curlyvee;\":[8910],\"cwconint;\":[8754],\"doteqdot;\":[8785],\"dotminus;\":[8760],\"drbkarow;\":[10512],\"dzigrarr;\":[10239],\"elinters;\":[9191],\"emptyset;\":[8709],\"eqvparsl;\":[10725],\"fpartint;\":[10765],\"geqslant;\":[10878],\"gesdotol;\":[10884],\"gnapprox;\":[10890],\"hksearow;\":[10533],\"hkswarow;\":[10534],\"imagline;\":[8464],\"imagpart;\":[8465],\"infintie;\":[10717],\"integers;\":[8484],\"intercal;\":[8890],\"intlarhk;\":[10775],\"laemptyv;\":[10676],\"ldrushar;\":[10571],\"leqslant;\":[10877],\"lesdotor;\":[10883],\"llcorner;\":[8990],\"lnapprox;\":[10889],\"lrcorner;\":[8991],\"lurdshar;\":[10570],\"mapstoup;\":[8613],\"multimap;\":[8888],\"naturals;\":[8469],\"ncongdot;\":[10861,824],\"notindot;\":[8949,824],\"otimesas;\":[10806],\"parallel;\":[8741],\"plusacir;\":[10787],\"pointint;\":[10773],\"precneqq;\":[10933],\"precnsim;\":[8936],\"profalar;\":[9006],\"profline;\":[8978],\"profsurf;\":[8979],\"raemptyv;\":[10675],\"realpart;\":[8476],\"rppolint;\":[10770],\"rtriltri;\":[10702],\"scpolint;\":[10771],\"setminus;\":[8726],\"shortmid;\":[8739],\"smeparsl;\":[10724],\"sqsubset;\":[8847],\"sqsupset;\":[8848],\"subseteq;\":[8838],\"succneqq;\":[10934],\"succnsim;\":[8937],\"supseteq;\":[8839],\"thetasym;\":[977],\"thicksim;\":[8764],\"timesbar;\":[10801],\"triangle;\":[9653],\"triminus;\":[10810],\"trpezium;\":[9186],\"ulcorner;\":[8988],\"urcorner;\":[8989],\"varkappa;\":[1008],\"varsigma;\":[962],\"vartheta;\":[977]}},{\"length\":8,\"entities\":{\"Because;\":[8757],\"Cayleys;\":[8493],\"Cconint;\":[8752],\"Cedilla;\":[184],\"Diamond;\":[8900],\"DownTee;\":[8868],\"Element;\":[8712],\"Epsilon;\":[917],\"Implies;\":[8658],\"LeftTee;\":[8867],\"NewLine;\":[10],\"NoBreak;\":[8288],\"NotLess;\":[8814],\"Omicron;\":[927],\"OverBar;\":[8254],\"Product;\":[8719],\"UpArrow;\":[8593],\"Uparrow;\":[8657],\"Upsilon;\":[933],\"alefsym;\":[8501],\"angrtvb;\":[8894],\"angzarr;\":[9084],\"asympeq;\":[8781],\"backsim;\":[8765],\"because;\":[8757],\"bemptyv;\":[10672],\"between;\":[8812],\"bigcirc;\":[9711],\"bigodot;\":[10752],\"bigstar;\":[9733],\"bnequiv;\":[8801,8421],\"boxplus;\":[8862],\"ccupssm;\":[10832],\"cemptyv;\":[10674],\"cirscir;\":[10690],\"coloneq;\":[8788],\"congdot;\":[10861],\"cudarrl;\":[10552],\"cudarrr;\":[10549],\"cularrp;\":[10557],\"curarrm;\":[10556],\"dbkarow;\":[10511],\"ddagger;\":[8225],\"ddotseq;\":[10871],\"demptyv;\":[10673],\"diamond;\":[8900],\"digamma;\":[989],\"dotplus;\":[8724],\"dwangle;\":[10662],\"epsilon;\":[949],\"eqcolon;\":[8789],\"equivDD;\":[10872],\"gesdoto;\":[10882],\"gtquest;\":[10876],\"gtrless;\":[8823],\"harrcir;\":[10568],\"intprod;\":[10812],\"isindot;\":[8949],\"larrbfs;\":[10527],\"larrsim;\":[10611],\"lbrksld;\":[10639],\"lbrkslu;\":[10637],\"ldrdhar;\":[10599],\"lesdoto;\":[10881],\"lessdot;\":[8918],\"lessgtr;\":[8822],\"lesssim;\":[8818],\"lotimes;\":[10804],\"lozenge;\":[9674],\"ltquest;\":[10875],\"luruhar;\":[10598],\"maltese;\":[10016],\"minusdu;\":[10794],\"napprox;\":[8777],\"natural;\":[9838],\"nearrow;\":[8599],\"nexists;\":[8708],\"notinva;\":[8713],\"notinvb;\":[8951],\"notinvc;\":[8950],\"notniva;\":[8716],\"notnivb;\":[8958],\"notnivc;\":[8957],\"npolint;\":[10772],\"npreceq;\":[10927,824],\"nsqsube;\":[8930],\"nsqsupe;\":[8931],\"nsubset;\":[8834,8402],\"nsucceq;\":[10928,824],\"nsupset;\":[8835,8402],\"nvinfin;\":[10718],\"nvltrie;\":[8884,8402],\"nvrtrie;\":[8885,8402],\"nwarrow;\":[8598],\"olcross;\":[10683],\"omicron;\":[959],\"orderof;\":[8500],\"orslope;\":[10839],\"pertenk;\":[8241],\"planckh;\":[8462],\"pluscir;\":[10786],\"plussim;\":[10790],\"plustwo;\":[10791],\"precsim;\":[8830],\"quatint;\":[10774],\"questeq;\":[8799],\"rarrbfs;\":[10528],\"rarrsim;\":[10612],\"rbrksld;\":[10638],\"rbrkslu;\":[10640],\"rdldhar;\":[10601],\"realine;\":[8475],\"rotimes;\":[10805],\"ruluhar;\":[10600],\"searrow;\":[8600],\"simplus;\":[10788],\"simrarr;\":[10610],\"subedot;\":[10947],\"submult;\":[10945],\"subplus;\":[10943],\"subrarr;\":[10617],\"succsim;\":[8831],\"supdsub;\":[10968],\"supedot;\":[10948],\"suphsol;\":[10185],\"suphsub;\":[10967],\"suplarr;\":[10619],\"supmult;\":[10946],\"supplus;\":[10944],\"swarrow;\":[8601],\"topfork;\":[10970],\"triplus;\":[10809],\"tritime;\":[10811],\"uparrow;\":[8593],\"upsilon;\":[965],\"uwangle;\":[10663],\"vzigzag;\":[10650],\"zigrarr;\":[8669]}},{\"length\":7,\"entities\":{\"Aacute;\":[193],\"Abreve;\":[258],\"Agrave;\":[192],\"Assign;\":[8788],\"Atilde;\":[195],\"Barwed;\":[8966],\"Bumpeq;\":[8782],\"Cacute;\":[262],\"Ccaron;\":[268],\"Ccedil;\":[199],\"Colone;\":[10868],\"Conint;\":[8751],\"CupCap;\":[8781],\"Dagger;\":[8225],\"Dcaron;\":[270],\"DotDot;\":[8412],\"Dstrok;\":[272],\"Eacute;\":[201],\"Ecaron;\":[282],\"Egrave;\":[200],\"Exists;\":[8707],\"ForAll;\":[8704],\"Gammad;\":[988],\"Gbreve;\":[286],\"Gcedil;\":[290],\"HARDcy;\":[1066],\"Hstrok;\":[294],\"Iacute;\":[205],\"Igrave;\":[204],\"Itilde;\":[296],\"Jsercy;\":[1032],\"Kcedil;\":[310],\"Lacute;\":[313],\"Lambda;\":[923],\"Lcaron;\":[317],\"Lcedil;\":[315],\"Lmidot;\":[319],\"Lstrok;\":[321],\"Nacute;\":[323],\"Ncaron;\":[327],\"Ncedil;\":[325],\"Ntilde;\":[209],\"Oacute;\":[211],\"Odblac;\":[336],\"Ograve;\":[210],\"Oslash;\":[216],\"Otilde;\":[213],\"Otimes;\":[10807],\"Racute;\":[340],\"Rarrtl;\":[10518],\"Rcaron;\":[344],\"Rcedil;\":[342],\"SHCHcy;\":[1065],\"SOFTcy;\":[1068],\"Sacute;\":[346],\"Scaron;\":[352],\"Scedil;\":[350],\"Square;\":[9633],\"Subset;\":[8912],\"Supset;\":[8913],\"Tcaron;\":[356],\"Tcedil;\":[354],\"Tstrok;\":[358],\"Uacute;\":[218],\"Ubreve;\":[364],\"Udblac;\":[368],\"Ugrave;\":[217],\"Utilde;\":[360],\"Vdashl;\":[10982],\"Verbar;\":[8214],\"Vvdash;\":[8874],\"Yacute;\":[221],\"Zacute;\":[377],\"Zcaron;\":[381],\"aacute;\":[225],\"abreve;\":[259],\"agrave;\":[224],\"andand;\":[10837],\"angmsd;\":[8737],\"angsph;\":[8738],\"apacir;\":[10863],\"approx;\":[8776],\"atilde;\":[227],\"barvee;\":[8893],\"barwed;\":[8965],\"becaus;\":[8757],\"bernou;\":[8492],\"bigcap;\":[8898],\"bigcup;\":[8899],\"bigvee;\":[8897],\"bkarow;\":[10509],\"bottom;\":[8869],\"bowtie;\":[8904],\"boxbox;\":[10697],\"bprime;\":[8245],\"brvbar;\":[166],\"bullet;\":[8226],\"bumpeq;\":[8783],\"cacute;\":[263],\"capand;\":[10820],\"capcap;\":[10827],\"capcup;\":[10823],\"capdot;\":[10816],\"ccaron;\":[269],\"ccedil;\":[231],\"circeq;\":[8791],\"cirmid;\":[10991],\"colone;\":[8788],\"commat;\":[64],\"compfn;\":[8728],\"conint;\":[8750],\"coprod;\":[8720],\"copysr;\":[8471],\"cularr;\":[8630],\"cupcap;\":[10822],\"cupcup;\":[10826],\"cupdot;\":[8845],\"curarr;\":[8631],\"curren;\":[164],\"cylcty;\":[9005],\"dagger;\":[8224],\"daleth;\":[8504],\"dcaron;\":[271],\"dfisht;\":[10623],\"divide;\":[247],\"divonx;\":[8903],\"dlcorn;\":[8990],\"dlcrop;\":[8973],\"dollar;\":[36],\"drcorn;\":[8991],\"drcrop;\":[8972],\"dstrok;\":[273],\"eacute;\":[233],\"easter;\":[10862],\"ecaron;\":[283],\"ecolon;\":[8789],\"egrave;\":[232],\"egsdot;\":[10904],\"elsdot;\":[10903],\"emptyv;\":[8709],\"emsp13;\":[8196],\"emsp14;\":[8197],\"eparsl;\":[10723],\"eqcirc;\":[8790],\"equals;\":[61],\"equest;\":[8799],\"female;\":[9792],\"ffilig;\":[64259],\"ffllig;\":[64260],\"forall;\":[8704],\"frac12;\":[189],\"frac13;\":[8531],\"frac14;\":[188],\"frac15;\":[8533],\"frac16;\":[8537],\"frac18;\":[8539],\"frac23;\":[8532],\"frac25;\":[8534],\"frac34;\":[190],\"frac35;\":[8535],\"frac38;\":[8540],\"frac45;\":[8536],\"frac56;\":[8538],\"frac58;\":[8541],\"frac78;\":[8542],\"gacute;\":[501],\"gammad;\":[989],\"gbreve;\":[287],\"gesdot;\":[10880],\"gesles;\":[10900],\"gtlPar;\":[10645],\"gtrarr;\":[10616],\"gtrdot;\":[8919],\"gtrsim;\":[8819],\"hairsp;\":[8202],\"hamilt;\":[8459],\"hardcy;\":[1098],\"hearts;\":[9829],\"hellip;\":[8230],\"hercon;\":[8889],\"homtht;\":[8763],\"horbar;\":[8213],\"hslash;\":[8463],\"hstrok;\":[295],\"hybull;\":[8259],\"hyphen;\":[8208],\"iacute;\":[237],\"igrave;\":[236],\"iiiint;\":[10764],\"iinfin;\":[10716],\"incare;\":[8453],\"inodot;\":[305],\"intcal;\":[8890],\"iquest;\":[191],\"isinsv;\":[8947],\"itilde;\":[297],\"jsercy;\":[1112],\"kappav;\":[1008],\"kcedil;\":[311],\"kgreen;\":[312],\"lAtail;\":[10523],\"lacute;\":[314],\"lagran;\":[8466],\"lambda;\":[955],\"langle;\":[10216],\"larrfs;\":[10525],\"larrhk;\":[8617],\"larrlp;\":[8619],\"larrpl;\":[10553],\"larrtl;\":[8610],\"latail;\":[10521],\"lbrace;\":[123],\"lbrack;\":[91],\"lcaron;\":[318],\"lcedil;\":[316],\"ldquor;\":[8222],\"lesdot;\":[10879],\"lesges;\":[10899],\"lfisht;\":[10620],\"lfloor;\":[8970],\"lharul;\":[10602],\"llhard;\":[10603],\"lmidot;\":[320],\"lmoust;\":[9136],\"loplus;\":[10797],\"lowast;\":[8727],\"lowbar;\":[95],\"lparlt;\":[10643],\"lrhard;\":[10605],\"lsaquo;\":[8249],\"lsquor;\":[8218],\"lstrok;\":[322],\"lthree;\":[8907],\"ltimes;\":[8905],\"ltlarr;\":[10614],\"ltrPar;\":[10646],\"mapsto;\":[8614],\"marker;\":[9646],\"mcomma;\":[10793],\"midast;\":[42],\"midcir;\":[10992],\"middot;\":[183],\"minusb;\":[8863],\"minusd;\":[8760],\"mnplus;\":[8723],\"models;\":[8871],\"mstpos;\":[8766],\"nVDash;\":[8879],\"nVdash;\":[8878],\"nacute;\":[324],\"nbumpe;\":[8783,824],\"ncaron;\":[328],\"ncedil;\":[326],\"nearhk;\":[10532],\"nequiv;\":[8802],\"nesear;\":[10536],\"nexist;\":[8708],\"nltrie;\":[8940],\"notinE;\":[8953,824],\"nparsl;\":[11005,8421],\"nprcue;\":[8928],\"nrarrc;\":[10547,824],\"nrarrw;\":[8605,824],\"nrtrie;\":[8941],\"nsccue;\":[8929],\"nsimeq;\":[8772],\"ntilde;\":[241],\"numero;\":[8470],\"nvDash;\":[8877],\"nvHarr;\":[10500],\"nvdash;\":[8876],\"nvlArr;\":[10498],\"nvrArr;\":[10499],\"nwarhk;\":[10531],\"nwnear;\":[10535],\"oacute;\":[243],\"odblac;\":[337],\"odsold;\":[10684],\"ograve;\":[242],\"ominus;\":[8854],\"origof;\":[8886],\"oslash;\":[248],\"otilde;\":[245],\"otimes;\":[8855],\"parsim;\":[10995],\"percnt;\":[37],\"period;\":[46],\"permil;\":[8240],\"phmmat;\":[8499],\"planck;\":[8463],\"plankv;\":[8463],\"plusdo;\":[8724],\"plusdu;\":[10789],\"plusmn;\":[177],\"preceq;\":[10927],\"primes;\":[8473],\"prnsim;\":[8936],\"propto;\":[8733],\"prurel;\":[8880],\"puncsp;\":[8200],\"qprime;\":[8279],\"rAtail;\":[10524],\"racute;\":[341],\"rangle;\":[10217],\"rarrap;\":[10613],\"rarrfs;\":[10526],\"rarrhk;\":[8618],\"rarrlp;\":[8620],\"rarrpl;\":[10565],\"rarrtl;\":[8611],\"ratail;\":[10522],\"rbrace;\":[125],\"rbrack;\":[93],\"rcaron;\":[345],\"rcedil;\":[343],\"rdquor;\":[8221],\"rfisht;\":[10621],\"rfloor;\":[8971],\"rharul;\":[10604],\"rmoust;\":[9137],\"roplus;\":[10798],\"rpargt;\":[10644],\"rsaquo;\":[8250],\"rsquor;\":[8217],\"rthree;\":[8908],\"rtimes;\":[8906],\"sacute;\":[347],\"scaron;\":[353],\"scedil;\":[351],\"scnsim;\":[8937],\"searhk;\":[10533],\"seswar;\":[10537],\"sfrown;\":[8994],\"shchcy;\":[1097],\"sigmaf;\":[962],\"sigmav;\":[962],\"simdot;\":[10858],\"smashp;\":[10803],\"softcy;\":[1100],\"solbar;\":[9023],\"spades;\":[9824],\"sqcaps;\":[8851,65024],\"sqcups;\":[8852,65024],\"sqsube;\":[8849],\"sqsupe;\":[8850],\"square;\":[9633],\"squarf;\":[9642],\"ssetmn;\":[8726],\"ssmile;\":[8995],\"sstarf;\":[8902],\"subdot;\":[10941],\"subset;\":[8834],\"subsim;\":[10951],\"subsub;\":[10965],\"subsup;\":[10963],\"succeq;\":[10928],\"supdot;\":[10942],\"supset;\":[8835],\"supsim;\":[10952],\"supsub;\":[10964],\"supsup;\":[10966],\"swarhk;\":[10534],\"swnwar;\":[10538],\"target;\":[8982],\"tcaron;\":[357],\"tcedil;\":[355],\"telrec;\":[8981],\"there4;\":[8756],\"thetav;\":[977],\"thinsp;\":[8201],\"thksim;\":[8764],\"timesb;\":[8864],\"timesd;\":[10800],\"topbot;\":[9014],\"topcir;\":[10993],\"tprime;\":[8244],\"tridot;\":[9708],\"tstrok;\":[359],\"uacute;\":[250],\"ubreve;\":[365],\"udblac;\":[369],\"ufisht;\":[10622],\"ugrave;\":[249],\"ulcorn;\":[8988],\"ulcrop;\":[8975],\"urcorn;\":[8989],\"urcrop;\":[8974],\"utilde;\":[361],\"vangrt;\":[10652],\"varphi;\":[981],\"varrho;\":[1009],\"veebar;\":[8891],\"vellip;\":[8942],\"verbar;\":[124],\"vsubnE;\":[10955,65024],\"vsubne;\":[8842,65024],\"vsupnE;\":[10956,65024],\"vsupne;\":[8843,65024],\"wedbar;\":[10847],\"wedgeq;\":[8793],\"weierp;\":[8472],\"wreath;\":[8768],\"xoplus;\":[10753],\"xotime;\":[10754],\"xsqcup;\":[10758],\"xuplus;\":[10756],\"xwedge;\":[8896],\"yacute;\":[253],\"zacute;\":[378],\"zcaron;\":[382],\"zeetrf;\":[8488]}},{\"length\":6,\"entities\":{\"AElig;\":[198],\"Aacute\":[193],\"Acirc;\":[194],\"Agrave\":[192],\"Alpha;\":[913],\"Amacr;\":[256],\"Aogon;\":[260],\"Aring;\":[197],\"Atilde\":[195],\"Breve;\":[728],\"Ccedil\":[199],\"Ccirc;\":[264],\"Colon;\":[8759],\"Cross;\":[10799],\"Dashv;\":[10980],\"Delta;\":[916],\"Eacute\":[201],\"Ecirc;\":[202],\"Egrave\":[200],\"Emacr;\":[274],\"Eogon;\":[280],\"Equal;\":[10869],\"Gamma;\":[915],\"Gcirc;\":[284],\"Hacek;\":[711],\"Hcirc;\":[292],\"IJlig;\":[306],\"Iacute\":[205],\"Icirc;\":[206],\"Igrave\":[204],\"Imacr;\":[298],\"Iogon;\":[302],\"Iukcy;\":[1030],\"Jcirc;\":[308],\"Jukcy;\":[1028],\"Kappa;\":[922],\"Ntilde\":[209],\"OElig;\":[338],\"Oacute\":[211],\"Ocirc;\":[212],\"Ograve\":[210],\"Omacr;\":[332],\"Omega;\":[937],\"Oslash\":[216],\"Otilde\":[213],\"Prime;\":[8243],\"RBarr;\":[10512],\"Scirc;\":[348],\"Sigma;\":[931],\"THORN;\":[222],\"TRADE;\":[8482],\"TSHcy;\":[1035],\"Theta;\":[920],\"Tilde;\":[8764],\"Uacute\":[218],\"Ubrcy;\":[1038],\"Ucirc;\":[219],\"Ugrave\":[217],\"Umacr;\":[362],\"Union;\":[8899],\"Uogon;\":[370],\"UpTee;\":[8869],\"Uring;\":[366],\"VDash;\":[8875],\"Vdash;\":[8873],\"Wcirc;\":[372],\"Wedge;\":[8896],\"Yacute\":[221],\"Ycirc;\":[374],\"aacute\":[225],\"acirc;\":[226],\"acute;\":[180],\"aelig;\":[230],\"agrave\":[224],\"aleph;\":[8501],\"alpha;\":[945],\"amacr;\":[257],\"amalg;\":[10815],\"angle;\":[8736],\"angrt;\":[8735],\"angst;\":[197],\"aogon;\":[261],\"aring;\":[229],\"asymp;\":[8776],\"atilde\":[227],\"awint;\":[10769],\"bcong;\":[8780],\"bdquo;\":[8222],\"bepsi;\":[1014],\"blank;\":[9251],\"blk12;\":[9618],\"blk14;\":[9617],\"blk34;\":[9619],\"block;\":[9608],\"boxDL;\":[9559],\"boxDR;\":[9556],\"boxDl;\":[9558],\"boxDr;\":[9555],\"boxHD;\":[9574],\"boxHU;\":[9577],\"boxHd;\":[9572],\"boxHu;\":[9575],\"boxUL;\":[9565],\"boxUR;\":[9562],\"boxUl;\":[9564],\"boxUr;\":[9561],\"boxVH;\":[9580],\"boxVL;\":[9571],\"boxVR;\":[9568],\"boxVh;\":[9579],\"boxVl;\":[9570],\"boxVr;\":[9567],\"boxdL;\":[9557],\"boxdR;\":[9554],\"boxdl;\":[9488],\"boxdr;\":[9484],\"boxhD;\":[9573],\"boxhU;\":[9576],\"boxhd;\":[9516],\"boxhu;\":[9524],\"boxuL;\":[9563],\"boxuR;\":[9560],\"boxul;\":[9496],\"boxur;\":[9492],\"boxvH;\":[9578],\"boxvL;\":[9569],\"boxvR;\":[9566],\"boxvh;\":[9532],\"boxvl;\":[9508],\"boxvr;\":[9500],\"breve;\":[728],\"brvbar\":[166],\"bsemi;\":[8271],\"bsime;\":[8909],\"bsolb;\":[10693],\"bumpE;\":[10926],\"bumpe;\":[8783],\"caret;\":[8257],\"caron;\":[711],\"ccaps;\":[10829],\"ccedil\":[231],\"ccirc;\":[265],\"ccups;\":[10828],\"cedil;\":[184],\"check;\":[10003],\"clubs;\":[9827],\"colon;\":[58],\"comma;\":[44],\"crarr;\":[8629],\"cross;\":[10007],\"csube;\":[10961],\"csupe;\":[10962],\"ctdot;\":[8943],\"cuepr;\":[8926],\"cuesc;\":[8927],\"cupor;\":[10821],\"curren\":[164],\"cuvee;\":[8910],\"cuwed;\":[8911],\"cwint;\":[8753],\"dashv;\":[8867],\"dblac;\":[733],\"ddarr;\":[8650],\"delta;\":[948],\"dharl;\":[8643],\"dharr;\":[8642],\"diams;\":[9830],\"disin;\":[8946],\"divide\":[247],\"doteq;\":[8784],\"dtdot;\":[8945],\"dtrif;\":[9662],\"duarr;\":[8693],\"duhar;\":[10607],\"eDDot;\":[10871],\"eacute\":[233],\"ecirc;\":[234],\"efDot;\":[8786],\"egrave\":[232],\"emacr;\":[275],\"empty;\":[8709],\"eogon;\":[281],\"eplus;\":[10865],\"epsiv;\":[1013],\"eqsim;\":[8770],\"equiv;\":[8801],\"erDot;\":[8787],\"erarr;\":[10609],\"esdot;\":[8784],\"exist;\":[8707],\"fflig;\":[64256],\"filig;\":[64257],\"fjlig;\":[102,106],\"fllig;\":[64258],\"fltns;\":[9649],\"forkv;\":[10969],\"frac12\":[189],\"frac14\":[188],\"frac34\":[190],\"frasl;\":[8260],\"frown;\":[8994],\"gamma;\":[947],\"gcirc;\":[285],\"gescc;\":[10921],\"gimel;\":[8503],\"gneqq;\":[8809],\"gnsim;\":[8935],\"grave;\":[96],\"gsime;\":[10894],\"gsiml;\":[10896],\"gtcir;\":[10874],\"gtdot;\":[8919],\"harrw;\":[8621],\"hcirc;\":[293],\"hoarr;\":[8703],\"iacute\":[237],\"icirc;\":[238],\"iexcl;\":[161],\"igrave\":[236],\"iiint;\":[8749],\"iiota;\":[8489],\"ijlig;\":[307],\"imacr;\":[299],\"image;\":[8465],\"imath;\":[305],\"imped;\":[437],\"infin;\":[8734],\"iogon;\":[303],\"iprod;\":[10812],\"iquest\":[191],\"isinE;\":[8953],\"isins;\":[8948],\"isinv;\":[8712],\"iukcy;\":[1110],\"jcirc;\":[309],\"jmath;\":[567],\"jukcy;\":[1108],\"kappa;\":[954],\"lAarr;\":[8666],\"lBarr;\":[10510],\"langd;\":[10641],\"laquo;\":[171],\"larrb;\":[8676],\"lates;\":[10925,65024],\"lbarr;\":[10508],\"lbbrk;\":[10098],\"lbrke;\":[10635],\"lceil;\":[8968],\"ldquo;\":[8220],\"lescc;\":[10920],\"lhard;\":[8637],\"lharu;\":[8636],\"lhblk;\":[9604],\"llarr;\":[8647],\"lltri;\":[9722],\"lneqq;\":[8808],\"lnsim;\":[8934],\"loang;\":[10220],\"loarr;\":[8701],\"lobrk;\":[10214],\"lopar;\":[10629],\"lrarr;\":[8646],\"lrhar;\":[8651],\"lrtri;\":[8895],\"lsime;\":[10893],\"lsimg;\":[10895],\"lsquo;\":[8216],\"ltcir;\":[10873],\"ltdot;\":[8918],\"ltrie;\":[8884],\"ltrif;\":[9666],\"mDDot;\":[8762],\"mdash;\":[8212],\"micro;\":[181],\"middot\":[183],\"minus;\":[8722],\"mumap;\":[8888],\"nabla;\":[8711],\"napid;\":[8779,824],\"napos;\":[329],\"natur;\":[9838],\"nbump;\":[8782,824],\"ncong;\":[8775],\"ndash;\":[8211],\"neArr;\":[8663],\"nearr;\":[8599],\"nedot;\":[8784,824],\"nesim;\":[8770,824],\"ngeqq;\":[8807,824],\"ngsim;\":[8821],\"nhArr;\":[8654],\"nharr;\":[8622],\"nhpar;\":[10994],\"nlArr;\":[8653],\"nlarr;\":[8602],\"nleqq;\":[8806,824],\"nless;\":[8814],\"nlsim;\":[8820],\"nltri;\":[8938],\"notin;\":[8713],\"notni;\":[8716],\"npart;\":[8706,824],\"nprec;\":[8832],\"nrArr;\":[8655],\"nrarr;\":[8603],\"nrtri;\":[8939],\"nsime;\":[8772],\"nsmid;\":[8740],\"nspar;\":[8742],\"nsubE;\":[10949,824],\"nsube;\":[8840],\"nsucc;\":[8833],\"nsupE;\":[10950,824],\"nsupe;\":[8841],\"ntilde\":[241],\"numsp;\":[8199],\"nvsim;\":[8764,8402],\"nwArr;\":[8662],\"nwarr;\":[8598],\"oacute\":[243],\"ocirc;\":[244],\"odash;\":[8861],\"oelig;\":[339],\"ofcir;\":[10687],\"ograve\":[242],\"ohbar;\":[10677],\"olarr;\":[8634],\"olcir;\":[10686],\"oline;\":[8254],\"omacr;\":[333],\"omega;\":[969],\"operp;\":[10681],\"oplus;\":[8853],\"orarr;\":[8635],\"order;\":[8500],\"oslash\":[248],\"otilde\":[245],\"ovbar;\":[9021],\"parsl;\":[11005],\"phone;\":[9742],\"plusb;\":[8862],\"pluse;\":[10866],\"plusmn\":[177],\"pound;\":[163],\"prcue;\":[8828],\"prime;\":[8242],\"prnap;\":[10937],\"prsim;\":[8830],\"quest;\":[63],\"rAarr;\":[8667],\"rBarr;\":[10511],\"radic;\":[8730],\"rangd;\":[10642],\"range;\":[10661],\"raquo;\":[187],\"rarrb;\":[8677],\"rarrc;\":[10547],\"rarrw;\":[8605],\"ratio;\":[8758],\"rbarr;\":[10509],\"rbbrk;\":[10099],\"rbrke;\":[10636],\"rceil;\":[8969],\"rdquo;\":[8221],\"reals;\":[8477],\"rhard;\":[8641],\"rharu;\":[8640],\"rlarr;\":[8644],\"rlhar;\":[8652],\"rnmid;\":[10990],\"roang;\":[10221],\"roarr;\":[8702],\"robrk;\":[10215],\"ropar;\":[10630],\"rrarr;\":[8649],\"rsquo;\":[8217],\"rtrie;\":[8885],\"rtrif;\":[9656],\"sbquo;\":[8218],\"sccue;\":[8829],\"scirc;\":[349],\"scnap;\":[10938],\"scsim;\":[8831],\"sdotb;\":[8865],\"sdote;\":[10854],\"seArr;\":[8664],\"searr;\":[8600],\"setmn;\":[8726],\"sharp;\":[9839],\"sigma;\":[963],\"simeq;\":[8771],\"simgE;\":[10912],\"simlE;\":[10911],\"simne;\":[8774],\"slarr;\":[8592],\"smile;\":[8995],\"smtes;\":[10924,65024],\"sqcap;\":[8851],\"sqcup;\":[8852],\"sqsub;\":[8847],\"sqsup;\":[8848],\"srarr;\":[8594],\"starf;\":[9733],\"strns;\":[175],\"subnE;\":[10955],\"subne;\":[8842],\"supnE;\":[10956],\"supne;\":[8843],\"swArr;\":[8665],\"swarr;\":[8601],\"szlig;\":[223],\"theta;\":[952],\"thkap;\":[8776],\"thorn;\":[254],\"tilde;\":[732],\"times;\":[215],\"trade;\":[8482],\"trisb;\":[10701],\"tshcy;\":[1115],\"twixt;\":[8812],\"uacute\":[250],\"ubrcy;\":[1118],\"ucirc;\":[251],\"udarr;\":[8645],\"udhar;\":[10606],\"ugrave\":[249],\"uharl;\":[8639],\"uharr;\":[8638],\"uhblk;\":[9600],\"ultri;\":[9720],\"umacr;\":[363],\"uogon;\":[371],\"uplus;\":[8846],\"upsih;\":[978],\"uring;\":[367],\"urtri;\":[9721],\"utdot;\":[8944],\"utrif;\":[9652],\"uuarr;\":[8648],\"vBarv;\":[10985],\"vDash;\":[8872],\"varpi;\":[982],\"vdash;\":[8866],\"veeeq;\":[8794],\"vltri;\":[8882],\"vnsub;\":[8834,8402],\"vnsup;\":[8835,8402],\"vprop;\":[8733],\"vrtri;\":[8883],\"wcirc;\":[373],\"wedge;\":[8743],\"xcirc;\":[9711],\"xdtri;\":[9661],\"xhArr;\":[10234],\"xharr;\":[10231],\"xlArr;\":[10232],\"xlarr;\":[10229],\"xodot;\":[10752],\"xrArr;\":[10233],\"xrarr;\":[10230],\"xutri;\":[9651],\"yacute\":[253],\"ycirc;\":[375]}},{\"length\":5,\"entities\":{\"AElig\":[198],\"Acirc\":[194],\"Aopf;\":[120120],\"Aring\":[197],\"Ascr;\":[119964],\"Auml;\":[196],\"Barv;\":[10983],\"Beta;\":[914],\"Bopf;\":[120121],\"Bscr;\":[8492],\"CHcy;\":[1063],\"COPY;\":[169],\"Cdot;\":[266],\"Copf;\":[8450],\"Cscr;\":[119966],\"DJcy;\":[1026],\"DScy;\":[1029],\"DZcy;\":[1039],\"Darr;\":[8609],\"Dopf;\":[120123],\"Dscr;\":[119967],\"Ecirc\":[202],\"Edot;\":[278],\"Eopf;\":[120124],\"Escr;\":[8496],\"Esim;\":[10867],\"Euml;\":[203],\"Fopf;\":[120125],\"Fscr;\":[8497],\"GJcy;\":[1027],\"Gdot;\":[288],\"Gopf;\":[120126],\"Gscr;\":[119970],\"Hopf;\":[8461],\"Hscr;\":[8459],\"IEcy;\":[1045],\"IOcy;\":[1025],\"Icirc\":[206],\"Idot;\":[304],\"Iopf;\":[120128],\"Iota;\":[921],\"Iscr;\":[8464],\"Iuml;\":[207],\"Jopf;\":[120129],\"Jscr;\":[119973],\"KHcy;\":[1061],\"KJcy;\":[1036],\"Kopf;\":[120130],\"Kscr;\":[119974],\"LJcy;\":[1033],\"Lang;\":[10218],\"Larr;\":[8606],\"Lopf;\":[120131],\"Lscr;\":[8466],\"Mopf;\":[120132],\"Mscr;\":[8499],\"NJcy;\":[1034],\"Nopf;\":[8469],\"Nscr;\":[119977],\"Ocirc\":[212],\"Oopf;\":[120134],\"Oscr;\":[119978],\"Ouml;\":[214],\"Popf;\":[8473],\"Pscr;\":[119979],\"QUOT;\":[34],\"Qopf;\":[8474],\"Qscr;\":[119980],\"Rang;\":[10219],\"Rarr;\":[8608],\"Ropf;\":[8477],\"Rscr;\":[8475],\"SHcy;\":[1064],\"Sopf;\":[120138],\"Sqrt;\":[8730],\"Sscr;\":[119982],\"Star;\":[8902],\"THORN\":[222],\"TScy;\":[1062],\"Topf;\":[120139],\"Tscr;\":[119983],\"Uarr;\":[8607],\"Ucirc\":[219],\"Uopf;\":[120140],\"Upsi;\":[978],\"Uscr;\":[119984],\"Uuml;\":[220],\"Vbar;\":[10987],\"Vert;\":[8214],\"Vopf;\":[120141],\"Vscr;\":[119985],\"Wopf;\":[120142],\"Wscr;\":[119986],\"Xopf;\":[120143],\"Xscr;\":[119987],\"YAcy;\":[1071],\"YIcy;\":[1031],\"YUcy;\":[1070],\"Yopf;\":[120144],\"Yscr;\":[119988],\"Yuml;\":[376],\"ZHcy;\":[1046],\"Zdot;\":[379],\"Zeta;\":[918],\"Zopf;\":[8484],\"Zscr;\":[119989],\"acirc\":[226],\"acute\":[180],\"aelig\":[230],\"andd;\":[10844],\"andv;\":[10842],\"ange;\":[10660],\"aopf;\":[120146],\"apid;\":[8779],\"apos;\":[39],\"aring\":[229],\"ascr;\":[119990],\"auml;\":[228],\"bNot;\":[10989],\"bbrk;\":[9141],\"beta;\":[946],\"beth;\":[8502],\"bnot;\":[8976],\"bopf;\":[120147],\"boxH;\":[9552],\"boxV;\":[9553],\"boxh;\":[9472],\"boxv;\":[9474],\"bscr;\":[119991],\"bsim;\":[8765],\"bsol;\":[92],\"bull;\":[8226],\"bump;\":[8782],\"caps;\":[8745,65024],\"cdot;\":[267],\"cedil\":[184],\"cent;\":[162],\"chcy;\":[1095],\"cirE;\":[10691],\"circ;\":[710],\"cire;\":[8791],\"comp;\":[8705],\"cong;\":[8773],\"copf;\":[120148],\"copy;\":[169],\"cscr;\":[119992],\"csub;\":[10959],\"csup;\":[10960],\"cups;\":[8746,65024],\"dArr;\":[8659],\"dHar;\":[10597],\"darr;\":[8595],\"dash;\":[8208],\"diam;\":[8900],\"djcy;\":[1106],\"dopf;\":[120149],\"dscr;\":[119993],\"dscy;\":[1109],\"dsol;\":[10742],\"dtri;\":[9663],\"dzcy;\":[1119],\"eDot;\":[8785],\"ecir;\":[8790],\"ecirc\":[234],\"edot;\":[279],\"emsp;\":[8195],\"ensp;\":[8194],\"eopf;\":[120150],\"epar;\":[8917],\"epsi;\":[949],\"escr;\":[8495],\"esim;\":[8770],\"euml;\":[235],\"euro;\":[8364],\"excl;\":[33],\"flat;\":[9837],\"fnof;\":[402],\"fopf;\":[120151],\"fork;\":[8916],\"fscr;\":[119995],\"gdot;\":[289],\"geqq;\":[8807],\"gesl;\":[8923,65024],\"gjcy;\":[1107],\"gnap;\":[10890],\"gneq;\":[10888],\"gopf;\":[120152],\"gscr;\":[8458],\"gsim;\":[8819],\"gtcc;\":[10919],\"gvnE;\":[8809,65024],\"hArr;\":[8660],\"half;\":[189],\"harr;\":[8596],\"hbar;\":[8463],\"hopf;\":[120153],\"hscr;\":[119997],\"icirc\":[238],\"iecy;\":[1077],\"iexcl\":[161],\"imof;\":[8887],\"iocy;\":[1105],\"iopf;\":[120154],\"iota;\":[953],\"iscr;\":[119998],\"isin;\":[8712],\"iuml;\":[239],\"jopf;\":[120155],\"jscr;\":[119999],\"khcy;\":[1093],\"kjcy;\":[1116],\"kopf;\":[120156],\"kscr;\":[120000],\"lArr;\":[8656],\"lHar;\":[10594],\"lang;\":[10216],\"laquo\":[171],\"larr;\":[8592],\"late;\":[10925],\"lcub;\":[123],\"ldca;\":[10550],\"ldsh;\":[8626],\"leqq;\":[8806],\"lesg;\":[8922,65024],\"ljcy;\":[1113],\"lnap;\":[10889],\"lneq;\":[10887],\"lopf;\":[120157],\"lozf;\":[10731],\"lpar;\":[40],\"lscr;\":[120001],\"lsim;\":[8818],\"lsqb;\":[91],\"ltcc;\":[10918],\"ltri;\":[9667],\"lvnE;\":[8808,65024],\"macr;\":[175],\"male;\":[9794],\"malt;\":[10016],\"micro\":[181],\"mlcp;\":[10971],\"mldr;\":[8230],\"mopf;\":[120158],\"mscr;\":[120002],\"nGtv;\":[8811,824],\"nLtv;\":[8810,824],\"nang;\":[8736,8402],\"napE;\":[10864,824],\"nbsp;\":[160],\"ncap;\":[10819],\"ncup;\":[10818],\"ngeq;\":[8817],\"nges;\":[10878,824],\"ngtr;\":[8815],\"nisd;\":[8954],\"njcy;\":[1114],\"nldr;\":[8229],\"nleq;\":[8816],\"nles;\":[10877,824],\"nmid;\":[8740],\"nopf;\":[120159],\"npar;\":[8742],\"npre;\":[10927,824],\"nsce;\":[10928,824],\"nscr;\":[120003],\"nsim;\":[8769],\"nsub;\":[8836],\"nsup;\":[8837],\"ntgl;\":[8825],\"ntlg;\":[8824],\"nvap;\":[8781,8402],\"nvge;\":[8805,8402],\"nvgt;\":[62,8402],\"nvle;\":[8804,8402],\"nvlt;\":[60,8402],\"oast;\":[8859],\"ocir;\":[8858],\"ocirc\":[244],\"odiv;\":[10808],\"odot;\":[8857],\"ogon;\":[731],\"oint;\":[8750],\"omid;\":[10678],\"oopf;\":[120160],\"opar;\":[10679],\"ordf;\":[170],\"ordm;\":[186],\"oror;\":[10838],\"oscr;\":[8500],\"osol;\":[8856],\"ouml;\":[246],\"para;\":[182],\"part;\":[8706],\"perp;\":[8869],\"phiv;\":[981],\"plus;\":[43],\"popf;\":[120161],\"pound\":[163],\"prap;\":[10935],\"prec;\":[8826],\"prnE;\":[10933],\"prod;\":[8719],\"prop;\":[8733],\"pscr;\":[120005],\"qint;\":[10764],\"qopf;\":[120162],\"qscr;\":[120006],\"quot;\":[34],\"rArr;\":[8658],\"rHar;\":[10596],\"race;\":[8765,817],\"rang;\":[10217],\"raquo\":[187],\"rarr;\":[8594],\"rcub;\":[125],\"rdca;\":[10551],\"rdsh;\":[8627],\"real;\":[8476],\"rect;\":[9645],\"rhov;\":[1009],\"ring;\":[730],\"ropf;\":[120163],\"rpar;\":[41],\"rscr;\":[120007],\"rsqb;\":[93],\"rtri;\":[9657],\"scap;\":[10936],\"scnE;\":[10934],\"sdot;\":[8901],\"sect;\":[167],\"semi;\":[59],\"sext;\":[10038],\"shcy;\":[1096],\"sime;\":[8771],\"simg;\":[10910],\"siml;\":[10909],\"smid;\":[8739],\"smte;\":[10924],\"solb;\":[10692],\"sopf;\":[120164],\"spar;\":[8741],\"squf;\":[9642],\"sscr;\":[120008],\"star;\":[9734],\"subE;\":[10949],\"sube;\":[8838],\"succ;\":[8827],\"sung;\":[9834],\"sup1;\":[185],\"sup2;\":[178],\"sup3;\":[179],\"supE;\":[10950],\"supe;\":[8839],\"szlig\":[223],\"tbrk;\":[9140],\"tdot;\":[8411],\"thorn\":[254],\"times\":[215],\"tint;\":[8749],\"toea;\":[10536],\"topf;\":[120165],\"tosa;\":[10537],\"trie;\":[8796],\"tscr;\":[120009],\"tscy;\":[1094],\"uArr;\":[8657],\"uHar;\":[10595],\"uarr;\":[8593],\"ucirc\":[251],\"uopf;\":[120166],\"upsi;\":[965],\"uscr;\":[120010],\"utri;\":[9653],\"uuml;\":[252],\"vArr;\":[8661],\"vBar;\":[10984],\"varr;\":[8597],\"vert;\":[124],\"vopf;\":[120167],\"vscr;\":[120011],\"wopf;\":[120168],\"wscr;\":[120012],\"xcap;\":[8898],\"xcup;\":[8899],\"xmap;\":[10236],\"xnis;\":[8955],\"xopf;\":[120169],\"xscr;\":[120013],\"xvee;\":[8897],\"yacy;\":[1103],\"yicy;\":[1111],\"yopf;\":[120170],\"yscr;\":[120014],\"yucy;\":[1102],\"yuml;\":[255],\"zdot;\":[380],\"zeta;\":[950],\"zhcy;\":[1078],\"zopf;\":[120171],\"zscr;\":[120015],\"zwnj;\":[8204]}},{\"length\":4,\"entities\":{\"AMP;\":[38],\"Acy;\":[1040],\"Afr;\":[120068],\"And;\":[10835],\"Auml\":[196],\"Bcy;\":[1041],\"Bfr;\":[120069],\"COPY\":[169],\"Cap;\":[8914],\"Cfr;\":[8493],\"Chi;\":[935],\"Cup;\":[8915],\"Dcy;\":[1044],\"Del;\":[8711],\"Dfr;\":[120071],\"Dot;\":[168],\"ENG;\":[330],\"ETH;\":[208],\"Ecy;\":[1069],\"Efr;\":[120072],\"Eta;\":[919],\"Euml\":[203],\"Fcy;\":[1060],\"Ffr;\":[120073],\"Gcy;\":[1043],\"Gfr;\":[120074],\"Hat;\":[94],\"Hfr;\":[8460],\"Icy;\":[1048],\"Ifr;\":[8465],\"Int;\":[8748],\"Iuml\":[207],\"Jcy;\":[1049],\"Jfr;\":[120077],\"Kcy;\":[1050],\"Kfr;\":[120078],\"Lcy;\":[1051],\"Lfr;\":[120079],\"Lsh;\":[8624],\"Map;\":[10501],\"Mcy;\":[1052],\"Mfr;\":[120080],\"Ncy;\":[1053],\"Nfr;\":[120081],\"Not;\":[10988],\"Ocy;\":[1054],\"Ofr;\":[120082],\"Ouml\":[214],\"Pcy;\":[1055],\"Pfr;\":[120083],\"Phi;\":[934],\"Psi;\":[936],\"QUOT\":[34],\"Qfr;\":[120084],\"REG;\":[174],\"Rcy;\":[1056],\"Rfr;\":[8476],\"Rho;\":[929],\"Rsh;\":[8625],\"Scy;\":[1057],\"Sfr;\":[120086],\"Sub;\":[8912],\"Sum;\":[8721],\"Sup;\":[8913],\"Tab;\":[9],\"Tau;\":[932],\"Tcy;\":[1058],\"Tfr;\":[120087],\"Ucy;\":[1059],\"Ufr;\":[120088],\"Uuml\":[220],\"Vcy;\":[1042],\"Vee;\":[8897],\"Vfr;\":[120089],\"Wfr;\":[120090],\"Xfr;\":[120091],\"Ycy;\":[1067],\"Yfr;\":[120092],\"Zcy;\":[1047],\"Zfr;\":[8488],\"acE;\":[8766,819],\"acd;\":[8767],\"acy;\":[1072],\"afr;\":[120094],\"amp;\":[38],\"and;\":[8743],\"ang;\":[8736],\"apE;\":[10864],\"ape;\":[8778],\"ast;\":[42],\"auml\":[228],\"bcy;\":[1073],\"bfr;\":[120095],\"bne;\":[61,8421],\"bot;\":[8869],\"cap;\":[8745],\"cent\":[162],\"cfr;\":[120096],\"chi;\":[967],\"cir;\":[9675],\"copy\":[169],\"cup;\":[8746],\"dcy;\":[1076],\"deg;\":[176],\"dfr;\":[120097],\"die;\":[168],\"div;\":[247],\"dot;\":[729],\"ecy;\":[1101],\"efr;\":[120098],\"egs;\":[10902],\"ell;\":[8467],\"els;\":[10901],\"eng;\":[331],\"eta;\":[951],\"eth;\":[240],\"euml\":[235],\"fcy;\":[1092],\"ffr;\":[120099],\"gEl;\":[10892],\"gap;\":[10886],\"gcy;\":[1075],\"gel;\":[8923],\"geq;\":[8805],\"ges;\":[10878],\"gfr;\":[120100],\"ggg;\":[8921],\"glE;\":[10898],\"gla;\":[10917],\"glj;\":[10916],\"gnE;\":[8809],\"gne;\":[10888],\"hfr;\":[120101],\"icy;\":[1080],\"iff;\":[8660],\"ifr;\":[120102],\"int;\":[8747],\"iuml\":[239],\"jcy;\":[1081],\"jfr;\":[120103],\"kcy;\":[1082],\"kfr;\":[120104],\"lEg;\":[10891],\"lap;\":[10885],\"lat;\":[10923],\"lcy;\":[1083],\"leg;\":[8922],\"leq;\":[8804],\"les;\":[10877],\"lfr;\":[120105],\"lgE;\":[10897],\"lnE;\":[8808],\"lne;\":[10887],\"loz;\":[9674],\"lrm;\":[8206],\"lsh;\":[8624],\"macr\":[175],\"map;\":[8614],\"mcy;\":[1084],\"mfr;\":[120106],\"mho;\":[8487],\"mid;\":[8739],\"nGg;\":[8921,824],\"nGt;\":[8811,8402],\"nLl;\":[8920,824],\"nLt;\":[8810,8402],\"nap;\":[8777],\"nbsp\":[160],\"ncy;\":[1085],\"nfr;\":[120107],\"ngE;\":[8807,824],\"nge;\":[8817],\"ngt;\":[8815],\"nis;\":[8956],\"niv;\":[8715],\"nlE;\":[8806,824],\"nle;\":[8816],\"nlt;\":[8814],\"not;\":[172],\"npr;\":[8832],\"nsc;\":[8833],\"num;\":[35],\"ocy;\":[1086],\"ofr;\":[120108],\"ogt;\":[10689],\"ohm;\":[937],\"olt;\":[10688],\"ord;\":[10845],\"ordf\":[170],\"ordm\":[186],\"orv;\":[10843],\"ouml\":[246],\"par;\":[8741],\"para\":[182],\"pcy;\":[1087],\"pfr;\":[120109],\"phi;\":[966],\"piv;\":[982],\"prE;\":[10931],\"pre;\":[10927],\"psi;\":[968],\"qfr;\":[120110],\"quot\":[34],\"rcy;\":[1088],\"reg;\":[174],\"rfr;\":[120111],\"rho;\":[961],\"rlm;\":[8207],\"rsh;\":[8625],\"scE;\":[10932],\"sce;\":[10928],\"scy;\":[1089],\"sect\":[167],\"sfr;\":[120112],\"shy;\":[173],\"sim;\":[8764],\"smt;\":[10922],\"sol;\":[47],\"squ;\":[9633],\"sub;\":[8834],\"sum;\":[8721],\"sup1\":[185],\"sup2\":[178],\"sup3\":[179],\"sup;\":[8835],\"tau;\":[964],\"tcy;\":[1090],\"tfr;\":[120113],\"top;\":[8868],\"ucy;\":[1091],\"ufr;\":[120114],\"uml;\":[168],\"uuml\":[252],\"vcy;\":[1074],\"vee;\":[8744],\"vfr;\":[120115],\"wfr;\":[120116],\"xfr;\":[120117],\"ycy;\":[1099],\"yen;\":[165],\"yfr;\":[120118],\"yuml\":[255],\"zcy;\":[1079],\"zfr;\":[120119],\"zwj;\":[8205]}},{\"length\":3,\"entities\":{\"AMP\":[38],\"DD;\":[8517],\"ETH\":[208],\"GT;\":[62],\"Gg;\":[8921],\"Gt;\":[8811],\"Im;\":[8465],\"LT;\":[60],\"Ll;\":[8920],\"Lt;\":[8810],\"Mu;\":[924],\"Nu;\":[925],\"Or;\":[10836],\"Pi;\":[928],\"Pr;\":[10939],\"REG\":[174],\"Re;\":[8476],\"Sc;\":[10940],\"Xi;\":[926],\"ac;\":[8766],\"af;\":[8289],\"amp\":[38],\"ap;\":[8776],\"dd;\":[8518],\"deg\":[176],\"ee;\":[8519],\"eg;\":[10906],\"el;\":[10905],\"eth\":[240],\"gE;\":[8807],\"ge;\":[8805],\"gg;\":[8811],\"gl;\":[8823],\"gt;\":[62],\"ic;\":[8291],\"ii;\":[8520],\"in;\":[8712],\"it;\":[8290],\"lE;\":[8806],\"le;\":[8804],\"lg;\":[8822],\"ll;\":[8810],\"lt;\":[60],\"mp;\":[8723],\"mu;\":[956],\"ne;\":[8800],\"ni;\":[8715],\"not\":[172],\"nu;\":[957],\"oS;\":[9416],\"or;\":[8744],\"pi;\":[960],\"pm;\":[177],\"pr;\":[8826],\"reg\":[174],\"rx;\":[8478],\"sc;\":[8827],\"shy\":[173],\"uml\":[168],\"wp;\":[8472],\"wr;\":[8768],\"xi;\":[958],\"yen\":[165]}},{\"length\":2,\"entities\":{\"GT\":[62],\"LT\":[60],\"gt\":[62],\"lt\":[60]}}]\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\nexport const EOF = -1\nexport const NULL = 0x00\nexport const TABULATION = 0x09\nexport const CARRIAGE_RETURN = 0x0d\nexport const LINE_FEED = 0x0a\nexport const FORM_FEED = 0x0c\nexport const SPACE = 0x20\nexport const EXCLAMATION_MARK = 0x21 // !\nexport const QUOTATION_MARK = 0x22 // \"\nexport const NUMBER_SIGN = 0x23 // #\nexport const AMPERSAND = 0x26 // &\nexport const APOSTROPHE = 0x27 // '\nexport const LEFT_PARENTHESIS = 0x28 // (\nexport const RIGHT_PARENTHESIS = 0x29 // )\nexport const ASTERISK = 0x2a // *\nexport const HYPHEN_MINUS = 0x2d // -\nexport const SOLIDUS = 0x2f // /\nexport const DIGIT_0 = 0x30\nexport const DIGIT_9 = 0x39\nexport const COLON = 0x3a // :\nexport const SEMICOLON = 0x3b // ;\nexport const LESS_THAN_SIGN = 0x3c // <\nexport const EQUALS_SIGN = 0x3d // =\nexport const GREATER_THAN_SIGN = 0x3e // >\nexport const QUESTION_MARK = 0x3f // ?\nexport const LATIN_CAPITAL_A = 0x41\nexport const LATIN_CAPITAL_D = 0x44\nexport const LATIN_CAPITAL_F = 0x46\nexport const LATIN_CAPITAL_X = 0x58\nexport const LATIN_CAPITAL_Z = 0x5a\nexport const LEFT_SQUARE_BRACKET = 0x5b // [\nexport const REVERSE_SOLIDUS = 0x5c // \\\nexport const RIGHT_SQUARE_BRACKET = 0x5d // ]\nexport const GRAVE_ACCENT = 0x60 // `\nexport const LATIN_SMALL_A = 0x61\nexport const LATIN_SMALL_F = 0x66\nexport const LATIN_SMALL_X = 0x78\nexport const LATIN_SMALL_Z = 0x7a\nexport const LEFT_CURLY_BRACKET = 0x7b // {\nexport const RIGHT_CURLY_BRACKET = 0x7d // }\nexport const NULL_REPLACEMENT = 0xfffd\n\n/**\n * Check whether the code point is a whitespace.\n * @param cp The code point to check.\n * @returns `true` if the code point is a whitespace.\n */\nexport function isWhitespace(cp: number): boolean {\n return (\n cp === TABULATION ||\n cp === LINE_FEED ||\n cp === FORM_FEED ||\n cp === CARRIAGE_RETURN ||\n cp === SPACE\n )\n}\n\n/**\n * Check whether the code point is an uppercase letter character.\n * @param cp The code point to check.\n * @returns `true` if the code point is an uppercase letter character.\n */\nexport function isUpperLetter(cp: number): boolean {\n return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_Z\n}\n\n/**\n * Check whether the code point is a lowercase letter character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a lowercase letter character.\n */\nexport function isLowerLetter(cp: number): boolean {\n return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_Z\n}\n\n/**\n * Check whether the code point is a letter character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a letter character.\n */\nexport function isLetter(cp: number): boolean {\n return isLowerLetter(cp) || isUpperLetter(cp)\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isDigit(cp: number): boolean {\n return cp >= DIGIT_0 && cp <= DIGIT_9\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isUpperHexDigit(cp: number): boolean {\n return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_F\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isLowerHexDigit(cp: number): boolean {\n return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_F\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isHexDigit(cp: number): boolean {\n return isDigit(cp) || isUpperHexDigit(cp) || isLowerHexDigit(cp)\n}\n\n/**\n * Check whether the code point is a control character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a control character.\n */\nexport function isControl(cp: number): boolean {\n return (cp >= 0 && cp <= 0x1f) || (cp >= 0x7f && cp <= 0x9f)\n}\n\n/**\n * Check whether the code point is a surrogate character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a surrogate character.\n */\nexport function isSurrogate(cp: number): boolean {\n return cp >= 0xd800 && cp <= 0xdfff\n}\n\n/**\n * Check whether the code point is a surrogate pair character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a surrogate pair character.\n */\nexport function isSurrogatePair(cp: number): boolean {\n return cp >= 0xdc00 && cp <= 0xdfff\n}\n\n/**\n * Check whether the code point is a surrogate character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a surrogate character.\n */\nexport function isNonCharacter(cp: number): boolean {\n return (\n (cp >= 0xfdd0 && cp <= 0xfdef) ||\n ((cp & 0xfffe) === 0xfffe && cp <= 0x10ffff)\n )\n}\n\n// export function isReservedCodePoint(cp: number): boolean {\n// return (cp >= 0xD800 && cp <= 0xDFFF) || cp > 0x10FFFF\n// }\n\n/**\n * Convert the given character to lowercases.\n * @param cp The code point to convert.\n * @returns Converted code point.\n */\nexport function toLowerCodePoint(cp: number): number {\n return cp + 0x0020\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/*eslint-disable no-param-reassign */\n\nimport assert from \"assert\"\nimport { debug } from \"../common/debug\"\nimport type { ErrorCode, Namespace, Token } from \"../ast/index\"\nimport { NS, ParseError } from \"../ast/index\"\nimport { alternativeCR } from \"./util/alternative-cr\"\nimport { entitySets } from \"./util/entities\"\nimport {\n AMPERSAND,\n APOSTROPHE,\n CARRIAGE_RETURN,\n EOF,\n EQUALS_SIGN,\n EXCLAMATION_MARK,\n GRAVE_ACCENT,\n GREATER_THAN_SIGN,\n HYPHEN_MINUS,\n isControl,\n isDigit,\n isHexDigit,\n isLetter,\n isLowerHexDigit,\n isNonCharacter,\n isSurrogate,\n isSurrogatePair,\n isUpperHexDigit,\n isUpperLetter,\n isWhitespace,\n LATIN_CAPITAL_D,\n LATIN_CAPITAL_X,\n LATIN_SMALL_X,\n LEFT_CURLY_BRACKET,\n LEFT_SQUARE_BRACKET,\n LESS_THAN_SIGN,\n LINE_FEED,\n NULL,\n NULL_REPLACEMENT,\n NUMBER_SIGN,\n QUESTION_MARK,\n QUOTATION_MARK,\n RIGHT_CURLY_BRACKET,\n RIGHT_SQUARE_BRACKET,\n SEMICOLON,\n SOLIDUS,\n toLowerCodePoint,\n} from \"./util/unicode\"\nimport type { ParserOptions } from \"../common/parser-options\"\n\n/**\n * Enumeration of token types.\n */\nexport type TokenType =\n | \"HTMLAssociation\"\n | \"HTMLBogusComment\"\n | \"HTMLCDataText\"\n | \"HTMLComment\"\n | \"HTMLEndTagOpen\"\n | \"HTMLIdentifier\"\n | \"HTMLLiteral\"\n | \"HTMLRCDataText\"\n | \"HTMLRawText\"\n | \"HTMLSelfClosingTagClose\"\n | \"HTMLTagClose\"\n | \"HTMLTagOpen\"\n | \"HTMLText\"\n | \"HTMLWhitespace\"\n | \"VExpressionStart\"\n | \"VExpressionEnd\"\n\n/**\n * Enumeration of tokenizer's state types.\n */\nexport type TokenizerState =\n | \"DATA\"\n | \"TAG_OPEN\"\n | \"END_TAG_OPEN\"\n | \"TAG_NAME\"\n | \"RCDATA\"\n | \"RCDATA_LESS_THAN_SIGN\"\n | \"RCDATA_END_TAG_OPEN\"\n | \"RCDATA_END_TAG_NAME\"\n | \"RAWTEXT\"\n | \"RAWTEXT_LESS_THAN_SIGN\"\n | \"RAWTEXT_END_TAG_OPEN\"\n | \"RAWTEXT_END_TAG_NAME\"\n | \"BEFORE_ATTRIBUTE_NAME\"\n | \"ATTRIBUTE_NAME\"\n | \"AFTER_ATTRIBUTE_NAME\"\n | \"BEFORE_ATTRIBUTE_VALUE\"\n | \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"\n | \"ATTRIBUTE_VALUE_SINGLE_QUOTED\"\n | \"ATTRIBUTE_VALUE_UNQUOTED\"\n | \"AFTER_ATTRIBUTE_VALUE_QUOTED\"\n | \"SELF_CLOSING_START_TAG\"\n | \"BOGUS_COMMENT\"\n | \"MARKUP_DECLARATION_OPEN\"\n | \"COMMENT_START\"\n | \"COMMENT_START_DASH\"\n | \"COMMENT\"\n | \"COMMENT_LESS_THAN_SIGN\"\n | \"COMMENT_LESS_THAN_SIGN_BANG\"\n | \"COMMENT_LESS_THAN_SIGN_BANG_DASH\"\n | \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"\n | \"COMMENT_END_DASH\"\n | \"COMMENT_END\"\n | \"COMMENT_END_BANG\"\n | \"CDATA_SECTION\"\n | \"CDATA_SECTION_BRACKET\"\n | \"CDATA_SECTION_END\"\n | \"CHARACTER_REFERENCE\"\n | \"NAMED_CHARACTER_REFERENCE\"\n | \"AMBIGUOUS_AMPERSAND\"\n | \"NUMERIC_CHARACTER_REFERENCE\"\n | \"HEXADEMICAL_CHARACTER_REFERENCE_START\"\n | \"DECIMAL_CHARACTER_REFERENCE_START\"\n | \"HEXADEMICAL_CHARACTER_REFERENCE\"\n | \"DECIMAL_CHARACTER_REFERENCE\"\n | \"NUMERIC_CHARACTER_REFERENCE_END\"\n | \"CHARACTER_REFERENCE_END\"\n | \"V_EXPRESSION_START\"\n | \"V_EXPRESSION_DATA\"\n | \"V_EXPRESSION_END\"\n// ---- Use RAWTEXT state for <script> elements instead ----\n// \"SCRIPT_DATA\" |\n// \"SCRIPT_DATA_LESS_THAN_SIGN\" |\n// \"SCRIPT_DATA_END_TAG_OPEN\" |\n// \"SCRIPT_DATA_END_TAG_NAME\" |\n// \"SCRIPT_DATA_ESCAPE_START\" |\n// \"SCRIPT_DATA_ESCAPE_START_DASH\" |\n// \"SCRIPT_DATA_ESCAPED\" |\n// \"SCRIPT_DATA_ESCAPED_DASH\" |\n// \"SCRIPT_DATA_ESCAPED_DASH_DASH\" |\n// \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\" |\n// \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\" |\n// \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPE_START\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPE_END\" |\n// ---- Use BOGUS_COMMENT state for DOCTYPEs instead ----\n// \"DOCTYPE\" |\n// \"DOCTYPE_NAME\" |\n// \"AFTER_DOCTYPE_NAME\" |\n// \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\" |\n// \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\" |\n// \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\" |\n// \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\" |\n// \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\" |\n// \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\" |\n// \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\" |\n// \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\" |\n// \"BOGUS_DOCTYPE\"\n\n/**\n * Tokenizer for HTML.\n */\nexport class Tokenizer {\n // Reading\n public readonly text: string\n public readonly gaps: number[]\n public readonly lineTerminators: number[]\n private readonly parserOptions: ParserOptions\n private lastCodePoint: number\n private lastCodePointRaw: number\n private offset: number\n private column: number\n private line: number\n\n // Tokenizing\n private returnState: TokenizerState\n private vExpressionScriptState: { state: TokenizerState } | null = null\n private reconsuming: boolean\n private buffer: number[]\n private crStartOffset: number\n private crCode: number\n private committedToken: Token | null\n private provisionalToken: Token | null // can be rollbacked.\n private currentToken: Token | null\n private lastTagOpenToken: Token | null\n private tokenStartOffset: number\n private tokenStartLine: number\n private tokenStartColumn: number\n\n /**\n * The current state.\n */\n public state: TokenizerState\n\n /**\n * Syntax errors.\n */\n public errors: ParseError[]\n\n /**\n * The current namespace.\n */\n public namespace: Namespace\n\n /**\n * The flag which enables expression tokens.\n * If this is true, this tokenizer will generate V_EXPRESSION_START and V_EXPRESSION_END tokens.\n */\n public expressionEnabled: boolean\n\n /**\n * Initialize this tokenizer.\n * @param text The source code to tokenize.\n * @param parserOptions The parser options.\n */\n public constructor(text: string, parserOptions?: ParserOptions) {\n debug(\"[html] the source code length: %d\", text.length)\n this.text = text\n this.gaps = []\n this.lineTerminators = []\n this.parserOptions = parserOptions || {}\n this.lastCodePoint = this.lastCodePointRaw = NULL\n this.offset = -1\n this.column = -1\n this.line = 1\n this.state = \"DATA\"\n this.returnState = \"DATA\"\n this.reconsuming = false\n this.buffer = []\n this.crStartOffset = -1\n this.crCode = 0\n this.errors = []\n this.committedToken = null\n this.provisionalToken = null\n this.currentToken = null\n this.lastTagOpenToken = null\n this.tokenStartOffset = -1\n this.tokenStartColumn = -1\n this.tokenStartLine = 1\n this.namespace = NS.HTML\n this.expressionEnabled = false\n }\n\n /**\n * Get the next token.\n * @returns The next token or null.\n */\n public nextToken(): Token | null {\n let cp = this.lastCodePoint\n while (\n this.committedToken == null &&\n (cp !== EOF || this.reconsuming)\n ) {\n if (this.provisionalToken != null && !this.isProvisionalState()) {\n this.commitProvisionalToken()\n if (this.committedToken != null) {\n break\n }\n }\n\n if (this.reconsuming) {\n this.reconsuming = false\n cp = this.lastCodePoint\n } else {\n cp = this.consumeNextCodePoint()\n }\n\n debug(\"[html] parse\", cp, this.state)\n this.state = this[this.state](cp)\n }\n\n {\n const token = this.consumeCommittedToken()\n if (token != null) {\n return token\n }\n }\n\n assert(cp === EOF)\n\n if (this.currentToken != null) {\n this.endToken()\n\n const token = this.consumeCommittedToken()\n if (token != null) {\n return token\n }\n }\n return this.currentToken\n }\n\n /**\n * Consume the last committed token.\n * @returns The last committed token.\n */\n private consumeCommittedToken(): Token | null {\n const token = this.committedToken\n this.committedToken = null\n return token\n }\n\n /**\n * Consume the next code point.\n * @returns The consumed code point.\n */\n private consumeNextCodePoint(): number {\n if (this.offset >= this.text.length) {\n this.lastCodePoint = this.lastCodePointRaw = EOF\n return EOF\n }\n\n this.offset += this.lastCodePoint >= 0x10000 ? 2 : 1\n if (this.offset >= this.text.length) {\n this.advanceLocation()\n this.lastCodePoint = this.lastCodePointRaw = EOF\n return EOF\n }\n\n const cp = this.text.codePointAt(this.offset) as number\n\n if (\n isSurrogate(this.text.charCodeAt(this.offset)) &&\n !isSurrogatePair(this.text.charCodeAt(this.offset + 1))\n ) {\n this.reportParseError(\"surrogate-in-input-stream\")\n }\n if (isNonCharacter(cp)) {\n this.reportParseError(\"noncharacter-in-input-stream\")\n }\n if (isControl(cp) && !isWhitespace(cp) && cp !== NULL) {\n this.reportParseError(\"control-character-in-input-stream\")\n }\n\n // Skip LF to convert CRLF → LF.\n if (this.lastCodePointRaw === CARRIAGE_RETURN && cp === LINE_FEED) {\n this.lastCodePoint = this.lastCodePointRaw = LINE_FEED\n this.gaps.push(this.offset)\n return this.consumeNextCodePoint()\n }\n\n // Update locations.\n this.advanceLocation()\n this.lastCodePoint = this.lastCodePointRaw = cp\n\n // To convert CRLF → LF.\n if (cp === CARRIAGE_RETURN) {\n this.lastCodePoint = LINE_FEED\n return LINE_FEED\n }\n\n return cp\n }\n\n /**\n * Advance the current line and column.\n */\n private advanceLocation(): void {\n if (this.lastCodePointRaw === LINE_FEED) {\n this.lineTerminators.push(this.offset)\n this.line += 1\n this.column = 0\n } else {\n this.column += this.lastCodePoint >= 0x10000 ? 2 : 1\n }\n }\n\n /**\n * Directive reconsuming the current code point as the given state.\n * @param state The next state.\n * @returns The next state.\n */\n private reconsumeAs(state: TokenizerState): TokenizerState {\n this.reconsuming = true\n return state\n }\n\n /**\n * Report an invalid character error.\n * @param code The error code.\n */\n private reportParseError(code: ErrorCode): void {\n const error = ParseError.fromCode(\n code,\n this.offset,\n this.line,\n this.column,\n )\n this.errors.push(error)\n\n debug(\"[html] syntax error:\", error.message)\n }\n\n /**\n * Mark the current location as a start of tokens.\n */\n private setStartTokenMark(): void {\n this.tokenStartOffset = this.offset\n this.tokenStartLine = this.line\n this.tokenStartColumn = this.column\n }\n\n /**\n * Mark the current location as a start of tokens.\n */\n private clearStartTokenMark(): void {\n this.tokenStartOffset = -1\n }\n\n /**\n * Start new token.\n * @param type The type of new token.\n * @returns The new token.\n */\n private startToken(type: TokenType): Token {\n if (this.tokenStartOffset === -1) {\n this.setStartTokenMark()\n }\n const offset = this.tokenStartOffset\n const line = this.tokenStartLine\n const column = this.tokenStartColumn\n\n if (this.currentToken != null) {\n this.endToken()\n }\n this.tokenStartOffset = -1\n\n const token = (this.currentToken = {\n type,\n range: [offset, -1],\n loc: {\n start: { line, column },\n end: { line: -1, column: -1 },\n },\n value: \"\",\n })\n\n debug(\"[html] start token: %d %s\", offset, token.type)\n return this.currentToken\n }\n\n /**\n * Commit the current token.\n * @returns The ended token.\n */\n private endToken(): Token | null {\n if (this.currentToken == null) {\n throw new Error(\"Invalid state\")\n }\n if (this.tokenStartOffset === -1) {\n this.setStartTokenMark()\n }\n const token = this.currentToken\n const offset = this.tokenStartOffset\n const line = this.tokenStartLine\n const column = this.tokenStartColumn\n const provisional = this.isProvisionalState()\n\n this.currentToken = null\n this.tokenStartOffset = -1\n\n token.range[1] = offset\n token.loc.end.line = line\n token.loc.end.column = column\n\n if (token.range[0] === offset && !provisional) {\n debug(\n \"[html] abandon token: %j %s %j\",\n token.range,\n token.type,\n token.value,\n )\n return null\n }\n\n if (provisional) {\n if (this.provisionalToken != null) {\n this.commitProvisionalToken()\n }\n this.provisionalToken = token\n debug(\n \"[html] provisional-commit token: %j %s %j\",\n token.range,\n token.type,\n token.value,\n )\n } else {\n this.commitToken(token)\n }\n\n return token\n }\n\n /**\n * Commit the given token.\n * @param token The token to commit.\n */\n private commitToken(token: Token): void {\n assert(\n this.committedToken == null,\n \"Invalid state: the commited token existed already.\",\n )\n debug(\n \"[html] commit token: %j %j %s %j\",\n token.range,\n token.loc,\n token.type,\n token.value,\n )\n\n this.committedToken = token\n if (token.type === \"HTMLTagOpen\") {\n this.lastTagOpenToken = token\n }\n }\n\n /**\n * Check whether this is provisional state or not.\n * @returns `true` if this is provisional state.\n */\n private isProvisionalState(): boolean {\n return (\n this.state.startsWith(\"RCDATA_\") ||\n this.state.startsWith(\"RAWTEXT_\")\n )\n }\n\n /**\n * Commit the last provisional committed token.\n */\n private commitProvisionalToken(): void {\n assert(\n this.provisionalToken != null,\n \"Invalid state: the provisional token was not found.\",\n )\n\n const token = this.provisionalToken\n this.provisionalToken = null\n\n if (token.range[0] < token.range[1]) {\n this.commitToken(token)\n }\n }\n\n /**\n * Cancel the current token and set the last provisional committed token as the current token.\n */\n private rollbackProvisionalToken(): void {\n assert(this.currentToken != null)\n assert(this.provisionalToken != null)\n\n const token = this.currentToken\n debug(\"[html] rollback token: %d %s\", token.range[0], token.type)\n\n this.currentToken = this.provisionalToken\n this.provisionalToken = null\n }\n\n /**\n * Append the given code point into the value of the current token.\n * @param cp The code point to append.\n * @param expected The expected type of the current token.\n */\n private appendTokenValue(cp: number, expected: TokenType | null): void {\n const token = this.currentToken\n if (token == null || (expected != null && token.type !== expected)) {\n const msg1 = expected ? `\"${expected}\" type` : \"any token\"\n const msg2 = token ? `\"${token.type}\" type` : \"no token\"\n\n throw new Error(\n `Tokenizer: Invalid state. Expected ${msg1}, but got ${msg2}.`,\n )\n }\n\n token.value += String.fromCodePoint(cp)\n }\n\n /**\n * Check whether the current token is appropriate `HTMLEndTagOpen` token.\n * @returns {boolean} `true` if the current token is appropriate `HTMLEndTagOpen` token.\n */\n private isAppropriateEndTagOpen(): boolean {\n return (\n this.currentToken != null &&\n this.lastTagOpenToken != null &&\n this.currentToken.type === \"HTMLEndTagOpen\" &&\n this.currentToken.value === this.lastTagOpenToken.value\n )\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#data-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected DATA(cp: number): TokenizerState {\n this.clearStartTokenMark()\n\n while (true) {\n const type = isWhitespace(cp) ? \"HTMLWhitespace\" : \"HTMLText\"\n if (this.currentToken != null && this.currentToken.type !== type) {\n this.endToken()\n return this.reconsumeAs(this.state)\n }\n if (this.currentToken == null) {\n this.startToken(type)\n }\n\n if (cp === AMPERSAND) {\n this.returnState = \"DATA\"\n return \"CHARACTER_REFERENCE\"\n }\n if (cp === LESS_THAN_SIGN) {\n this.setStartTokenMark()\n return \"TAG_OPEN\"\n }\n if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"DATA\"\n return \"V_EXPRESSION_START\"\n }\n if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"DATA\"\n return \"V_EXPRESSION_END\"\n }\n if (cp === EOF) {\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n }\n this.appendTokenValue(cp, type)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RCDATA(cp: number): TokenizerState {\n this.clearStartTokenMark()\n\n while (true) {\n const type = isWhitespace(cp) ? \"HTMLWhitespace\" : \"HTMLRCDataText\"\n if (this.currentToken != null && this.currentToken.type !== type) {\n this.endToken()\n return this.reconsumeAs(this.state)\n }\n if (this.currentToken == null) {\n this.startToken(type)\n }\n\n if (cp === AMPERSAND) {\n this.returnState = \"RCDATA\"\n return \"CHARACTER_REFERENCE\"\n }\n if (cp === LESS_THAN_SIGN) {\n this.setStartTokenMark()\n return \"RCDATA_LESS_THAN_SIGN\"\n }\n if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"RCDATA\"\n return \"V_EXPRESSION_START\"\n }\n if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"RCDATA\"\n return \"V_EXPRESSION_END\"\n }\n if (cp === EOF) {\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n this.appendTokenValue(cp, type)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RAWTEXT(cp: number): TokenizerState {\n this.clearStartTokenMark()\n\n while (true) {\n const type = isWhitespace(cp) ? \"HTMLWhitespace\" : \"HTMLRawText\"\n if (this.currentToken != null && this.currentToken.type !== type) {\n this.endToken()\n return this.reconsumeAs(this.state)\n }\n if (this.currentToken == null) {\n this.startToken(type)\n }\n\n if (cp === LESS_THAN_SIGN) {\n this.setStartTokenMark()\n return \"RAWTEXT_LESS_THAN_SIGN\"\n }\n if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"RAWTEXT\"\n return \"V_EXPRESSION_START\"\n }\n if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"RAWTEXT\"\n return \"V_EXPRESSION_END\"\n }\n if (cp === EOF) {\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n this.appendTokenValue(cp, type)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected TAG_OPEN(cp: number): TokenizerState {\n if (cp === EXCLAMATION_MARK) {\n return \"MARKUP_DECLARATION_OPEN\"\n }\n if (cp === SOLIDUS) {\n return \"END_TAG_OPEN\"\n }\n if (isLetter(cp)) {\n this.startToken(\"HTMLTagOpen\")\n return this.reconsumeAs(\"TAG_NAME\")\n }\n if (cp === QUESTION_MARK) {\n this.reportParseError(\n \"unexpected-question-mark-instead-of-tag-name\",\n )\n this.startToken(\"HTMLBogusComment\")\n return this.reconsumeAs(\"BOGUS_COMMENT\")\n }\n if (cp === EOF) {\n this.clearStartTokenMark()\n this.reportParseError(\"eof-before-tag-name\")\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLText\")\n return \"DATA\"\n }\n\n this.reportParseError(\"invalid-first-character-of-tag-name\")\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLText\")\n return this.reconsumeAs(\"DATA\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#end-tag-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected END_TAG_OPEN(cp: number): TokenizerState {\n if (isLetter(cp)) {\n this.startToken(\"HTMLEndTagOpen\")\n return this.reconsumeAs(\"TAG_NAME\")\n }\n if (cp === GREATER_THAN_SIGN) {\n this.endToken() // < Commit or abandon the current text token.\n this.reportParseError(\"missing-end-tag-name\")\n return \"DATA\"\n }\n if (cp === EOF) {\n this.clearStartTokenMark()\n this.reportParseError(\"eof-before-tag-name\")\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLText\")\n this.appendTokenValue(SOLIDUS, \"HTMLText\")\n return \"DATA\"\n }\n\n this.reportParseError(\"invalid-first-character-of-tag-name\")\n this.startToken(\"HTMLBogusComment\")\n return this.reconsumeAs(\"BOGUS_COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected TAG_NAME(cp: number): TokenizerState {\n while (true) {\n if (isWhitespace(cp)) {\n this.endToken()\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (cp === SOLIDUS) {\n this.endToken()\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n\n this.appendTokenValue(\n isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n null,\n )\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-less-than-sign-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RCDATA_LESS_THAN_SIGN(cp: number): TokenizerState {\n if (cp === SOLIDUS) {\n this.buffer = []\n return \"RCDATA_END_TAG_OPEN\"\n }\n\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRCDataText\")\n return this.reconsumeAs(\"RCDATA\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-end-tag-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RCDATA_END_TAG_OPEN(cp: number): TokenizerState {\n if (isLetter(cp)) {\n this.startToken(\"HTMLEndTagOpen\")\n return this.reconsumeAs(\"RCDATA_END_TAG_NAME\")\n }\n\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRCDataText\")\n this.appendTokenValue(SOLIDUS, \"HTMLRCDataText\")\n return this.reconsumeAs(\"RCDATA\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-end-tag-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RCDATA_END_TAG_NAME(cp: number): TokenizerState {\n while (true) {\n if (isWhitespace(cp) && this.isAppropriateEndTagOpen()) {\n this.endToken()\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (cp === SOLIDUS && this.isAppropriateEndTagOpen()) {\n this.endToken()\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === GREATER_THAN_SIGN && this.isAppropriateEndTagOpen()) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n if (!isLetter(cp)) {\n this.rollbackProvisionalToken()\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRCDataText\")\n this.appendTokenValue(SOLIDUS, \"HTMLRCDataText\")\n for (const cp1 of this.buffer) {\n this.appendTokenValue(cp1, \"HTMLRCDataText\")\n }\n return this.reconsumeAs(\"RCDATA\")\n }\n\n this.appendTokenValue(\n isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n \"HTMLEndTagOpen\",\n )\n this.buffer.push(cp)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-less-than-sign-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RAWTEXT_LESS_THAN_SIGN(cp: number): TokenizerState {\n if (cp === SOLIDUS) {\n this.buffer = []\n return \"RAWTEXT_END_TAG_OPEN\"\n }\n\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRawText\")\n return this.reconsumeAs(\"RAWTEXT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-end-tag-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RAWTEXT_END_TAG_OPEN(cp: number): TokenizerState {\n if (isLetter(cp)) {\n this.startToken(\"HTMLEndTagOpen\")\n return this.reconsumeAs(\"RAWTEXT_END_TAG_NAME\")\n }\n\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRawText\")\n this.appendTokenValue(SOLIDUS, \"HTMLRawText\")\n return this.reconsumeAs(\"RAWTEXT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-end-tag-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RAWTEXT_END_TAG_NAME(cp: number): TokenizerState {\n while (true) {\n if (cp === SOLIDUS && this.isAppropriateEndTagOpen()) {\n this.endToken()\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === GREATER_THAN_SIGN && this.isAppropriateEndTagOpen()) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n if (isWhitespace(cp) && this.isAppropriateEndTagOpen()) {\n this.endToken()\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (!isLetter(cp) && !maybeValidCustomBlock.call(this, cp)) {\n this.rollbackProvisionalToken()\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRawText\")\n this.appendTokenValue(SOLIDUS, \"HTMLRawText\")\n for (const cp1 of this.buffer) {\n this.appendTokenValue(cp1, \"HTMLRawText\")\n }\n return this.reconsumeAs(\"RAWTEXT\")\n }\n\n this.appendTokenValue(\n isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n \"HTMLEndTagOpen\",\n )\n this.buffer.push(cp)\n\n cp = this.consumeNextCodePoint()\n }\n\n function maybeValidCustomBlock(this: Tokenizer, nextCp: number) {\n return (\n this.currentToken &&\n this.lastTagOpenToken?.value.startsWith(\n this.currentToken.value + String.fromCodePoint(nextCp),\n )\n )\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#before-attribute-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected BEFORE_ATTRIBUTE_NAME(cp: number): TokenizerState {\n while (isWhitespace(cp)) {\n cp = this.consumeNextCodePoint()\n }\n\n if (cp === SOLIDUS || cp === GREATER_THAN_SIGN || cp === EOF) {\n return this.reconsumeAs(\"AFTER_ATTRIBUTE_NAME\")\n }\n\n if (cp === EQUALS_SIGN) {\n this.reportParseError(\n \"unexpected-equals-sign-before-attribute-name\",\n )\n this.startToken(\"HTMLIdentifier\")\n this.appendTokenValue(cp, \"HTMLIdentifier\")\n return \"ATTRIBUTE_NAME\"\n }\n\n this.startToken(\"HTMLIdentifier\")\n return this.reconsumeAs(\"ATTRIBUTE_NAME\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#attribute-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected ATTRIBUTE_NAME(cp: number): TokenizerState {\n while (true) {\n if (\n isWhitespace(cp) ||\n cp === SOLIDUS ||\n cp === GREATER_THAN_SIGN ||\n cp === EOF\n ) {\n this.endToken()\n return this.reconsumeAs(\"AFTER_ATTRIBUTE_NAME\")\n }\n if (cp === EQUALS_SIGN) {\n this.startToken(\"HTMLAssociation\")\n return \"BEFORE_ATTRIBUTE_VALUE\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (\n cp === QUOTATION_MARK ||\n cp === APOSTROPHE ||\n cp === LESS_THAN_SIGN\n ) {\n this.reportParseError(\"unexpected-character-in-attribute-name\")\n }\n\n this.appendTokenValue(\n isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n \"HTMLIdentifier\",\n )\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#after-attribute-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected AFTER_ATTRIBUTE_NAME(cp: number): TokenizerState {\n while (isWhitespace(cp)) {\n cp = this.consumeNextCodePoint()\n }\n\n if (cp === SOLIDUS) {\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === EQUALS_SIGN) {\n this.startToken(\"HTMLAssociation\")\n return \"BEFORE_ATTRIBUTE_VALUE\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.startToken(\"HTMLIdentifier\")\n return this.reconsumeAs(\"ATTRIBUTE_NAME\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#before-attribute-value-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected BEFORE_ATTRIBUTE_VALUE(cp: number): TokenizerState {\n this.endToken()\n\n while (isWhitespace(cp)) {\n cp = this.consumeNextCodePoint()\n }\n\n if (cp === GREATER_THAN_SIGN) {\n this.reportParseError(\"missing-attribute-value\")\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n\n this.startToken(\"HTMLLiteral\")\n if (cp === QUOTATION_MARK) {\n return \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"\n }\n if (cp === APOSTROPHE) {\n return \"ATTRIBUTE_VALUE_SINGLE_QUOTED\"\n }\n return this.reconsumeAs(\"ATTRIBUTE_VALUE_UNQUOTED\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(double-quoted)-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected ATTRIBUTE_VALUE_DOUBLE_QUOTED(cp: number): TokenizerState {\n while (true) {\n if (cp === QUOTATION_MARK) {\n return \"AFTER_ATTRIBUTE_VALUE_QUOTED\"\n }\n if (cp === AMPERSAND) {\n this.returnState = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"\n return \"CHARACTER_REFERENCE\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLLiteral\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(single-quoted)-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected ATTRIBUTE_VALUE_SINGLE_QUOTED(cp: number): TokenizerState {\n while (true) {\n if (cp === APOSTROPHE) {\n return \"AFTER_ATTRIBUTE_VALUE_QUOTED\"\n }\n if (cp === AMPERSAND) {\n this.returnState = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\"\n return \"CHARACTER_REFERENCE\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLLiteral\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(unquoted)-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected ATTRIBUTE_VALUE_UNQUOTED(cp: number): TokenizerState {\n while (true) {\n if (isWhitespace(cp)) {\n this.endToken()\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (cp === AMPERSAND) {\n this.returnState = \"ATTRIBUTE_VALUE_UNQUOTED\"\n return \"CHARACTER_REFERENCE\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (\n cp === QUOTATION_MARK ||\n cp === APOSTROPHE ||\n cp === LESS_THAN_SIGN ||\n cp === EQUALS_SIGN ||\n cp === GRAVE_ACCENT\n ) {\n this.reportParseError(\n \"unexpected-character-in-unquoted-attribute-value\",\n )\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLLiteral\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#after-attribute-value-(quoted)-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected AFTER_ATTRIBUTE_VALUE_QUOTED(cp: number): TokenizerState {\n this.endToken()\n\n if (isWhitespace(cp)) {\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (cp === SOLIDUS) {\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.reportParseError(\"missing-whitespace-between-attributes\")\n return this.reconsumeAs(\"BEFORE_ATTRIBUTE_NAME\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#self-closing-start-tag-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected SELF_CLOSING_START_TAG(cp: number): TokenizerState {\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLSelfClosingTagClose\")\n\n // Vue.js supports self-closing elements.\n // So don't switch to RCDATA/RAWTEXT from any elements.\n return \"DATA\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.reportParseError(\"unexpected-solidus-in-tag\")\n this.clearStartTokenMark()\n return this.reconsumeAs(\"BEFORE_ATTRIBUTE_NAME\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#bogus-comment-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected BOGUS_COMMENT(cp: number): TokenizerState {\n while (true) {\n if (cp === GREATER_THAN_SIGN) {\n return \"DATA\"\n }\n\n if (cp === EOF) {\n return \"DATA\"\n }\n if (cp === NULL) {\n cp = NULL_REPLACEMENT\n }\n this.appendTokenValue(cp, null)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected MARKUP_DECLARATION_OPEN(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS && this.text[this.offset + 1] === \"-\") {\n this.offset += 1\n this.column += 1\n\n this.startToken(\"HTMLComment\")\n return \"COMMENT_START\"\n }\n if (\n cp === LATIN_CAPITAL_D &&\n this.text.slice(this.offset + 1, this.offset + 7) === \"OCTYPE\"\n ) {\n // It does not support DOCTYPE.\n // this.offset += 6\n // this.column += 6\n // return \"DOCTYPE\"\n\n // TODO\n this.startToken(\"HTMLBogusComment\")\n this.appendTokenValue(cp, \"HTMLBogusComment\")\n return \"BOGUS_COMMENT\"\n }\n if (\n cp === LEFT_SQUARE_BRACKET &&\n this.text.slice(this.offset + 1, this.offset + 7) === \"CDATA[\"\n ) {\n this.offset += 6\n this.column += 6\n\n if (this.namespace === NS.HTML) {\n this.reportParseError(\"cdata-in-html-content\")\n this.startToken(\"HTMLBogusComment\").value = \"[CDATA[\"\n return \"BOGUS_COMMENT\"\n }\n\n this.startToken(\"HTMLCDataText\")\n return \"CDATA_SECTION\"\n }\n\n this.reportParseError(\"incorrectly-opened-comment\")\n this.startToken(\"HTMLBogusComment\")\n return this.reconsumeAs(\"BOGUS_COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-start-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_START(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_START_DASH\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.reportParseError(\"abrupt-closing-of-empty-comment\")\n return \"DATA\"\n }\n\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-start-dash-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_START_DASH(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_END\"\n }\n\n if (cp === GREATER_THAN_SIGN) {\n this.reportParseError(\"abrupt-closing-of-empty-comment\")\n return \"DATA\"\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT(cp: number): TokenizerState {\n while (true) {\n if (cp === LESS_THAN_SIGN) {\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLComment\")\n return \"COMMENT_LESS_THAN_SIGN\"\n }\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_END_DASH\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLComment\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_LESS_THAN_SIGN(cp: number): TokenizerState {\n while (true) {\n if (cp === EXCLAMATION_MARK) {\n this.appendTokenValue(cp, \"HTMLComment\")\n return \"COMMENT_LESS_THAN_SIGN_BANG\"\n }\n if (cp !== LESS_THAN_SIGN) {\n return this.reconsumeAs(\"COMMENT\")\n }\n\n this.appendTokenValue(cp, \"HTMLComment\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_LESS_THAN_SIGN_BANG(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_LESS_THAN_SIGN_BANG_DASH\"\n }\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-dash-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_LESS_THAN_SIGN_BANG_DASH(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"\n }\n return this.reconsumeAs(\"COMMENT_END_DASH\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-dash-dash-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH(\n cp: number,\n ): TokenizerState {\n if (cp !== GREATER_THAN_SIGN && cp !== EOF) {\n this.reportParseError(\"nested-comment\")\n }\n return this.reconsumeAs(\"COMMENT_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-end-dash-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_END_DASH(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_END\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-end-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_END(cp: number): TokenizerState {\n while (true) {\n if (cp === GREATER_THAN_SIGN) {\n return \"DATA\"\n }\n if (cp === EXCLAMATION_MARK) {\n return \"COMMENT_END_BANG\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n\n if (cp !== HYPHEN_MINUS) {\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n return this.reconsumeAs(\"COMMENT\")\n }\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-end-bang-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_END_BANG(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n this.appendTokenValue(EXCLAMATION_MARK, \"HTMLComment\")\n return \"COMMENT_END_DASH\"\n }\n\n if (cp === GREATER_THAN_SIGN) {\n this.reportParseError(\"incorrectly-closed-comment\")\n return \"DATA\"\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n this.appendTokenValue(EXCLAMATION_MARK, \"HTMLComment\")\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#cdata-section-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CDATA_SECTION(cp: number): TokenizerState {\n while (true) {\n if (cp === RIGHT_SQUARE_BRACKET) {\n return \"CDATA_SECTION_BRACKET\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-cdata\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLCDataText\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#cdata-section-bracket-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CDATA_SECTION_BRACKET(cp: number): TokenizerState {\n if (cp === RIGHT_SQUARE_BRACKET) {\n return \"CDATA_SECTION_END\"\n }\n\n this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n return this.reconsumeAs(\"CDATA_SECTION\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#cdata-section-end-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CDATA_SECTION_END(cp: number): TokenizerState {\n while (true) {\n if (cp === GREATER_THAN_SIGN) {\n return \"DATA\"\n }\n if (cp !== RIGHT_SQUARE_BRACKET) {\n this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n return this.reconsumeAs(\"CDATA_SECTION\")\n }\n\n this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CHARACTER_REFERENCE(cp: number): TokenizerState {\n this.crStartOffset = this.offset - 1\n this.buffer = [AMPERSAND]\n\n if (isDigit(cp) || isLetter(cp)) {\n return this.reconsumeAs(\"NAMED_CHARACTER_REFERENCE\")\n }\n if (cp === NUMBER_SIGN) {\n this.buffer.push(cp)\n return \"NUMERIC_CHARACTER_REFERENCE\"\n }\n return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected NAMED_CHARACTER_REFERENCE(cp: number): TokenizerState {\n for (const entitySet of entitySets) {\n const length = entitySet.length\n const entities = entitySet.entities\n const text = this.text.slice(this.offset, this.offset + length)\n const codepoints = entities[text]\n\n if (codepoints == null) {\n continue\n }\n\n const semi = text.endsWith(\";\")\n const next = this.text.codePointAt(this.offset + 1)\n\n this.offset += length - 1\n this.column += length - 1\n\n if (\n this.returnState.startsWith(\"ATTR\") &&\n !semi &&\n next != null &&\n (next === EQUALS_SIGN || isLetter(next) || isDigit(next))\n ) {\n for (const cp1 of text) {\n this.buffer.push(cp1.codePointAt(0) as number)\n }\n } else {\n if (!semi) {\n this.reportParseError(\n \"missing-semicolon-after-character-reference\",\n )\n }\n this.buffer = codepoints\n }\n\n return \"CHARACTER_REFERENCE_END\"\n }\n\n for (const cp0 of this.buffer) {\n this.appendTokenValue(cp0, null)\n }\n this.appendTokenValue(cp, null)\n\n return \"AMBIGUOUS_AMPERSAND\"\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#ambiguous-ampersand-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected AMBIGUOUS_AMPERSAND(cp: number): TokenizerState {\n while (isDigit(cp) || isLetter(cp)) {\n this.appendTokenValue(cp, null)\n cp = this.consumeNextCodePoint()\n }\n\n if (cp === SEMICOLON) {\n this.reportParseError(\"unknown-named-character-reference\")\n }\n return this.reconsumeAs(this.returnState)\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected NUMERIC_CHARACTER_REFERENCE(cp: number): TokenizerState {\n this.crCode = 0\n\n if (cp === LATIN_SMALL_X || cp === LATIN_CAPITAL_X) {\n this.buffer.push(cp)\n return \"HEXADEMICAL_CHARACTER_REFERENCE_START\"\n }\n return this.reconsumeAs(\"DECIMAL_CHARACTER_REFERENCE_START\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#hexademical-character-reference-start-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected HEXADEMICAL_CHARACTER_REFERENCE_START(\n cp: number,\n ): TokenizerState {\n if (isHexDigit(cp)) {\n return this.reconsumeAs(\"HEXADEMICAL_CHARACTER_REFERENCE\")\n }\n\n this.reportParseError(\n \"absence-of-digits-in-numeric-character-reference\",\n )\n return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#decimal-character-reference-start-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected DECIMAL_CHARACTER_REFERENCE_START(cp: number): TokenizerState {\n if (isDigit(cp)) {\n return this.reconsumeAs(\"DECIMAL_CHARACTER_REFERENCE\")\n }\n\n this.reportParseError(\n \"absence-of-digits-in-numeric-character-reference\",\n )\n return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#hexademical-character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected HEXADEMICAL_CHARACTER_REFERENCE(cp: number): TokenizerState {\n while (true) {\n if (isDigit(cp)) {\n this.crCode = 16 * this.crCode + (cp - 0x30)\n } else if (isUpperHexDigit(cp)) {\n this.crCode = 16 * this.crCode + (cp - 0x37)\n } else if (isLowerHexDigit(cp)) {\n this.crCode = 16 * this.crCode + (cp - 0x57)\n } else {\n if (cp === SEMICOLON) {\n return \"NUMERIC_CHARACTER_REFERENCE_END\"\n }\n\n this.reportParseError(\n \"missing-semicolon-after-character-reference\",\n )\n return this.reconsumeAs(\"NUMERIC_CHARACTER_REFERENCE_END\")\n }\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#decimal-character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected DECIMAL_CHARACTER_REFERENCE(cp: number): TokenizerState {\n while (true) {\n if (isDigit(cp)) {\n this.crCode = 10 * this.crCode + (cp - 0x30)\n } else {\n if (cp === SEMICOLON) {\n return \"NUMERIC_CHARACTER_REFERENCE_END\"\n }\n\n this.reportParseError(\n \"missing-semicolon-after-character-reference\",\n )\n return this.reconsumeAs(\"NUMERIC_CHARACTER_REFERENCE_END\")\n }\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected NUMERIC_CHARACTER_REFERENCE_END(_cp: number): TokenizerState {\n let code = this.crCode\n\n if (code === 0) {\n this.reportParseError(\"null-character-reference\")\n code = NULL_REPLACEMENT\n } else if (code > 0x10ffff) {\n this.reportParseError(\"character-reference-outside-unicode-range\")\n code = NULL_REPLACEMENT\n } else if (isSurrogate(code)) {\n this.reportParseError(\"surrogate-character-reference\")\n code = NULL_REPLACEMENT\n } else if (isNonCharacter(code)) {\n this.reportParseError(\"noncharacter-character-reference\")\n } else if (code === 0x0d || (isControl(code) && !isWhitespace(code))) {\n this.reportParseError(\"control-character-reference\")\n code = alternativeCR.get(code) || code\n }\n\n this.buffer = [code]\n return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#flush-code-points-consumed-as-a-character-reference\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CHARACTER_REFERENCE_END(_cp: number): TokenizerState {\n assert(this.currentToken != null)\n\n // The this.buffer.length is not new length since it includes surrogate pairs.\n // Calculate new length.\n const token = this.currentToken\n const len0 = token.value.length\n for (const cp1 of this.buffer) {\n this.appendTokenValue(cp1, null)\n }\n const newLength = token.value.length - len0\n\n // Make gaps in the difference of length.\n for (let i = this.crStartOffset + newLength; i < this.offset; ++i) {\n this.gaps.push(i)\n }\n\n return this.reconsumeAs(this.returnState)\n }\n\n /**\n * Original state.\n * Create `{{ `token.\n * @param cp The current code point.\n * @returns The next state.\n */\n protected V_EXPRESSION_START(cp: number): TokenizerState {\n if (cp === LEFT_CURLY_BRACKET) {\n this.startToken(\"VExpressionStart\")\n this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n\n if (\n !(\n this.parserOptions.vueFeatures?.interpolationAsNonHTML ??\n true\n )\n ) {\n return this.returnState\n }\n\n const closeIndex = this.text.indexOf(\"}}\", this.offset + 1)\n if (closeIndex === -1) {\n this.reportParseError(\"x-missing-interpolation-end\")\n return this.returnState\n }\n this.vExpressionScriptState = {\n state: this.returnState,\n }\n return \"V_EXPRESSION_DATA\"\n }\n\n this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n return this.reconsumeAs(this.returnState)\n }\n\n /**\n * Original state.\n * Parse in interpolation.\n * @see https://github.com/vuejs/vue-next/blob/3a6b1207fa39cb35eed5bae0b5fdcdb465926bca/packages/compiler-core/src/parse.ts#L752\n * @param cp The current code point.\n * @returns The next state.\n */\n protected V_EXPRESSION_DATA(cp: number): TokenizerState {\n this.clearStartTokenMark()\n const state = this.vExpressionScriptState!.state\n\n while (true) {\n const type = isWhitespace(cp)\n ? \"HTMLWhitespace\"\n : state === \"RCDATA\"\n ? \"HTMLRCDataText\"\n : state === \"RAWTEXT\"\n ? \"HTMLRawText\"\n : \"HTMLText\"\n if (this.currentToken != null && this.currentToken.type !== type) {\n this.endToken()\n return this.reconsumeAs(this.state)\n }\n if (this.currentToken == null) {\n this.startToken(type)\n }\n\n if (cp === AMPERSAND && state !== \"RAWTEXT\") {\n this.returnState = \"V_EXPRESSION_DATA\"\n return \"CHARACTER_REFERENCE\"\n }\n // if (cp === LESS_THAN_SIGN) {\n // this.setStartTokenMark()\n // return \"TAG_OPEN\"\n // }\n if (cp === RIGHT_CURLY_BRACKET) {\n this.setStartTokenMark()\n this.returnState = \"V_EXPRESSION_DATA\"\n return \"V_EXPRESSION_END\"\n }\n // Already checked\n /* istanbul ignore next */\n if (cp === EOF) {\n this.reportParseError(\"x-missing-interpolation-end\")\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n }\n this.appendTokenValue(cp, type)\n\n cp = this.consumeNextCodePoint()\n }\n }\n /**\n * Create `}} `token.\n * @param cp The current code point.\n * @returns The next state.\n */\n protected V_EXPRESSION_END(cp: number): TokenizerState {\n if (cp === RIGHT_CURLY_BRACKET) {\n this.startToken(\"VExpressionEnd\")\n this.appendTokenValue(RIGHT_CURLY_BRACKET, null)\n this.appendTokenValue(RIGHT_CURLY_BRACKET, null)\n if (this.vExpressionScriptState) {\n const state = this.vExpressionScriptState.state\n this.vExpressionScriptState = null\n return state\n }\n return this.returnState\n }\n\n this.appendTokenValue(RIGHT_CURLY_BRACKET, null)\n return this.reconsumeAs(this.returnState)\n }\n}\n\n/*eslint-enable no-param-reassign */\n","/**\n * Creates a memoized version of the provided function. The memoized function caches\n * results based on the argument it receives, so if the same argument is passed again,\n * it returns the cached result instead of recomputing it.\n *\n * This function works with functions that take zero or just one argument. If your function\n * originally takes multiple arguments, you should refactor it to take a single object or array\n * that combines those arguments.\n *\n * If the argument is not primitive (e.g., arrays or objects), provide a\n * `getCacheKey` function to generate a unique cache key for proper caching.\n *\n * @template F - The type of the function to be memoized.\n * @param {F} fn - The function to be memoized. It should accept a single argument and return a value.\n * @param {MemoizeOptions<Parameters<F>[0], ReturnType<F>>} [options={}] - Optional configuration for the memoization.\n * @param {MemoizeCache<any, V>} [options.cache] - The cache object used to store results. Defaults to a new `Map`.\n * @param {(args: A) => unknown} [options.getCacheKey] - An optional function to generate a unique cache key for each argument.\n *\n * @returns The memoized function with an additional `cache` property that exposes the internal cache.\n *\n * @example\n * // Example using the default cache\n * const add = (x: number) => x + 10;\n * const memoizedAdd = memoize(add);\n *\n * console.log(memoizedAdd(5)); // 15\n * console.log(memoizedAdd(5)); // 15 (cached result)\n * console.log(memoizedAdd.cache.size); // 1\n *\n * @example\n * // Example using a custom resolver\n * const sum = (arr: number[]) => arr.reduce((x, y) => x + y, 0);\n * const memoizedSum = memoize(sum, { getCacheKey: (arr: number[]) => arr.join(',') });\n * console.log(memoizedSum([1, 2])); // 3\n * console.log(memoizedSum([1, 2])); // 3 (cached result)\n * console.log(memoizedSum.cache.size); // 1\n *\n * @example\n * // Example using a custom cache implementation\n * class CustomCache<K, T> implements MemoizeCache<K, T> {\n * private cache = new Map<K, T>();\n *\n * set(key: K, value: T): void {\n * this.cache.set(key, value);\n * }\n *\n * get(key: K): T | undefined {\n * return this.cache.get(key);\n * }\n *\n * has(key: K): boolean {\n * return this.cache.has(key);\n * }\n *\n * delete(key: K): boolean {\n * return this.cache.delete(key);\n * }\n *\n * clear(): void {\n * this.cache.clear();\n * }\n *\n * get size(): number {\n * return this.cache.size;\n * }\n * }\n * const customCache = new CustomCache<string, number>();\n * const memoizedSumWithCustomCache = memoize(sum, { cache: customCache });\n * console.log(memoizedSumWithCustomCache([1, 2])); // 3\n * console.log(memoizedSumWithCustomCache([1, 2])); // 3 (cached result)\n * console.log(memoizedAddWithCustomCache.cache.size); // 1\n *\n * MIT © Viva Republica, Inc. | https://es-toolkit.dev/\n *\n * The implementation is copied from es-toolkit package:\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/function/memoize.ts\n */\nexport function memoize<F extends (...args: any) => any>(\n fn: F,\n options: {\n cache?: MemoizeCache<any, ReturnType<F>>\n getCacheKey?: (args: Parameters<F>[0]) => unknown\n } = {},\n): F & { cache: MemoizeCache<any, ReturnType<F>> } {\n const { cache = new Map<unknown, ReturnType<F>>(), getCacheKey } = options\n\n const memoizedFn = function (\n this: unknown,\n arg: Parameters<F>[0],\n ): ReturnType<F> {\n const key = getCacheKey ? getCacheKey(arg) : arg\n\n if (cache.has(key)) {\n return cache.get(key)!\n }\n\n const result = fn.call(this, arg)\n\n cache.set(key, result)\n\n return result\n }\n\n memoizedFn.cache = cache\n\n return memoizedFn as F & { cache: MemoizeCache<any, ReturnType<F>> }\n}\n\n/**\n * Represents a cache for memoization, allowing storage and retrieval of computed values.\n *\n * @template K - The type of keys used to store values in the cache.\n * @template V - The type of values stored in the cache.\n */\ninterface MemoizeCache<K, V> {\n /**\n * Stores a value in the cache with the specified key.\n *\n * @param key - The key to associate with the value.\n * @param value - The value to store in the cache.\n */\n set(key: K, value: V): void\n\n /**\n * Retrieves a value from the cache by its key.\n *\n * @param key - The key of the value to retrieve.\n * @returns The value associated with the key, or undefined if the key does not exist.\n */\n get(key: K): V | undefined\n\n /**\n * Checks if a value exists in the cache for the specified key.\n *\n * @param key - The key to check for existence in the cache.\n * @returns True if the cache contains the key, false otherwise.\n */\n has(key: K): boolean\n\n /**\n * Deletes a value from the cache by its key.\n *\n * @param key - The key of the value to delete.\n * @returns True if the value was successfully deleted, false otherwise.\n */\n delete(key: K): boolean | void\n\n /**\n * Clears all values from the cache.\n */\n clear(): void\n\n /**\n * The number of entries in the cache.\n */\n size: number\n}\n","/**\n * This file is copied from `eslint/lib/util/node-event-generator.js`\n */\nimport type EventEmitter from \"events\"\nimport type { ESQueryOptions, Selector } from \"esquery\"\nimport esquery from \"esquery\"\nimport { memoize } from \"../utils/memoize\"\nimport { union, intersection } from \"../utils/utils\"\nimport type { Node } from \"../ast/index\"\n\ninterface NodeSelector {\n rawSelector: string\n isExit: boolean\n parsedSelector: Selector\n listenerTypes: string[] | null\n attributeCount: number\n identifierCount: number\n}\n\n/**\n * Gets the possible types of a selector\n * @param parsedSelector An object (from esquery) describing the matching behavior of the selector\n * @returns The node types that could possibly trigger this selector, or `null` if all node types could trigger it\n */\nfunction getPossibleTypes(parsedSelector: Selector): string[] | null {\n switch (parsedSelector.type) {\n case \"identifier\":\n return [parsedSelector.value]\n\n case \"matches\": {\n const typesForComponents =\n parsedSelector.selectors.map(getPossibleTypes)\n\n if (typesForComponents.every(Boolean)) {\n return union(...(typesForComponents as string[][]))\n }\n return null\n }\n\n case \"compound\": {\n const typesForComponents = parsedSelector.selectors\n .map(getPossibleTypes)\n .filter(Boolean) as string[][]\n\n // If all of the components could match any type, then the compound could also match any type.\n if (!typesForComponents.length) {\n return null\n }\n\n // If at least one of the components could only match a particular type, the compound could only match\n // the intersection of those types.\n return intersection(...typesForComponents)\n }\n\n case \"child\":\n case \"descendant\":\n case \"sibling\":\n case \"adjacent\":\n return getPossibleTypes(parsedSelector.right)\n\n default:\n return null\n }\n}\n\n/**\n * Counts the number of class, pseudo-class, and attribute queries in this selector\n * @param parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns The number of class, pseudo-class, and attribute queries in this selector\n */\nfunction countClassAttributes(parsedSelector: Selector): number {\n switch (parsedSelector.type) {\n case \"child\":\n case \"descendant\":\n case \"sibling\":\n case \"adjacent\":\n return (\n countClassAttributes(parsedSelector.left) +\n countClassAttributes(parsedSelector.right)\n )\n\n case \"compound\":\n case \"not\":\n case \"matches\":\n return parsedSelector.selectors.reduce(\n (sum, childSelector) =>\n sum + countClassAttributes(childSelector),\n 0,\n )\n\n case \"attribute\":\n case \"field\":\n case \"nth-child\":\n case \"nth-last-child\":\n return 1\n\n default:\n return 0\n }\n}\n\n/**\n * Counts the number of identifier queries in this selector\n * @param parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns The number of identifier queries\n */\nfunction countIdentifiers(parsedSelector: Selector): number {\n switch (parsedSelector.type) {\n case \"child\":\n case \"descendant\":\n case \"sibling\":\n case \"adjacent\":\n return (\n countIdentifiers(parsedSelector.left) +\n countIdentifiers(parsedSelector.right)\n )\n\n case \"compound\":\n case \"not\":\n case \"matches\":\n return parsedSelector.selectors.reduce(\n (sum, childSelector) => sum + countIdentifiers(childSelector),\n 0,\n )\n\n case \"identifier\":\n return 1\n\n default:\n return 0\n }\n}\n\n/**\n * Compares the specificity of two selector objects, with CSS-like rules.\n * @param selectorA An AST selector descriptor\n * @param selectorB Another AST selector descriptor\n * @returns\n * a value less than 0 if selectorA is less specific than selectorB\n * a value greater than 0 if selectorA is more specific than selectorB\n * a value less than 0 if selectorA and selectorB have the same specificity, and selectorA <= selectorB alphabetically\n * a value greater than 0 if selectorA and selectorB have the same specificity, and selectorA > selectorB alphabetically\n */\nfunction compareSpecificity(\n selectorA: NodeSelector,\n selectorB: NodeSelector,\n): number {\n return (\n selectorA.attributeCount - selectorB.attributeCount ||\n selectorA.identifierCount - selectorB.identifierCount ||\n (selectorA.rawSelector <= selectorB.rawSelector ? -1 : 1)\n )\n}\n\n/**\n * Parses a raw selector string, and throws a useful error if parsing fails.\n * @param rawSelector A raw AST selector\n * @returns An object (from esquery) describing the matching behavior of this selector\n * @throws An error if the selector is invalid\n */\nfunction tryParseSelector(rawSelector: string): Selector {\n try {\n return esquery.parse(rawSelector.replace(/:exit$/u, \"\"))\n } catch (err: any) {\n if (typeof err.offset === \"number\") {\n throw new Error(\n `Syntax error in selector \"${rawSelector}\" at position ${err.offset}: ${err.message}`,\n )\n }\n throw err\n }\n}\n\n/**\n * Parses a raw selector string, and returns the parsed selector along with specificity and type information.\n * @param {string} rawSelector A raw AST selector\n * @returns {ASTSelector} A selector descriptor\n */\nconst parseSelector = memoize<(rawSelector: string) => NodeSelector>(\n (rawSelector) => {\n const parsedSelector = tryParseSelector(rawSelector)\n\n return {\n rawSelector,\n isExit: rawSelector.endsWith(\":exit\"),\n parsedSelector,\n listenerTypes: getPossibleTypes(parsedSelector),\n attributeCount: countClassAttributes(parsedSelector),\n identifierCount: countIdentifiers(parsedSelector),\n }\n },\n)\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * The event generator for AST nodes.\n * This implements below interface.\n *\n * ```ts\n * interface EventGenerator {\n * emitter: EventEmitter\n * enterNode(node: ASTNode): void\n * leaveNode(node: ASTNode): void\n * }\n * ```\n */\nexport default class NodeEventGenerator {\n public emitter: EventEmitter\n public esqueryOptions: ESQueryOptions\n\n private currentAncestry: Node[]\n private enterSelectorsByNodeType: Map<string, NodeSelector[]>\n private exitSelectorsByNodeType: Map<string, NodeSelector[]>\n private anyTypeEnterSelectors: NodeSelector[]\n private anyTypeExitSelectors: NodeSelector[]\n\n /**\n * @param emitter - An event emitter which is the destination of events. This emitter must already\n * have registered listeners for all of the events that it needs to listen for.\n */\n public constructor(emitter: EventEmitter, esqueryOptions: ESQueryOptions) {\n this.emitter = emitter\n this.esqueryOptions = esqueryOptions\n this.currentAncestry = []\n this.enterSelectorsByNodeType = new Map()\n this.exitSelectorsByNodeType = new Map()\n this.anyTypeEnterSelectors = []\n this.anyTypeExitSelectors = []\n\n const eventNames =\n typeof emitter.eventNames === \"function\"\n ? // Use the built-in eventNames() function if available (Node 6+)\n emitter.eventNames()\n : /*\n * Otherwise, use the private _events property.\n * Using a private property isn't ideal here, but this seems to\n * be the best way to get a list of event names without overriding\n * addEventListener, which would hurt performance. This property\n * is widely used and unlikely to be removed in a future version\n * (see https://github.com/nodejs/node/issues/1817). Also, future\n * node versions will have eventNames() anyway.\n */\n Object.keys((emitter as any)._events)\n\n for (const rawSelector of eventNames) {\n if (typeof rawSelector === \"symbol\") {\n continue\n }\n const selector = parseSelector(rawSelector)\n\n if (selector.listenerTypes) {\n for (const nodeType of selector.listenerTypes) {\n const typeMap = selector.isExit\n ? this.exitSelectorsByNodeType\n : this.enterSelectorsByNodeType\n\n let selectors = typeMap.get(nodeType)\n if (selectors == null) {\n typeMap.set(nodeType, (selectors = []))\n }\n selectors.push(selector)\n }\n } else {\n ;(selector.isExit\n ? this.anyTypeExitSelectors\n : this.anyTypeEnterSelectors\n ).push(selector)\n }\n }\n\n this.anyTypeEnterSelectors.sort(compareSpecificity)\n this.anyTypeExitSelectors.sort(compareSpecificity)\n for (const selectorList of this.enterSelectorsByNodeType.values()) {\n selectorList.sort(compareSpecificity)\n }\n for (const selectorList of this.exitSelectorsByNodeType.values()) {\n selectorList.sort(compareSpecificity)\n }\n }\n\n /**\n * Checks a selector against a node, and emits it if it matches\n * @param node The node to check\n * @param selector An AST selector descriptor\n */\n private applySelector(node: Node, selector: NodeSelector): void {\n if (\n esquery.matches(\n node,\n selector.parsedSelector,\n this.currentAncestry,\n this.esqueryOptions,\n )\n ) {\n this.emitter.emit(selector.rawSelector, node)\n }\n }\n\n /**\n * Applies all appropriate selectors to a node, in specificity order\n * @param node The node to check\n * @param isExit `false` if the node is currently being entered, `true` if it's currently being exited\n */\n private applySelectors(node: Node, isExit: boolean): void {\n const selectorsByNodeType =\n (isExit\n ? this.exitSelectorsByNodeType\n : this.enterSelectorsByNodeType\n ).get(node.type) || []\n const anyTypeSelectors = isExit\n ? this.anyTypeExitSelectors\n : this.anyTypeEnterSelectors\n\n // selectorsByNodeType and anyTypeSelectors were already sorted by specificity in the constructor.\n // Iterate through each of them, applying selectors in the right order.\n let selectorsByTypeIndex = 0\n let anyTypeSelectorsIndex = 0\n\n while (\n selectorsByTypeIndex < selectorsByNodeType.length ||\n anyTypeSelectorsIndex < anyTypeSelectors.length\n ) {\n if (\n selectorsByTypeIndex >= selectorsByNodeType.length ||\n (anyTypeSelectorsIndex < anyTypeSelectors.length &&\n compareSpecificity(\n anyTypeSelectors[anyTypeSelectorsIndex],\n selectorsByNodeType[selectorsByTypeIndex],\n ) < 0)\n ) {\n this.applySelector(\n node,\n anyTypeSelectors[anyTypeSelectorsIndex++],\n )\n } else {\n this.applySelector(\n node,\n selectorsByNodeType[selectorsByTypeIndex++],\n )\n }\n }\n }\n\n /**\n * Emits an event of entering AST node.\n * @param node - A node which was entered.\n */\n public enterNode(node: Node): void {\n if (node.parent) {\n this.currentAncestry.unshift(node.parent)\n }\n this.applySelectors(node, false)\n }\n\n /**\n * Emits an event of leaving AST node.\n * @param node - A node which was left.\n */\n public leaveNode(node: Node): void {\n this.applySelectors(node, true)\n this.currentAncestry.shift()\n }\n}\n","/**\n * @fileoverview Define utilify functions for token store.\n * @author Toru Nagashima\n */\nimport { sortedIndexBy } from \"../../utils/utils\"\nimport type { HasLocation } from \"../../ast/index\"\n\n/**\n * Gets `token.range[0]` from the given token.\n *\n * @param token - The token to get.\n * @returns The start location.\n * @private\n */\nfunction getStartLocation(token: { range: number[] }): number {\n return token.range[0]\n}\n\n/**\n * Binary-searches the index of the first token which is after the given location.\n * If it was not found, this returns `tokens.length`.\n *\n * @param tokens - It searches the token in this list.\n * @param location - The location to search.\n * @returns The found index or `tokens.length`.\n */\nexport function search(tokens: HasLocation[], location: number): number {\n return sortedIndexBy(\n tokens as { range: number[] }[],\n { range: [location] },\n getStartLocation,\n )\n}\n\n/**\n * Gets the index of the `startLoc` in `tokens`.\n * `startLoc` can be the value of `node.range[1]`, so this checks about `startLoc - 1` as well.\n *\n * @param tokens - The tokens to find an index.\n * @param indexMap - The map from locations to indices.\n * @param startLoc - The location to get an index.\n * @returns The index.\n */\nexport function getFirstIndex(\n tokens: HasLocation[],\n indexMap: { [key: number]: number },\n startLoc: number,\n): number {\n if (startLoc in indexMap) {\n return indexMap[startLoc]\n }\n if (startLoc - 1 in indexMap) {\n const index = indexMap[startLoc - 1]\n const token = index >= 0 && index < tokens.length ? tokens[index] : null\n\n // For the map of \"comment's location -> token's index\", it points the next token of a comment.\n // In that case, +1 is unnecessary.\n if (token && token.range[0] >= startLoc) {\n return index\n }\n return index + 1\n }\n return 0\n}\n\n/**\n * Gets the index of the `endLoc` in `tokens`.\n * The information of end locations are recorded at `endLoc - 1` in `indexMap`, so this checks about `endLoc - 1` as well.\n *\n * @param tokens - The tokens to find an index.\n * @param indexMap - The map from locations to indices.\n * @param endLoc - The location to get an index.\n * @returns The index.\n */\nexport function getLastIndex(\n tokens: HasLocation[],\n indexMap: { [key: number]: number },\n endLoc: number,\n): number {\n if (endLoc in indexMap) {\n return indexMap[endLoc] - 1\n }\n if (endLoc - 1 in indexMap) {\n const index = indexMap[endLoc - 1]\n const token = index >= 0 && index < tokens.length ? tokens[index] : null\n\n // For the map of \"comment's location -> token's index\", it points the next token of a comment.\n // In that case, -1 is necessary.\n if (token && token.range[1] > endLoc) {\n return index - 1\n }\n return index\n }\n return tokens.length - 1\n}\n","/**\n * @fileoverview Define the abstract class about cursors which iterate tokens.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\n\n/**\n * The abstract class about cursors which iterate tokens.\n *\n * This class has 2 abstract methods.\n *\n * - `current: Token | Comment | null` ... The current token.\n * - `moveNext(): boolean` ... Moves this cursor to the next token. If the next token didn't exist, it returns `false`.\n *\n * This is similar to ES2015 Iterators.\n * However, Iterators were slow (at 2017-01), so I created this class as similar to C# IEnumerable.\n *\n * There are the following known sub classes.\n *\n * - ForwardTokenCursor .......... The cursor which iterates tokens only.\n * - BackwardTokenCursor ......... The cursor which iterates tokens only in reverse.\n * - ForwardTokenCommentCursor ... The cursor which iterates tokens and comments.\n * - BackwardTokenCommentCursor .. The cursor which iterates tokens and comments in reverse.\n * - DecorativeCursor\n * - FilterCursor ............ The cursor which ignores the specified tokens.\n * - SkipCursor .............. The cursor which ignores the first few tokens.\n * - LimitCursor ............. The cursor which limits the count of tokens.\n *\n */\nexport default abstract class Cursor {\n public current: Token | null\n\n /**\n * Initializes this cursor.\n */\n public constructor() {\n this.current = null\n }\n\n /**\n * Gets the first token.\n * This consumes this cursor.\n * @returns The first token or null.\n */\n public getOneToken(): Token | null {\n return this.moveNext() ? this.current : null\n }\n\n /**\n * Gets the first tokens.\n * This consumes this cursor.\n * @returns All tokens.\n */\n public getAllTokens(): Token[] {\n const tokens: Token[] = []\n\n while (this.moveNext()) {\n tokens.push(this.current as Token)\n }\n\n return tokens\n }\n\n /**\n * Moves this cursor to the next token.\n * @returns {boolean} `true` if the next token exists.\n * @abstract\n */\n public abstract moveNext(): boolean\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens and comments in reverse.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport { getLastIndex, search } from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens and comments in reverse.\n */\nexport default class BackwardTokenCommentCursor extends Cursor {\n private tokens: Token[]\n private comments: Token[]\n private tokenIndex: number\n private commentIndex: number\n private border: number\n\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n */\n public constructor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n ) {\n super()\n this.tokens = tokens\n this.comments = comments\n this.tokenIndex = getLastIndex(tokens, indexMap, endLoc)\n this.commentIndex = search(comments, endLoc) - 1\n this.border = startLoc\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n const token = this.tokenIndex >= 0 ? this.tokens[this.tokenIndex] : null\n const comment =\n this.commentIndex >= 0 ? this.comments[this.commentIndex] : null\n\n if (token && (!comment || token.range[1] > comment.range[1])) {\n this.current = token\n this.tokenIndex -= 1\n } else if (comment) {\n this.current = comment\n this.commentIndex -= 1\n } else {\n this.current = null\n }\n\n return (\n this.current != null &&\n (this.border === -1 || this.current.range[0] >= this.border)\n )\n }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens only in reverse.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport { getFirstIndex, getLastIndex } from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens only in reverse.\n */\nexport default class BackwardTokenCursor extends Cursor {\n private tokens: Token[]\n private index: number\n private indexEnd: number\n\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n */\n public constructor(\n tokens: Token[],\n _comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n ) {\n super()\n this.tokens = tokens\n this.index = getLastIndex(tokens, indexMap, endLoc)\n this.indexEnd = getFirstIndex(tokens, indexMap, startLoc)\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n if (this.index >= this.indexEnd) {\n this.current = this.tokens[this.index]\n this.index -= 1\n return true\n }\n return false\n }\n\n //\n // Shorthand for performance.\n //\n\n /** @inheritdoc */\n public getOneToken(): Token | null {\n return this.index >= this.indexEnd ? this.tokens[this.index] : null\n }\n}\n","/**\n * @fileoverview Define the abstract class about cursors which manipulate another cursor.\n * @author Toru Nagashima\n */\nimport Cursor from \"./cursor\"\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The abstract class about cursors which manipulate another cursor.\n */\nexport default class DecorativeCursor extends Cursor {\n protected cursor: Cursor\n\n /**\n * Initializes this cursor.\n * @param cursor - The cursor to be decorated.\n */\n public constructor(cursor: Cursor) {\n super()\n this.cursor = cursor\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n const retv = this.cursor.moveNext()\n\n this.current = this.cursor.current\n\n return retv\n }\n}\n","/**\n * @fileoverview Define the cursor which ignores specified tokens.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport type Cursor from \"./cursor\"\nimport DecorativeCursor from \"./decorative-cursor\"\n\n/**\n * The decorative cursor which ignores specified tokens.\n */\nexport default class FilterCursor extends DecorativeCursor {\n private predicate: (token: Token) => boolean\n\n /**\n * Initializes this cursor.\n * @param cursor - The cursor to be decorated.\n * @param predicate - The predicate function to decide tokens this cursor iterates.\n */\n public constructor(cursor: Cursor, predicate: (token: Token) => boolean) {\n super(cursor)\n this.predicate = predicate\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n const predicate = this.predicate\n\n while (super.moveNext()) {\n if (predicate(this.current as Token)) {\n return true\n }\n }\n return false\n }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens and comments.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport { getFirstIndex, search } from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens and comments.\n */\nexport default class ForwardTokenCommentCursor extends Cursor {\n private tokens: Token[]\n private comments: Token[]\n private tokenIndex: number\n private commentIndex: number\n private border: number\n\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n */\n public constructor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n ) {\n super()\n this.tokens = tokens\n this.comments = comments\n this.tokenIndex = getFirstIndex(tokens, indexMap, startLoc)\n this.commentIndex = search(comments, startLoc)\n this.border = endLoc\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n const token =\n this.tokenIndex < this.tokens.length\n ? this.tokens[this.tokenIndex]\n : null\n const comment =\n this.commentIndex < this.comments.length\n ? this.comments[this.commentIndex]\n : null\n\n if (token && (!comment || token.range[0] < comment.range[0])) {\n this.current = token\n this.tokenIndex += 1\n } else if (comment) {\n this.current = comment\n this.commentIndex += 1\n } else {\n this.current = null\n }\n\n return (\n this.current != null &&\n (this.border === -1 || this.current.range[1] <= this.border)\n )\n }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens only.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport { getFirstIndex, getLastIndex } from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens only.\n */\nexport default class ForwardTokenCursor extends Cursor {\n private tokens: Token[]\n protected index: number\n protected indexEnd: number\n\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n */\n public constructor(\n tokens: Token[],\n _comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n ) {\n super()\n this.tokens = tokens\n this.index = getFirstIndex(tokens, indexMap, startLoc)\n this.indexEnd = getLastIndex(tokens, indexMap, endLoc)\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n if (this.index <= this.indexEnd) {\n this.current = this.tokens[this.index]\n this.index += 1\n return true\n }\n return false\n }\n\n //\n // Shorthand for performance.\n //\n\n /** @inheritdoc */\n public getOneToken(): Token | null {\n return this.index <= this.indexEnd ? this.tokens[this.index] : null\n }\n\n /** @inheritdoc */\n public getAllTokens(): Token[] {\n return this.tokens.slice(this.index, this.indexEnd + 1)\n }\n}\n","/**\n * @fileoverview Define the cursor which limits the number of tokens.\n * @author Toru Nagashima\n */\nimport type Cursor from \"./cursor\"\nimport DecorativeCursor from \"./decorative-cursor\"\n\n/**\n * The decorative cursor which limits the number of tokens.\n */\nexport default class LimitCursor extends DecorativeCursor {\n private count: number\n\n /**\n * Initializes this cursor.\n * @param cursor - The cursor to be decorated.\n * @param count - The count of tokens this cursor iterates.\n */\n public constructor(cursor: Cursor, count: number) {\n super(cursor)\n this.count = count\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n if (this.count > 0) {\n this.count -= 1\n return super.moveNext()\n }\n return false\n }\n}\n","/**\n * @fileoverview Define the cursor which ignores the first few tokens.\n * @author Toru Nagashima\n */\nimport type Cursor from \"./cursor\"\nimport DecorativeCursor from \"./decorative-cursor\"\n\n/**\n * The decorative cursor which ignores the first few tokens.\n */\nexport default class SkipCursor extends DecorativeCursor {\n private count: number\n\n /**\n * Initializes this cursor.\n * @param cursor - The cursor to be decorated.\n * @param count - The count of tokens this cursor skips.\n */\n public constructor(cursor: Cursor, count: number) {\n super(cursor)\n this.count = count\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n while (this.count > 0) {\n this.count -= 1\n if (!super.moveNext()) {\n return false\n }\n }\n return super.moveNext()\n }\n}\n","/**\n * @fileoverview Define 2 token factories; forward and backward.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport BackwardTokenCommentCursor from \"./backward-token-comment-cursor\"\nimport BackwardTokenCursor from \"./backward-token-cursor\"\nimport type Cursor from \"./cursor\"\nimport FilterCursor from \"./filter-cursor\"\nimport ForwardTokenCommentCursor from \"./forward-token-comment-cursor\"\nimport ForwardTokenCursor from \"./forward-token-cursor\"\nimport LimitCursor from \"./limit-cursor\"\nimport SkipCursor from \"./skip-cursor\"\n\n/**\n * The cursor factory.\n * @private\n */\nexport class CursorFactory {\n private TokenCursor: typeof BackwardTokenCursor | typeof ForwardTokenCursor\n private TokenCommentCursor:\n | typeof BackwardTokenCommentCursor\n | typeof ForwardTokenCommentCursor\n\n /**\n * Initializes this cursor.\n * @param TokenCursor - The class of the cursor which iterates tokens only.\n * @param TokenCommentCursor - The class of the cursor which iterates the mix of tokens and comments.\n */\n public constructor(\n TokenCursor: typeof BackwardTokenCursor | typeof ForwardTokenCursor,\n TokenCommentCursor:\n | typeof BackwardTokenCommentCursor\n | typeof ForwardTokenCommentCursor,\n ) {\n this.TokenCursor = TokenCursor\n this.TokenCommentCursor = TokenCommentCursor\n }\n\n /**\n * Creates a base cursor instance that can be decorated by createCursor.\n *\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param includeComments - The flag to iterate comments as well.\n * @returns The created base cursor.\n */\n public createBaseCursor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n includeComments: boolean,\n ): Cursor {\n const TokenCursor = includeComments\n ? this.TokenCommentCursor\n : this.TokenCursor\n return new TokenCursor(tokens, comments, indexMap, startLoc, endLoc)\n }\n\n /**\n * Creates a cursor that iterates tokens with normalized options.\n *\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param includeComments - The flag to iterate comments as well.\n * @param filter - The predicate function to choose tokens.\n * @param skip - The count of tokens the cursor skips.\n * @param count - The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.\n * @returns The created cursor.\n */\n // eslint-disable-next-line max-params\n public createCursor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n includeComments: boolean,\n filter: ((token: Token) => boolean) | null,\n skip: number,\n count: number,\n ): Cursor {\n let cursor = this.createBaseCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n includeComments,\n )\n\n if (filter) {\n cursor = new FilterCursor(cursor, filter)\n }\n if (skip >= 1) {\n cursor = new SkipCursor(cursor, skip)\n }\n if (count >= 0) {\n cursor = new LimitCursor(cursor, count)\n }\n\n return cursor\n }\n}\n\nexport const forward = new CursorFactory(\n ForwardTokenCursor,\n ForwardTokenCommentCursor,\n)\nexport const backward = new CursorFactory(\n BackwardTokenCursor,\n BackwardTokenCommentCursor,\n)\n","/**\n * @fileoverview Define the cursor which iterates tokens only, with inflated range.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport ForwardTokenCursor from \"./forward-token-cursor\"\n\n/**\n * The cursor which iterates tokens only, with inflated range.\n * This is for the backward compatibility of padding options.\n */\nexport default class PaddedTokenCursor extends ForwardTokenCursor {\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param beforeCount - The number of tokens this cursor iterates before start.\n * @param afterCount - The number of tokens this cursor iterates after end.\n */\n public constructor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n beforeCount: number,\n afterCount: number,\n ) {\n super(tokens, comments, indexMap, startLoc, endLoc)\n this.index = Math.max(0, this.index - beforeCount)\n this.indexEnd = Math.min(tokens.length - 1, this.indexEnd + afterCount)\n }\n}\n","/**\n * @fileoverview Object to handle access and retrieval of tokens.\n * @author Brandon Mills\n */\nimport assert from \"assert\"\nimport type { HasLocation, Token } from \"../../ast/index\"\nimport * as cursors from \"./cursors/index\"\nimport type Cursor from \"./cursors/cursor\"\nimport ForwardTokenCursor from \"./cursors/forward-token-cursor\"\nimport PaddedTokenCursor from \"./cursors/padded-token-cursor\"\nimport { search } from \"./utils\"\n\nexport type SkipOptions =\n | number\n | ((token: Token) => boolean)\n | {\n includeComments?: boolean\n filter?: (token: Token) => boolean\n skip?: number\n }\nexport type CountOptions =\n | number\n | ((token: Token) => boolean)\n | {\n includeComments?: boolean\n filter?: (token: Token) => boolean\n count?: number\n }\n\n/**\n * Check whether the given token is a comment token or not.\n * @param token The token to check.\n * @returns `true` if the token is a comment token.\n */\nfunction isCommentToken(token: Token): boolean {\n return (\n token.type === \"Line\" ||\n token.type === \"Block\" ||\n token.type === \"Shebang\"\n )\n}\n\n/**\n * Creates the map from locations to indices in `tokens`.\n *\n * The first/last location of tokens is mapped to the index of the token.\n * The first/last location of comments is mapped to the index of the next token of each comment.\n *\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @returns The map from locations to indices in `tokens`.\n * @private\n */\nfunction createIndexMap(\n tokens: Token[],\n comments: Token[],\n): { [key: number]: number } {\n const map = Object.create(null)\n let tokenIndex = 0\n let commentIndex = 0\n let nextStart = 0\n let range: [number, number] | null = null\n\n while (tokenIndex < tokens.length || commentIndex < comments.length) {\n nextStart =\n commentIndex < comments.length\n ? comments[commentIndex].range[0]\n : Number.MAX_SAFE_INTEGER\n while (\n tokenIndex < tokens.length &&\n (range = tokens[tokenIndex].range)[0] < nextStart\n ) {\n map[range[0]] = tokenIndex\n map[range[1] - 1] = tokenIndex\n tokenIndex += 1\n }\n\n nextStart =\n tokenIndex < tokens.length\n ? tokens[tokenIndex].range[0]\n : Number.MAX_SAFE_INTEGER\n while (\n commentIndex < comments.length &&\n (range = comments[commentIndex].range)[0] < nextStart\n ) {\n map[range[0]] = tokenIndex\n map[range[1] - 1] = tokenIndex\n commentIndex += 1\n }\n }\n\n return map\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n *\n * @param factory - The cursor factory to initialize cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param opts - The option object. If this is a number then it's `opts.skip`. If this is a function then it's `opts.filter`.\n * @returns The created cursor.\n * @private\n */\nfunction createCursorWithSkip(\n factory: cursors.CursorFactory,\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n opts?: SkipOptions,\n): Cursor {\n let includeComments = false\n let skip = 0\n let filter: ((token: Token) => boolean) | null = null\n\n if (typeof opts === \"number\") {\n skip = opts | 0\n } else if (typeof opts === \"function\") {\n filter = opts\n } else if (opts) {\n includeComments = Boolean(opts.includeComments)\n skip = opts.skip || 0\n filter = opts.filter || null\n }\n assert(skip >= 0, \"options.skip should be zero or a positive integer.\")\n assert(\n !filter || typeof filter === \"function\",\n \"options.filter should be a function.\",\n )\n\n return factory.createCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n includeComments,\n filter,\n skip,\n -1,\n )\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n *\n * @param factory - The cursor factory to initialize cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param opts - The option object. If this is a number then it's `opts.count`. If this is a function then it's `opts.filter`.\n * @returns The created cursor.\n * @private\n */\nfunction createCursorWithCount(\n factory: cursors.CursorFactory,\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n opts?: CountOptions,\n): Cursor {\n let includeComments = false\n let count = 0\n let countExists = false\n let filter: ((token: Token) => boolean) | null = null\n\n if (typeof opts === \"number\") {\n count = opts | 0\n countExists = true\n } else if (typeof opts === \"function\") {\n filter = opts\n } else if (opts) {\n includeComments = Boolean(opts.includeComments)\n count = opts.count || 0\n countExists = typeof opts.count === \"number\"\n filter = opts.filter || null\n }\n assert(count >= 0, \"options.count should be zero or a positive integer.\")\n assert(\n !filter || typeof filter === \"function\",\n \"options.filter should be a function.\",\n )\n\n return factory.createCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n includeComments,\n filter,\n 0,\n countExists ? count : -1,\n )\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n *\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param beforeCount - The number of tokens before the node to retrieve.\n * @param afterCount - The number of tokens after the node to retrieve.\n * @returns The created cursor.\n * @private\n */\nfunction createCursorWithPadding(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n beforeCount?: CountOptions,\n afterCount?: number,\n): Cursor {\n if (\n typeof beforeCount === \"undefined\" &&\n typeof afterCount === \"undefined\"\n ) {\n return new ForwardTokenCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n )\n }\n if (typeof beforeCount === \"number\" || typeof beforeCount === \"undefined\") {\n return new PaddedTokenCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n beforeCount || 0,\n afterCount || 0,\n )\n }\n return createCursorWithCount(\n cursors.forward,\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n beforeCount,\n )\n}\n\n/**\n * Gets comment tokens that are adjacent to the current cursor position.\n * @param cursor - A cursor instance.\n * @returns An array of comment tokens adjacent to the current cursor position.\n * @private\n */\nfunction getAdjacentCommentTokensFromCursor(cursor: Cursor): Token[] {\n const tokens: Token[] = []\n let currentToken = cursor.getOneToken()\n\n while (currentToken && isCommentToken(currentToken)) {\n tokens.push(currentToken)\n currentToken = cursor.getOneToken()\n }\n\n return tokens\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The token store.\n *\n * This class provides methods to get tokens by locations as fast as possible.\n * The methods are a part of public API, so we should be careful if it changes this class.\n *\n * People can get tokens in O(1) by the hash map which is mapping from the location of tokens/comments to tokens.\n * Also people can get a mix of tokens and comments in O(log k), the k is the number of comments.\n * Assuming that comments to be much fewer than tokens, this does not make hash map from token's locations to comments to reduce memory cost.\n * This uses binary-searching instead for comments.\n */\nexport default class TokenStore {\n private _tokens: Token[]\n private _comments: Token[]\n private _indexMap: { [key: number]: number }\n\n /**\n * Initializes this token store.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n */\n public constructor(tokens: Token[], comments: Token[]) {\n this._tokens = tokens\n this._comments = comments\n this._indexMap = createIndexMap(tokens, comments)\n }\n\n //--------------------------------------------------------------------------\n // Gets single token.\n //--------------------------------------------------------------------------\n\n /**\n * Gets the token starting at the specified index.\n * @param offset - Index of the start of the token's range.\n * @param options - The option object.\n * @returns The token starting at index, or null if no such token.\n */\n public getTokenByRangeStart(\n offset: number,\n options?: { includeComments: boolean },\n ): Token | null {\n const includeComments = Boolean(options && options.includeComments)\n const token = cursors.forward\n .createBaseCursor(\n this._tokens,\n this._comments,\n this._indexMap,\n offset,\n -1,\n includeComments,\n )\n .getOneToken()\n\n if (token?.range[0] === offset) {\n return token\n }\n return null\n }\n\n /**\n * Gets the first token of the given node.\n * @param node - The AST node.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getFirstToken(\n node: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the last token of the given node.\n * @param node - The AST node.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getLastToken(\n node: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the token that precedes a given node or token.\n * @param node - The AST node or token.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getTokenBefore(\n node: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n -1,\n node.range[0],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the token that follows a given node or token.\n * @param node - The AST node or token.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getTokenAfter(\n node: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[1],\n -1,\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the first token between two non-overlapping nodes.\n * @param left - Node before the desired token range.\n * @param right - Node after the desired token range.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getFirstTokenBetween(\n left: HasLocation,\n right: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the last token between two non-overlapping nodes.\n * @param left Node before the desired token range.\n * @param right Node after the desired token range.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getLastTokenBetween(\n left: HasLocation,\n right: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the token that precedes a given node or token in the token stream.\n * This is defined for backward compatibility. Use `includeComments` option instead.\n * TODO: We have a plan to remove this in a future major version.\n * @param node The AST node or token.\n * @param skip A number of tokens to skip.\n * @returns An object representing the token.\n * @deprecated\n */\n public getTokenOrCommentBefore(\n node: HasLocation,\n skip?: number,\n ): Token | null {\n return this.getTokenBefore(node, { includeComments: true, skip })\n }\n\n /**\n * Gets the token that follows a given node or token in the token stream.\n * This is defined for backward compatibility. Use `includeComments` option instead.\n * TODO: We have a plan to remove this in a future major version.\n * @param node The AST node or token.\n * @param skip A number of tokens to skip.\n * @returns An object representing the token.\n * @deprecated\n */\n public getTokenOrCommentAfter(\n node: HasLocation,\n skip?: number,\n ): Token | null {\n return this.getTokenAfter(node, { includeComments: true, skip })\n }\n\n //--------------------------------------------------------------------------\n // Gets multiple tokens.\n //--------------------------------------------------------------------------\n\n /**\n * Gets the first `count` tokens of the given node.\n * @param node - The AST node.\n * @param [options=0] - The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.\n * @param [options.includeComments=false] - The flag to iterate comments as well.\n * @param [options.filter=null] - The predicate function to choose tokens.\n * @param [options.count=0] - The maximum count of tokens the cursor iterates.\n * @returns Tokens.\n */\n public getFirstTokens(node: HasLocation, options?: CountOptions): Token[] {\n return createCursorWithCount(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n options,\n ).getAllTokens()\n }\n\n /**\n * Gets the last `count` tokens of the given node.\n * @param node - The AST node.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens.\n */\n public getLastTokens(node: HasLocation, options?: CountOptions) {\n return createCursorWithCount(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n options,\n )\n .getAllTokens()\n .reverse()\n }\n\n /**\n * Gets the `count` tokens that precedes a given node or token.\n * @param node - The AST node or token.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens.\n */\n public getTokensBefore(node: HasLocation, options?: CountOptions): Token[] {\n return createCursorWithCount(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n -1,\n node.range[0],\n options,\n )\n .getAllTokens()\n .reverse()\n }\n\n /**\n * Gets the `count` tokens that follows a given node or token.\n * @param node - The AST node or token.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens.\n */\n public getTokensAfter(node: HasLocation, options?: CountOptions): Token[] {\n return createCursorWithCount(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[1],\n -1,\n options,\n ).getAllTokens()\n }\n\n /**\n * Gets the first `count` tokens between two non-overlapping nodes.\n * @param left - Node before the desired token range.\n * @param right - Node after the desired token range.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens between left and right.\n */\n public getFirstTokensBetween(\n left: HasLocation,\n right: HasLocation,\n options?: CountOptions,\n ): Token[] {\n return createCursorWithCount(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n options,\n ).getAllTokens()\n }\n\n /**\n * Gets the last `count` tokens between two non-overlapping nodes.\n * @param left Node before the desired token range.\n * @param right Node after the desired token range.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens between left and right.\n */\n public getLastTokensBetween(\n left: HasLocation,\n right: HasLocation,\n options?: CountOptions,\n ): Token[] {\n return createCursorWithCount(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n options,\n )\n .getAllTokens()\n .reverse()\n }\n\n /**\n * Gets all tokens that are related to the given node.\n * @param node - The AST node.\n * @param beforeCount - The number of tokens before the node to retrieve.\n * @param afterCount - The number of tokens after the node to retrieve.\n * @returns Array of objects representing tokens.\n */\n public getTokens(\n node: HasLocation,\n beforeCount?: CountOptions,\n afterCount?: number,\n ): Token[] {\n return createCursorWithPadding(\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n beforeCount,\n afterCount,\n ).getAllTokens()\n }\n\n /**\n * Gets all of the tokens between two non-overlapping nodes.\n * @param left Node before the desired token range.\n * @param right Node after the desired token range.\n * @param padding Number of extra tokens on either side of center.\n * @returns Tokens between left and right.\n */\n public getTokensBetween(\n left: HasLocation,\n right: HasLocation,\n padding?: CountOptions,\n ): Token[] {\n return createCursorWithPadding(\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n padding,\n typeof padding === \"number\" ? padding : undefined,\n ).getAllTokens()\n }\n\n //--------------------------------------------------------------------------\n // Others.\n //--------------------------------------------------------------------------\n\n /**\n * Checks whether any comments exist or not between the given 2 nodes.\n *\n * @param left - The node to check.\n * @param right - The node to check.\n * @returns `true` if one or more comments exist.\n */\n public commentsExistBetween(\n left: HasLocation,\n right: HasLocation,\n ): boolean {\n const index = search(this._comments, left.range[1])\n\n return (\n index < this._comments.length &&\n this._comments[index].range[1] <= right.range[0]\n )\n }\n\n /**\n * Gets all comment tokens directly before the given node or token.\n * @param nodeOrToken The AST node or token to check for adjacent comment tokens.\n * @returns An array of comments in occurrence order.\n */\n public getCommentsBefore(nodeOrToken: HasLocation): Token[] {\n const cursor = createCursorWithCount(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n -1,\n nodeOrToken.range[0],\n { includeComments: true },\n )\n\n return getAdjacentCommentTokensFromCursor(cursor).reverse()\n }\n\n /**\n * Gets all comment tokens directly after the given node or token.\n * @param nodeOrToken The AST node or token to check for adjacent comment tokens.\n * @returns An array of comments in occurrence order.\n */\n public getCommentsAfter(nodeOrToken: HasLocation): Token[] {\n const cursor = createCursorWithCount(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n nodeOrToken.range[1],\n -1,\n { includeComments: true },\n )\n\n return getAdjacentCommentTokensFromCursor(cursor)\n }\n\n /**\n * Gets all comment tokens inside the given node.\n * @param node The AST node to get the comments for.\n * @returns An array of comments in occurrence order.\n */\n public getCommentsInside(node: HasLocation): Token[] {\n return this.getTokens(node, {\n includeComments: true,\n filter: isCommentToken,\n })\n }\n\n /**\n * Returns the location of the given node or token.\n * @param nodeOrToken The node or token to get the location of.\n * @returns The location of the node or token.\n */\n // eslint-disable-next-line class-methods-use-this\n public getLoc(nodeOrToken: HasLocation) {\n return nodeOrToken.loc\n }\n\n /**\n * Returns the range of the given node or token.\n * @param nodeOrToken The node or token to get the range of.\n * @returns The range of the node or token.\n */\n // eslint-disable-next-line class-methods-use-this\n public getRange(nodeOrToken: HasLocation) {\n return nodeOrToken.range\n }\n}\n","import type { Rule, SourceCode } from \"eslint\"\nimport type { ScopeManager, Scope } from \"eslint-scope\"\nimport type {\n ESLintExtendedProgram,\n Node,\n OffsetRange,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VText,\n} from \"../../ast/index\"\nimport { getFallbackKeys, ParseError } from \"../../ast/index\"\nimport { getEslintScope } from \"../../common/eslint-scope\"\nimport { getEcmaVersionIfUseEspree } from \"../../common/espree\"\nimport { fixErrorLocation, fixLocations } from \"../../common/fix-locations\"\nimport type { LocationCalculatorForHtml } from \"../../common/location-calculator\"\nimport type { ParserObject } from \"../../common/parser-object\"\nimport { isEnhancedParserObject } from \"../../common/parser-object\"\nimport type { ParserOptions } from \"../../common/parser-options\"\nimport {\n ANALYZE_SCOPE_DEFAULT_ECMA_VERSION,\n DEFAULT_ECMA_VERSION,\n} from \"../../script-setup/parser-options\"\n\nexport type ESLintCustomBlockParser = ParserObject<any, any>\n\nexport type CustomBlockContext = {\n getSourceCode(): SourceCode\n sourceCode: SourceCode\n parserServices: any\n getAncestors(): any[]\n getDeclaredVariables(node: any): any[]\n getScope(): any\n markVariableAsUsed(name: string): boolean\n\n // Same as the original context.\n id: string\n options: any[]\n settings: { [name: string]: any }\n parserPath: string\n parserOptions: any\n getFilename(): string\n report(descriptor: Rule.ReportDescriptor): void\n}\n\n/**\n * Checks whether the given node is VElement.\n */\nfunction isVElement(\n node: VElement | VExpressionContainer | VText,\n): node is VElement {\n return node.type === \"VElement\"\n}\n\n/**\n * Get the all custom blocks from given document\n * @param document\n */\nexport function getCustomBlocks(\n document: VDocumentFragment | null,\n): VElement[] {\n return document\n ? document.children\n .filter(isVElement)\n .filter(\n (block) =>\n block.name !== \"script\" &&\n block.name !== \"template\" &&\n block.name !== \"style\",\n )\n : []\n}\n\n/**\n * Parse the source code of the given custom block element.\n * @param node The custom block element to parse.\n * @param parser The custom parser.\n * @param globalLocationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseCustomBlockElement(\n node: VElement,\n parser: ESLintCustomBlockParser,\n globalLocationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ESLintExtendedProgram & { error?: ParseError | Error } {\n const text = node.children[0]\n const { code, range, loc } =\n text?.type === \"VText\"\n ? {\n code: text.value,\n range: text.range,\n loc: text.loc,\n }\n : {\n code: \"\",\n range: [\n node.startTag.range[1],\n node.endTag!.range[0],\n ] as OffsetRange,\n loc: {\n start: node.startTag.loc.end,\n end: node.endTag!.loc.start,\n },\n }\n const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n range[0],\n )\n try {\n return parseCustomBlockFragment(\n code,\n parser,\n locationCalculator,\n parserOptions,\n )\n } catch (e) {\n if (!(e instanceof Error)) {\n throw e\n }\n return {\n error: e,\n ast: {\n type: \"Program\",\n sourceType: \"module\",\n loc: {\n start: {\n ...loc.start,\n },\n end: {\n ...loc.end,\n },\n },\n range: [...range],\n body: [],\n tokens: [],\n comments: [],\n },\n }\n }\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param parser The custom parser.\n * @param locationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseCustomBlockFragment(\n code: string,\n parser: ESLintCustomBlockParser,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n try {\n const result = parseBlock(code, parser, {\n ecmaVersion: DEFAULT_ECMA_VERSION,\n loc: true,\n range: true,\n raw: true,\n tokens: true,\n comment: true,\n eslintVisitorKeys: true,\n eslintScopeManager: true,\n ...parserOptions,\n })\n fixLocations(result, locationCalculator)\n return result\n } catch (err) {\n const perr = ParseError.normalize(err)\n if (perr) {\n fixErrorLocation(perr, locationCalculator)\n throw perr\n }\n throw err\n }\n}\n\nfunction parseBlock(\n code: string,\n parser: ESLintCustomBlockParser,\n parserOptions: any,\n): any {\n const result = isEnhancedParserObject(parser)\n ? parser.parseForESLint(code, parserOptions)\n : parser.parse(code, parserOptions)\n\n if (result.ast != null) {\n return result\n }\n return { ast: result }\n}\n\n/**\n * Create shared context.\n *\n * @param text The source code of SFC.\n * @param customBlock The custom block node.\n * @param parsedResult The parse result data\n * @param parserOptions The parser options.\n */\nexport function createCustomBlockSharedContext({\n text,\n customBlock,\n parsedResult,\n globalLocationCalculator,\n parserOptions,\n}: {\n text: string\n customBlock: VElement\n parsedResult: ESLintExtendedProgram & { error?: ParseError | Error }\n globalLocationCalculator: LocationCalculatorForHtml\n parserOptions: any\n}) {\n let sourceCode: SourceCode\n let currentNode: any\n return {\n serCurrentNode(node: any) {\n currentNode = node\n },\n context: {\n getAncestors: () => getSourceCode().getAncestors(currentNode),\n getDeclaredVariables: (...args: any[]) =>\n // @ts-expect-error -- ignore\n getSourceCode().getDeclaredVariables(...args),\n getScope: () => getSourceCode().getScope(currentNode),\n markVariableAsUsed: (name: string) =>\n getSourceCode().markVariableAsUsed(name, currentNode),\n get parserServices() {\n return getSourceCode().parserServices\n },\n getSourceCode,\n get sourceCode() {\n return getSourceCode()\n },\n },\n }\n\n function getSourceCode(): SourceCode {\n if (sourceCode) {\n return sourceCode\n }\n\n const scopeManager = getScopeManager()\n\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const originalSourceCode = new (require(\"eslint\").SourceCode)({\n text,\n ast: parsedResult.ast,\n parserServices: {\n customBlock,\n parseCustomBlockElement(\n parser: ESLintCustomBlockParser,\n options: any,\n ) {\n return parseCustomBlockElement(\n customBlock,\n parser,\n globalLocationCalculator,\n { ...parserOptions, ...options },\n )\n },\n ...parsedResult.services,\n ...(parsedResult.error\n ? { parseError: parsedResult.error }\n : {}),\n },\n scopeManager,\n visitorKeys: parsedResult.visitorKeys,\n })\n\n const polyfills = {\n markVariableAsUsed: (name: string, node: any) =>\n markVariableAsUsed(scopeManager, node, parsedResult.ast, name),\n getScope: (node: any) => getScope(scopeManager, node),\n getAncestors: (node: any) => getAncestors(node),\n getDeclaredVariables: (...args: any[]) =>\n // @ts-expect-error -- ignore\n scopeManager.getDeclaredVariables(...args),\n }\n\n return (sourceCode = new Proxy(originalSourceCode, {\n get(_target, prop) {\n return originalSourceCode[prop] || (polyfills as any)[prop]\n },\n }))\n }\n\n function getScopeManager() {\n if (parsedResult.scopeManager) {\n return parsedResult.scopeManager\n }\n\n const ecmaVersion =\n getEcmaVersionIfUseEspree(parserOptions) ??\n ANALYZE_SCOPE_DEFAULT_ECMA_VERSION\n const ecmaFeatures = parserOptions.ecmaFeatures ?? {}\n const sourceType = parserOptions.sourceType ?? \"script\"\n return getEslintScope().analyze(parsedResult.ast, {\n ignoreEval: true,\n nodejsScope: false,\n impliedStrict: ecmaFeatures.impliedStrict,\n ecmaVersion,\n sourceType,\n fallback: getFallbackKeys,\n })\n }\n}\n\n/* The following source code is copied from `eslint/lib/linter/linter.js` */\n\n/**\n * Gets all the ancestors of a given node\n * @param {ASTNode} node The node\n * @returns {ASTNode[]} All the ancestor nodes in the AST, not including the provided node, starting\n * from the root node and going inwards to the parent node.\n */\nfunction getAncestors(node: Node) {\n const ancestorsStartingAtParent = []\n\n for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n ancestorsStartingAtParent.push(ancestor)\n }\n\n return ancestorsStartingAtParent.reverse()\n}\n\n/**\n * Gets the scope for the current node\n * @param {ScopeManager} scopeManager The scope manager for this AST\n * @param {ASTNode} currentNode The node to get the scope of\n * @returns {eslint-scope.Scope} The scope information for this node\n */\nfunction getScope(scopeManager: ScopeManager, currentNode: Node) {\n // On Program node, get the outermost scope to avoid return Node.js special function scope or ES modules scope.\n const inner = currentNode.type !== \"Program\"\n\n for (\n let node: Node | null = currentNode;\n node;\n node = node.parent ?? null\n ) {\n const scope = scopeManager.acquire(node as any, inner)\n\n if (scope) {\n if (scope.type === \"function-expression-name\") {\n return scope.childScopes[0]\n }\n return scope\n }\n }\n\n return scopeManager.scopes[0]\n}\n\n/**\n * Marks a variable as used in the current scope\n * @param {ScopeManager} scopeManager The scope manager for this AST. The scope may be mutated by this function.\n * @param {ASTNode} currentNode The node currently being traversed\n * @param {Object} parserOptions The options used to parse this text\n * @param {string} name The name of the variable that should be marked as used.\n * @returns {boolean} True if the variable was found and marked as used, false if not.\n */\nfunction markVariableAsUsed(\n scopeManager: ScopeManager,\n currentNode: Node,\n program: Node,\n name: string,\n) {\n const currentScope = getScope(scopeManager, currentNode)\n let initialScope = currentScope\n if (\n currentScope.type === \"global\" &&\n currentScope.childScopes.length > 0 &&\n // top-level scopes refer to a `Program` node\n currentScope.childScopes[0].block === program\n ) {\n initialScope = currentScope.childScopes[0]\n }\n\n for (let scope: Scope | null = initialScope; scope; scope = scope.upper) {\n const variable = scope.variables.find(\n (scopeVar) => scopeVar.name === name,\n )\n\n if (variable) {\n // @ts-expect-error -- ignore\n variable.eslintUsed = true\n return true\n }\n }\n\n return false\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { Rule } from \"eslint\"\nimport EventEmitter from \"events\"\nimport NodeEventGenerator from \"./external/node-event-generator\"\nimport TokenStore from \"./external/token-store/index\"\nimport type {\n ESLintProgram,\n VElement,\n VDocumentFragment,\n VAttribute,\n} from \"./ast/index\"\nimport { getFallbackKeys, KEYS, traverseNodes } from \"./ast/traverse\"\nimport type { LocationCalculatorForHtml } from \"./common/location-calculator\"\nimport type {\n CustomBlockContext,\n ESLintCustomBlockParser,\n} from \"./sfc/custom-block/index\"\nimport {\n createCustomBlockSharedContext,\n getCustomBlocks,\n parseCustomBlockElement,\n} from \"./sfc/custom-block/index\"\nimport type { ParserOptions } from \"./common/parser-options\"\nimport { isSFCFile } from \"./common/parser-options\"\nimport { getLang } from \"./common/ast-utils\"\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\ntype CustomBlockVisitorFactory = (context: CustomBlockContext) =>\n | {\n [key: string]: (...args: any) => void\n }\n | null\n | undefined\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\nexport interface ParserServices {\n /**\n * Define handlers to traverse the template body.\n * @param templateBodyVisitor The template body handlers.\n * @param scriptVisitor The script handlers. This is optional.\n * @param options The options. This is optional.\n */\n defineTemplateBodyVisitor(\n templateBodyVisitor: { [key: string]: (...args: any) => void },\n scriptVisitor?: { [key: string]: (...args: any) => void },\n options?: { templateBodyTriggerSelector: \"Program\" | \"Program:exit\" },\n ): object\n\n /**\n * Define handlers to traverse the document.\n * @param documentVisitor The document handlers.\n * @param options The options. This is optional.\n */\n defineDocumentVisitor(\n documentVisitor: { [key: string]: (...args: any) => void },\n options?: { triggerSelector: \"Program\" | \"Program:exit\" },\n ): object\n\n /**\n * Define handlers to traverse custom blocks.\n * @param context The rule context.\n * @param parser The custom parser.\n * @param rule The custom block rule definition\n * @param scriptVisitor The script handlers. This is optional.\n */\n defineCustomBlocksVisitor(\n context: Rule.RuleContext,\n parser: ESLintCustomBlockParser,\n rule: {\n target:\n | string\n | string[]\n | ((lang: string | null, customBlock: VElement) => boolean)\n create: CustomBlockVisitorFactory\n },\n scriptVisitor: { [key: string]: (...args: any) => void },\n ): { [key: string]: (...args: any) => void }\n\n /**\n * Get the token store of the template body.\n * @returns The token store of template body.\n */\n getTemplateBodyTokenStore(): TokenStore\n\n /**\n * Get the root document fragment.\n * @returns The root document fragment.\n */\n getDocumentFragment(): VDocumentFragment | null\n}\n\n/**\n * Define the parser service\n * @param rootAST\n */\nexport function define(\n sourceText: string,\n rootAST: ESLintProgram,\n document: VDocumentFragment | null,\n globalLocationCalculator: LocationCalculatorForHtml | null,\n { parserOptions }: { parserOptions: ParserOptions },\n): ParserServices {\n const templateBodyEmitters = new Map<string, EventEmitter>()\n const stores = new WeakMap<object, TokenStore>()\n\n const documentEmitters = new Map<string, EventEmitter>()\n\n const customBlocksEmitters = new Map<\n | ESLintCustomBlockParser[\"parseForESLint\"]\n | ESLintCustomBlockParser[\"parse\"],\n {\n context: Rule.RuleContext\n test: (lang: string | null, customBlock: VElement) => boolean\n create: CustomBlockVisitorFactory\n }[]\n >()\n\n const isSFC = isSFCFile(parserOptions)\n\n return {\n /**\n * Define handlers to traverse the template body.\n * @param templateBodyVisitor The template body handlers.\n * @param scriptVisitor The script handlers. This is optional.\n */\n defineTemplateBodyVisitor(\n templateBodyVisitor: { [key: string]: (...args: any) => void },\n scriptVisitor?: { [key: string]: (...args: any) => void },\n options?: {\n templateBodyTriggerSelector: \"Program\" | \"Program:exit\"\n },\n ): object {\n if (scriptVisitor == null) {\n scriptVisitor = {} //eslint-disable-line no-param-reassign\n }\n if (rootAST.templateBody == null) {\n return scriptVisitor\n }\n const templateBodyTriggerSelector =\n options?.templateBodyTriggerSelector ?? \"Program:exit\"\n\n let emitter = templateBodyEmitters.get(templateBodyTriggerSelector)\n\n // If this is the first time, initialize the intermediate event emitter.\n if (emitter == null) {\n emitter = new EventEmitter()\n emitter.setMaxListeners(0)\n templateBodyEmitters.set(templateBodyTriggerSelector, emitter)\n\n const programExitHandler =\n scriptVisitor[templateBodyTriggerSelector]\n scriptVisitor[templateBodyTriggerSelector] = (node) => {\n try {\n if (typeof programExitHandler === \"function\") {\n programExitHandler(node)\n }\n\n // Traverse template body.\n const generator = new NodeEventGenerator(emitter!, {\n visitorKeys: KEYS,\n fallback: getFallbackKeys,\n })\n traverseNodes(\n rootAST.templateBody as VElement,\n generator,\n )\n } finally {\n scriptVisitor[templateBodyTriggerSelector] =\n programExitHandler\n templateBodyEmitters.delete(templateBodyTriggerSelector)\n }\n }\n }\n\n // Register handlers into the intermediate event emitter.\n for (const selector of Object.keys(templateBodyVisitor)) {\n emitter.on(selector, templateBodyVisitor[selector])\n }\n\n return scriptVisitor\n },\n\n /**\n * Define handlers to traverse the document.\n * @param documentVisitor The document handlers.\n * @param options The options. This is optional.\n */\n defineDocumentVisitor(\n documentVisitor: { [key: string]: (...args: any) => void },\n options?: { triggerSelector: \"Program\" | \"Program:exit\" },\n ): object {\n const scriptVisitor: { [key: string]: (...args: any) => void } = {}\n if (!document) {\n return scriptVisitor\n }\n\n const documentTriggerSelector =\n options?.triggerSelector ?? \"Program:exit\"\n\n let emitter = documentEmitters.get(documentTriggerSelector)\n\n // If this is the first time, initialize the intermediate event emitter.\n if (emitter == null) {\n emitter = new EventEmitter()\n emitter.setMaxListeners(0)\n documentEmitters.set(documentTriggerSelector, emitter)\n\n const programExitHandler =\n scriptVisitor[documentTriggerSelector]\n scriptVisitor[documentTriggerSelector] = (node) => {\n try {\n if (typeof programExitHandler === \"function\") {\n programExitHandler(node)\n }\n\n // Traverse document.\n const generator = new NodeEventGenerator(emitter!, {\n visitorKeys: KEYS,\n fallback: getFallbackKeys,\n })\n traverseNodes(document, generator)\n } finally {\n scriptVisitor[documentTriggerSelector] =\n programExitHandler\n documentEmitters.delete(documentTriggerSelector)\n }\n }\n }\n\n // Register handlers into the intermediate event emitter.\n for (const selector of Object.keys(documentVisitor)) {\n emitter.on(selector, documentVisitor[selector])\n }\n\n return scriptVisitor\n },\n\n /**\n * Define handlers to traverse custom blocks.\n * @param context The rule context.\n * @param parser The custom parser.\n * @param rule The custom block rule definition\n * @param scriptVisitor The script handlers. This is optional.\n */\n defineCustomBlocksVisitor(\n context: Rule.RuleContext,\n parser: ESLintCustomBlockParser,\n rule: {\n target:\n | string\n | string[]\n | ((lang: string | null, customBlock: VElement) => boolean)\n create: CustomBlockVisitorFactory\n },\n scriptVisitor: { [key: string]: (...args: any) => void },\n ): { [key: string]: (...args: any) => void } {\n if (scriptVisitor == null) {\n scriptVisitor = {} //eslint-disable-line no-param-reassign\n }\n if (!isSFC) {\n return scriptVisitor\n }\n parserOptions = { ...parserOptions } //eslint-disable-line no-param-reassign\n const customBlocks = getCustomBlocks(document).filter(\n (block) =>\n block.endTag &&\n !block.startTag.attributes.some(\n (attr): attr is VAttribute =>\n !attr.directive && attr.key.name === \"src\",\n ),\n )\n if (!customBlocks.length || globalLocationCalculator == null) {\n return {}\n }\n const key = parser.parseForESLint ?? parser.parse\n let factories = customBlocksEmitters.get(key)\n\n // If this is the first time, initialize the intermediate event emitter.\n if (factories == null) {\n factories = []\n customBlocksEmitters.set(key, factories)\n const visitorFactories = factories\n\n const programExitHandler = scriptVisitor[\"Program:exit\"]\n scriptVisitor[\"Program:exit\"] = (node) => {\n try {\n if (typeof programExitHandler === \"function\") {\n programExitHandler(node)\n }\n for (const customBlock of customBlocks) {\n const lang = getLang(customBlock)\n\n const activeVisitorFactories =\n visitorFactories.filter((f) =>\n f.test(lang, customBlock),\n )\n if (!activeVisitorFactories.length) {\n continue\n }\n\n const parsedResult = parseCustomBlockElement(\n customBlock,\n parser,\n globalLocationCalculator,\n parserOptions,\n )\n\n const {\n serCurrentNode,\n context: customBlockContext,\n } = createCustomBlockSharedContext({\n text: sourceText,\n customBlock,\n parsedResult,\n globalLocationCalculator,\n parserOptions,\n })\n\n const emitter = new EventEmitter()\n emitter.setMaxListeners(0)\n\n for (const factory of activeVisitorFactories) {\n const ctx = {\n ...customBlockContext,\n }\n // @ts-expect-error -- custom context\n ctx.__proto__ = factory.context\n\n const visitor = factory.create(\n ctx as CustomBlockContext,\n )\n // Register handlers into the intermediate event emitter.\n for (const selector of Object.keys(\n visitor ?? {},\n )) {\n emitter.on(selector, visitor![selector])\n }\n }\n\n // Traverse custom block.\n const generator = new NodeEventGenerator(emitter, {\n visitorKeys: parsedResult.visitorKeys,\n fallback: getFallbackKeys,\n })\n traverseNodes(parsedResult.ast, {\n visitorKeys: parsedResult.visitorKeys,\n enterNode(n) {\n serCurrentNode(n)\n generator.enterNode(n)\n },\n leaveNode(n) {\n serCurrentNode(n)\n generator.leaveNode(n)\n },\n })\n }\n } finally {\n scriptVisitor[\"Program:exit\"] = programExitHandler\n customBlocksEmitters.delete(key)\n }\n }\n }\n\n const target = rule.target\n const test =\n typeof target === \"function\"\n ? target\n : Array.isArray(target)\n ? (lang: string | null) =>\n Boolean(lang && target.includes(lang))\n : (lang: string | null) => target === lang\n factories.push({\n context,\n test,\n create: rule.create,\n })\n\n return scriptVisitor\n },\n\n /**\n * Get the token store of the template body.\n * @returns The token store of template body.\n */\n getTemplateBodyTokenStore(): TokenStore {\n const key = document || stores\n let store = stores.get(key)\n\n if (!store) {\n store =\n document != null\n ? new TokenStore(document.tokens, document.comments)\n : new TokenStore([], [])\n stores.set(key, store)\n }\n\n return store\n },\n\n /**\n * Get the root document fragment.\n * @returns The root document fragment.\n */\n getDocumentFragment(): VDocumentFragment | null {\n return document\n },\n }\n}\n","/**\n * @author Yosuke Ota <https://github.com/ota-meshi>\n * See LICENSE file in root directory for full license.\n */\nimport type { ScopeManager, Scope } from \"eslint-scope\"\nimport type {\n ESLintBlockStatement,\n ESLintExportNamedDeclaration,\n ESLintExportSpecifier,\n ESLintExtendedProgram,\n ESLintIdentifier,\n ESLintModuleDeclaration,\n ESLintNode,\n ESLintProgram,\n ESLintStatement,\n Token,\n VElement,\n} from \"../ast/index\"\nimport { ParseError, traverseNodes } from \"../ast/index\"\nimport {\n fixErrorLocation,\n fixLocation,\n fixLocations,\n fixNodeLocations,\n} from \"../common/fix-locations\"\nimport type { LinesAndColumns } from \"../common/lines-and-columns\"\nimport type { LocationCalculator } from \"../common/location-calculator\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport {\n parseScript as parseScriptBase,\n parseScriptFragment,\n} from \"../script/index\"\nimport { extractGeneric } from \"../script/generic\"\nimport { DEFAULT_ECMA_VERSION } from \"./parser-options\"\n\ntype RemapBlock = {\n range: [number, number]\n offset: number\n}\n\n/**\n * `parseScriptSetupElements` rewrites the source code so that it can parse\n * the combination of `<script>` and `<script setup>`, and parses it source code with JavaScript parser.\n * This class holds the information to restore the AST and token locations parsed in the rewritten source code.\n */\nclass CodeBlocks {\n public code: string\n // The location information for remapping.\n public remapBlocks: RemapBlock[] = []\n // The list of extra punctuation locations added to split the statement.\n public splitPunctuators: number[] = []\n\n public constructor() {\n this.code = \"\"\n }\n public get length() {\n return this.code.length\n }\n public append(codeLet: string, originalOffset: number) {\n const rangeStart = this.code.length\n this.code += codeLet.trimEnd()\n this.remapBlocks.push({\n range: [rangeStart, this.code.length],\n offset: originalOffset - rangeStart,\n })\n }\n public appendSplitPunctuators(punctuator: string) {\n this.splitPunctuators.push(this.code.length, this.code.length + 1)\n this.code += `\\n${punctuator}\\n`\n }\n public appendCodeBlocks(codeBlocks: CodeBlocks) {\n const start = this.code.length\n this.code += codeBlocks.code\n this.remapBlocks.push(\n ...codeBlocks.remapBlocks.map(\n (b): RemapBlock => ({\n range: [b.range[0] + start, b.range[1] + start],\n offset: b.offset - start,\n }),\n ),\n )\n this.splitPunctuators.push(\n ...codeBlocks.splitPunctuators.map((s) => s + start),\n )\n }\n}\n\ntype RestoreASTCallback = (node: ESLintStatement) => {\n statement: ESLintStatement | ESLintModuleDeclaration\n tokens: Token[]\n} | null\n/**\n * Some named exports need to be replaced with a different syntax to successfully parse\n * the combination of `<script>` and `<script setup>`.\n * e.g. `export {a,b}` -> `({a,b});`, `export let a` -> `let a`\n * This class holds the callbacks to restore the rewritten syntax AST back to the original `export` AST.\n */\nclass RestoreASTCallbacks {\n private callbacks: {\n range: [number, number]\n callback: RestoreASTCallback\n }[] = []\n public addCallback(\n originalOffsetStart: number,\n range: [number, number],\n callback: RestoreASTCallback,\n ) {\n this.callbacks.push({\n range: [\n originalOffsetStart + range[0],\n originalOffsetStart + range[1],\n ],\n callback,\n })\n }\n public restore(\n program: ESLintProgram,\n scriptSetupStatements: ESLintStatement[],\n linesAndColumns: LinesAndColumns,\n ) {\n if (this.callbacks.length === 0) {\n return\n }\n const callbacks = new Set(this.callbacks)\n for (const statement of scriptSetupStatements) {\n for (const cb of callbacks) {\n if (\n cb.range[0] <= statement.range[0] &&\n statement.range[1] <= cb.range[1]\n ) {\n const restored = cb.callback(statement)\n if (restored) {\n const removeIndex = program.body.indexOf(statement)\n if (removeIndex >= 0) {\n program.body.splice(removeIndex, 1)\n program.body.push(restored.statement)\n program.tokens!.push(...restored.tokens)\n restored.statement.parent = program\n callbacks.delete(cb)\n break\n }\n }\n }\n }\n }\n if (callbacks.size) {\n const [cb] = callbacks\n const loc = linesAndColumns.getLocFromIndex(cb.range[0])\n throw new ParseError(\n \"Could not parse <script setup>. Failed to restore ExportNamedDeclaration.\",\n undefined,\n cb.range[0],\n loc.line,\n loc.column,\n )\n }\n }\n}\n\ntype Postprocess = (\n result: ESLintExtendedProgram,\n context: { scriptSetupBlockRange: [number, number] },\n) => void\n\ntype ScriptSetupCodeBlocks = {\n codeBlocks: CodeBlocks\n // The location of the code of the statements in `<script setup>`.\n scriptSetupBlockRange: [number, number]\n // Post process\n postprocess: Postprocess\n // Used to restore ExportNamedDeclaration.\n restoreASTCallbacks: RestoreASTCallbacks\n}\ntype ScriptSetupModuleCodeBlocks =\n | ScriptSetupCodeBlocks\n | {\n codeBlocks: CodeBlocks\n scriptSetupBlockRange?: undefined\n postprocess?: undefined\n restoreASTCallbacks?: undefined\n }\n\nfunction parseScript(\n code: string,\n parserOptions: ParserOptions,\n locationCalculatorForError: LocationCalculator,\n) {\n try {\n return parseScriptBase(code, parserOptions)\n } catch (err) {\n const perr = ParseError.normalize(err)\n if (perr) {\n // console.log(code)\n fixErrorLocation(perr, locationCalculatorForError)\n throw perr\n }\n throw err\n }\n}\n\n/**\n * Parse the source code of the given `<script setup>` and `<script>` elements.\n * @param scriptSetupElement The `<script setup>` element to parse.\n * @param nodes The `<script>` elements to parse.\n * @param sfcCode The source code of SFC.\n * @param linesAndColumns The lines and columns location calculator.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScriptSetupElements(\n scriptSetupElement: VElement,\n scriptElement: VElement,\n sfcCode: string,\n linesAndColumns: LinesAndColumns,\n originalParserOptions: ParserOptions,\n): ESLintExtendedProgram {\n const parserOptions: ParserOptions = {\n ...originalParserOptions,\n ecmaVersion: originalParserOptions.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n }\n const scriptSetupModuleCodeBlocks = getScriptSetupModuleCodeBlocks(\n scriptSetupElement,\n scriptElement,\n sfcCode,\n linesAndColumns,\n parserOptions,\n )\n if (!scriptSetupModuleCodeBlocks) {\n return parseScriptFragment(\n \"\",\n linesAndColumns.createOffsetLocationCalculator(\n scriptSetupElement.startTag.range[1],\n ),\n parserOptions,\n )\n }\n\n const locationCalculator: LocationCalculator = {\n getFixOffset(offset, kind) {\n const test: (block: RemapBlock) => boolean =\n kind === \"start\"\n ? (block) =>\n block.range[0] <= offset && offset < block.range[1]\n : (block) =>\n block.range[0] < offset && offset <= block.range[1]\n\n for (const block of scriptSetupModuleCodeBlocks.codeBlocks\n .remapBlocks) {\n if (test(block)) {\n return block.offset\n }\n }\n return offset\n },\n getLocFromIndex: linesAndColumns.getLocFromIndex.bind(linesAndColumns),\n }\n\n const result = parseScript(\n scriptSetupModuleCodeBlocks.codeBlocks.code,\n parserOptions,\n locationCalculator,\n )\n if (scriptSetupModuleCodeBlocks.postprocess) {\n scriptSetupModuleCodeBlocks.postprocess(result, {\n scriptSetupBlockRange:\n scriptSetupModuleCodeBlocks.scriptSetupBlockRange,\n })\n }\n\n /* Remap ASTs */\n const scriptSetupStatements = remapAST(result, scriptSetupModuleCodeBlocks)\n\n /* Remap locations */\n remapLocationAndTokens(\n result,\n scriptSetupModuleCodeBlocks,\n locationCalculator,\n )\n\n if (scriptSetupModuleCodeBlocks.restoreASTCallbacks) {\n scriptSetupModuleCodeBlocks.restoreASTCallbacks.restore(\n result.ast,\n scriptSetupStatements,\n linesAndColumns,\n )\n }\n\n // Adjust AST and tokens\n if (result.ast.tokens != null) {\n for (const node of [scriptSetupElement, scriptElement]) {\n const startTag = node.startTag\n const endTag = node.endTag\n\n result.ast.tokens.unshift({\n type: \"Punctuator\",\n range: startTag.range,\n loc: startTag.loc,\n value: \"<script>\",\n })\n if (endTag != null) {\n result.ast.tokens.push({\n type: \"Punctuator\",\n range: endTag.range,\n loc: endTag.loc,\n value: \"</script>\",\n })\n }\n }\n result.ast.tokens.sort((a, b) => a.range[0] - b.range[0])\n }\n\n if (result.ast.comments != null) {\n result.ast.comments.sort((a, b) => a.range[0] - b.range[0])\n }\n result.ast.body.sort((a, b) => a.range[0] - b.range[0])\n\n const programStartOffset = result.ast.body.reduce(\n (start, node) => Math.min(start, node.range[0]),\n result.ast.range[0],\n )\n result.ast.range[0] = programStartOffset\n result.ast.loc.start =\n locationCalculator.getLocFromIndex(programStartOffset)\n if (result.ast.start != null) {\n result.ast.start = [scriptSetupElement, scriptElement].reduce(\n (start, node) => {\n const textNode = node.children[0]\n return Math.min(\n start,\n textNode?.type === \"VText\"\n ? textNode.range[0]\n : node.startTag.range[1],\n )\n },\n result.ast.start,\n )\n }\n\n const programEndOffset = result.ast.body.reduce(\n (end, node) => Math.max(end, node.range[1]),\n 0,\n )\n result.ast.range[1] = programEndOffset\n result.ast.loc.end = locationCalculator.getLocFromIndex(programEndOffset)\n if (result.ast.end != null) {\n result.ast.end = [scriptSetupElement, scriptElement].reduce(\n (end, node) => {\n const textNode = node.children[0]\n return Math.max(\n end,\n textNode?.type === \"VText\"\n ? textNode.range[1]\n : (node.endTag?.range[0] ?? node.range[1]),\n )\n },\n 0,\n )\n }\n\n return result\n}\n\n/**\n * Parses the scripts of the given `<script>` elements and returns\n * the reconstructed source code as a parseable script.\n * It also returns information for remapping the location.\n *\n * For examples, the script is reconstructed as follows.\n *\n * Example 1:\n *\n * ```vue\n * <script>\n * export let count = 42\n * </script>\n * <script setup>\n * import MyComponent from './MyComponent.vue'\n * let count = 42\n * </script>\n * ```\n *\n * ↓\n *\n * ```js\n * export let count = 42\n * ;\n * import MyComponent from './MyComponent.vue';\n * {\n * let count = 42\n * }\n * ```\n *\n * Example 2:\n *\n * ```vue\n * <script>\n * export let count = 42\n * </script>\n * <script setup>\n * import MyComponent1 from './MyComponent1.vue'\n * let count = 42\n * import MyComponent2 from './MyComponent2.vue'\n * let a\n * </script>\n * ```\n *\n * ↓\n *\n * ```js\n * export let count = 42\n * ;\n * import MyComponent1 from './MyComponent1.vue';\n * import MyComponent2 from './MyComponent2.vue';\n * {\n * let count = 42;\n * let a\n * }\n * ```\n *\n * Example 3:\n *\n * ```vue\n * <script>\n * export let count = 42\n * export let count2 = 42\n * </script>\n * <script setup>\n * import MyComponent1 from './MyComponent1.vue'\n * let count = 42\n * export {count as ns}\n * export let count2 = 42\n * count2++\n * </script>\n * ```\n *\n * ↓\n *\n * ```js\n * export let count = 42\n * export let count2 = 42\n * ;\n * import MyComponent1 from './MyComponent1.vue';\n * {\n * let count = 42;\n * let a\n * ;\n * ({count})\n * ;\n * let count2 = 42\n * ;\n * count2++\n * ;\n * }\n * ```\n */\nfunction getScriptSetupModuleCodeBlocks(\n scriptSetupElement: VElement,\n scriptElement: VElement,\n sfcCode: string,\n linesAndColumns: LinesAndColumns,\n parserOptions: ParserOptions,\n): ScriptSetupModuleCodeBlocks | null {\n const scriptSetupCodeBlocks = getScriptSetupCodeBlocks(\n scriptSetupElement,\n sfcCode,\n linesAndColumns,\n parserOptions,\n )\n\n const textNode = scriptElement.children[0]\n if (textNode == null || textNode.type !== \"VText\") {\n return scriptSetupCodeBlocks\n }\n\n const [scriptStartOffset, scriptEndOffset] = textNode.range\n const codeBlocks = new CodeBlocks()\n codeBlocks.append(\n sfcCode.slice(scriptStartOffset, scriptEndOffset),\n scriptStartOffset,\n )\n if (scriptSetupCodeBlocks == null) {\n return { codeBlocks }\n }\n\n codeBlocks.appendSplitPunctuators(\";\")\n const scriptSetupOffset = codeBlocks.length\n codeBlocks.appendCodeBlocks(scriptSetupCodeBlocks.codeBlocks)\n return {\n codeBlocks,\n scriptSetupBlockRange: [\n scriptSetupCodeBlocks.scriptSetupBlockRange[0] + scriptSetupOffset,\n scriptSetupCodeBlocks.scriptSetupBlockRange[1] + scriptSetupOffset,\n ],\n postprocess: scriptSetupCodeBlocks.postprocess,\n restoreASTCallbacks: scriptSetupCodeBlocks.restoreASTCallbacks,\n }\n}\n\n/**\n * Parses the script in the given `<script setup>` and returns the source code with\n * the import blocks and other statements reconstructed.\n * It also returns information for remapping the location.\n */\nfunction getScriptSetupCodeBlocks(\n node: VElement,\n sfcCode: string,\n linesAndColumns: LinesAndColumns,\n parserOptions: ParserOptions,\n): ScriptSetupCodeBlocks | null {\n const textNode = node.children[0]\n if (textNode == null || textNode.type !== \"VText\") {\n return null\n }\n\n const [scriptSetupStartOffset, scriptSetupEndOffset] = textNode.range\n const scriptCode = sfcCode.slice(\n scriptSetupStartOffset,\n scriptSetupEndOffset,\n )\n\n const offsetLocationCalculator =\n linesAndColumns.createOffsetLocationCalculator(scriptSetupStartOffset)\n\n const { ast, visitorKeys } = parseScript(\n scriptCode,\n { ...parserOptions, project: undefined, projectService: undefined },\n offsetLocationCalculator,\n )\n\n // Holds the `import` and re-`export` statements.\n // All import and re-`export` statements are hoisted to the top.\n const importCodeBlocks = new CodeBlocks()\n // Holds statements other than `import`, re-`export` and `export default` statements.\n // This is moved to a block statement to avoid conflicts with variables of the same name in `<script>`.\n const statementCodeBlocks = new CodeBlocks()\n // Holds `export default` statements.\n // All `export default` statements are move to the bottom.\n const exportDefaultCodeBlocks = new CodeBlocks()\n // It holds the information to restore the transformation source code of the export statements held in `statementCodeBlocks`.\n const restoreASTCallbacks = new RestoreASTCallbacks()\n\n let usedOffset = 0\n\n /**\n * Consume and append the given range of code to the given codeBlocks.\n */\n function append(codeBlocks: CodeBlocks, start: number, end: number) {\n if (start < end) {\n codeBlocks.append(\n scriptCode.slice(start, end),\n scriptSetupStartOffset + start,\n )\n usedOffset = end\n return true\n }\n return false\n }\n\n /**\n * Append the given range of import or export statement to the given codeBlocks.\n */\n function appendRangeAsStatement(\n codeBlocks: CodeBlocks,\n start: number,\n end: number,\n ) {\n if (append(codeBlocks, start, end)) {\n codeBlocks.appendSplitPunctuators(\";\")\n }\n }\n\n function transformExportNamed(body: ESLintExportNamedDeclaration) {\n const [start, end] = getNodeFullRange(body)\n // Consume code up to the start position.\n appendRangeAsStatement(statementCodeBlocks, usedOffset, start)\n\n const tokens = ast.tokens!\n const exportTokenIndex = tokens.findIndex(\n (t) => t.range[0] === body.range[0],\n )\n const exportToken = tokens[exportTokenIndex]\n if (exportToken?.value === \"export\") {\n // Consume code up to the start position of `export`.\n // The code may contain legacy decorators.\n append(statementCodeBlocks, usedOffset, exportToken.range[0])\n if (body.declaration) {\n // Append declaration section (Skip `export` token)\n appendRangeAsStatement(\n statementCodeBlocks,\n exportToken.range[1],\n end,\n )\n\n restoreASTCallbacks.addCallback(\n scriptSetupStartOffset,\n [start, end],\n (statement) => {\n if (statement.type !== body.declaration!.type) {\n return null\n }\n fixNodeLocations(\n body,\n visitorKeys,\n offsetLocationCalculator,\n )\n fixLocation(exportToken, offsetLocationCalculator)\n body.declaration = statement\n statement.parent = body\n return {\n statement: body,\n tokens: [exportToken],\n }\n },\n )\n } else {\n // Append the code that converted specifiers to destructuring.\n statementCodeBlocks.appendSplitPunctuators(\"(\")\n const restoreTokens: Token[] = [exportToken]\n let startOffset = exportToken.range[1]\n for (const spec of body.specifiers) {\n if (spec.local.range[0] < spec.exported.range[0]) {\n // {a as b}\n const localTokenIndex = tokens.findIndex(\n (t) => t.range[0] === spec.local.range[0],\n exportTokenIndex,\n )\n checkToken(\n tokens[localTokenIndex],\n (spec.local as ESLintIdentifier).name,\n )\n const asToken = tokens[localTokenIndex + 1]\n checkToken(asToken, \"as\")\n restoreTokens.push(asToken)\n const exportedToken = tokens[localTokenIndex + 2]\n checkToken(\n exportedToken,\n spec.exported.type === \"Identifier\"\n ? spec.exported.name\n : spec.exported.raw,\n )\n restoreTokens.push(exportedToken)\n // Skip `as` token\n append(\n statementCodeBlocks,\n startOffset,\n asToken.range[0],\n )\n append(\n statementCodeBlocks,\n asToken.range[1],\n exportedToken.range[0],\n )\n startOffset = exportedToken.range[1]\n }\n }\n append(statementCodeBlocks, startOffset, end)\n statementCodeBlocks.appendSplitPunctuators(\")\")\n statementCodeBlocks.appendSplitPunctuators(\";\")\n\n restoreASTCallbacks.addCallback(\n scriptSetupStartOffset,\n [start, end],\n (statement) => {\n if (\n statement.type !== \"ExpressionStatement\" ||\n statement.expression.type !== \"ObjectExpression\"\n ) {\n return null\n }\n // preprocess and check\n const locals: ESLintIdentifier[] = []\n for (const prop of statement.expression.properties) {\n if (\n prop.type !== \"Property\" ||\n prop.value.type !== \"Identifier\"\n ) {\n return null\n }\n locals.push(prop.value)\n }\n if (body.specifiers.length !== locals.length) {\n return null\n }\n const map = new Map<\n ESLintExportSpecifier,\n ESLintIdentifier\n >()\n for (\n let index = 0;\n index < body.specifiers.length;\n index++\n ) {\n const spec = body.specifiers[index]\n const local = locals[index]\n map.set(spec, local)\n }\n\n // restore\n fixNodeLocations(\n body,\n visitorKeys,\n offsetLocationCalculator,\n )\n for (const token of restoreTokens) {\n fixLocation(token, offsetLocationCalculator)\n }\n for (const [spec, local] of map) {\n spec.local = local\n local.parent = spec\n }\n return {\n statement: body,\n tokens: restoreTokens,\n }\n },\n )\n }\n } else {\n // Unknown format\n appendRangeAsStatement(statementCodeBlocks, usedOffset, end)\n }\n }\n\n for (const body of ast.body) {\n if (\n body.type === \"ImportDeclaration\" ||\n body.type === \"ExportAllDeclaration\" ||\n (body.type === \"ExportNamedDeclaration\" && body.source != null)\n ) {\n const [start, end] = getNodeFullRange(body)\n // Consume code up to the start position.\n appendRangeAsStatement(statementCodeBlocks, usedOffset, start)\n // Append declaration\n appendRangeAsStatement(importCodeBlocks, start, end)\n } else if (body.type === \"ExportDefaultDeclaration\") {\n const [start, end] = getNodeFullRange(body)\n // Consume code up to the start position.\n appendRangeAsStatement(statementCodeBlocks, usedOffset, start)\n // Append declaration\n appendRangeAsStatement(exportDefaultCodeBlocks, start, end)\n } else if (body.type === \"ExportNamedDeclaration\") {\n // Transform ExportNamedDeclaration\n // The transformed statement ASTs are restored by RestoreASTCallbacks.\n // e.g.\n // - `export let v = 42` -> `let v = 42`\n // - `export {foo, bar as Bar}` -> `({foo, bar})`\n transformExportNamed(body)\n }\n }\n // Consume the remaining code.\n appendRangeAsStatement(\n statementCodeBlocks,\n usedOffset,\n scriptSetupEndOffset,\n )\n\n // Creates a code block that combines import, statement block, and export default.\n const codeBlocks = new CodeBlocks()\n\n let postprocess: Postprocess = () => {\n // noop\n }\n\n codeBlocks.appendCodeBlocks(importCodeBlocks)\n const scriptSetupBlockRangeStart = codeBlocks.length\n codeBlocks.appendSplitPunctuators(\"{\")\n const generic = extractGeneric(node)\n if (generic) {\n const defineGenericTypeRangeStart = codeBlocks.length\n for (const defineType of generic.defineTypes) {\n codeBlocks.append(defineType.define, defineType.node.range[0])\n codeBlocks.appendSplitPunctuators(\";\")\n }\n const defineGenericTypeRangeEnd = codeBlocks.length\n postprocess = (eslintResult, context) => {\n const diffOffset =\n context.scriptSetupBlockRange[0] - scriptSetupBlockRangeStart\n const defineGenericTypeRange = [\n defineGenericTypeRangeStart + diffOffset,\n defineGenericTypeRangeEnd + diffOffset,\n ] as const\n\n function isTypeBlock(\n block: ESLintNode,\n ): block is ESLintBlockStatement {\n return (\n block.type === \"BlockStatement\" &&\n context.scriptSetupBlockRange[0] <= block.range[0] &&\n block.range[1] <= context.scriptSetupBlockRange[1]\n )\n }\n\n generic.postprocess({\n result: eslintResult,\n getTypeBlock: (program) => program.body.find(isTypeBlock)!,\n isRemoveTarget(nodeOrToken) {\n return (\n defineGenericTypeRange[0] <= nodeOrToken.range[0] &&\n nodeOrToken.range[1] <= defineGenericTypeRange[1]\n )\n },\n getTypeDefScope(scopeManager) {\n const moduleScope =\n scopeManager.globalScope.childScopes.find(\n (s) => s.type === \"module\",\n ) ?? scopeManager.globalScope\n return moduleScope.childScopes.find((scope) =>\n isTypeBlock(scope.block as ESLintNode),\n )!\n },\n })\n }\n }\n codeBlocks.appendCodeBlocks(statementCodeBlocks)\n codeBlocks.appendSplitPunctuators(\"}\")\n const scriptSetupBlockRangeEnd = codeBlocks.length\n codeBlocks.appendCodeBlocks(exportDefaultCodeBlocks)\n return {\n codeBlocks,\n scriptSetupBlockRange: [\n scriptSetupBlockRangeStart,\n scriptSetupBlockRangeEnd,\n ],\n postprocess,\n restoreASTCallbacks,\n }\n\n function getNodeFullRange(n: ESLintNode) {\n let start = n.range[0]\n let end = n.range[1]\n traverseNodes(n, {\n visitorKeys,\n enterNode(c) {\n start = Math.min(start, c.range[0])\n end = Math.max(end, c.range[1])\n },\n leaveNode() {\n // Do nothing.\n },\n })\n return [start, end] as const\n }\n\n function checkToken(token: Token, value: string) {\n if (token.value === value) {\n return\n }\n\n const perr = new ParseError(\n `Could not parse <script setup>. Expected \"${value}\", but it was \"${token.value}\".`,\n undefined,\n token.range[0],\n token.loc.start.line,\n token.loc.start.column,\n )\n fixErrorLocation(perr, offsetLocationCalculator)\n throw perr\n }\n}\n\nfunction remapAST(\n result: ESLintExtendedProgram,\n { scriptSetupBlockRange, codeBlocks }: ScriptSetupModuleCodeBlocks,\n): ESLintStatement[] {\n if (!scriptSetupBlockRange) {\n return []\n }\n\n let scriptSetupBlock: ESLintBlockStatement | null = null\n const scriptSetupStatements: ESLintStatement[] = []\n for (let index = result.ast.body.length - 1; index >= 0; index--) {\n const body = result.ast.body[index]\n\n if (body.type === \"BlockStatement\") {\n if (\n scriptSetupBlockRange[0] <= body.range[0] &&\n body.range[1] <= scriptSetupBlockRange[1]\n ) {\n if (scriptSetupBlock) {\n throw new Error(\n `Unexpected state error: An unexpected block statement was found. ${JSON.stringify(\n body.loc,\n )}`,\n )\n }\n scriptSetupBlock = body\n scriptSetupStatements.push(\n ...body.body.filter(\n (b) => !isSplitPunctuatorsEmptyStatement(b),\n ),\n )\n result.ast.body.splice(index, 1, ...scriptSetupStatements)\n }\n } else if (body.type === \"EmptyStatement\") {\n if (isSplitPunctuatorsEmptyStatement(body)) {\n // remove\n result.ast.body.splice(index, 1)\n }\n }\n }\n\n if (result.scopeManager && scriptSetupBlock) {\n const blockScope = result.scopeManager.acquire(\n scriptSetupBlock as never,\n true,\n )!\n remapScope(result.scopeManager, blockScope)\n }\n\n return scriptSetupStatements\n\n function isSplitPunctuatorsEmptyStatement(body: ESLintStatement) {\n return (\n body.type === \"EmptyStatement\" &&\n codeBlocks.splitPunctuators.includes(body.range[1] - 1)\n )\n }\n\n function remapScope(scopeManager: ScopeManager, blockScope: Scope) {\n const moduleScope = blockScope.upper!\n\n // Restore references\n for (const reference of blockScope.references) {\n reference.from = moduleScope\n moduleScope.references.push(reference)\n }\n // Restore variables\n for (const variable of blockScope.variables) {\n variable.scope = moduleScope\n const alreadyVariable = moduleScope.variables.find(\n (v) => v.name === variable.name,\n )\n if (alreadyVariable) {\n alreadyVariable.defs.push(...variable.defs)\n alreadyVariable.identifiers.push(...variable.identifiers)\n alreadyVariable.references.push(...variable.references)\n for (const reference of variable.references) {\n reference.resolved = alreadyVariable\n }\n } else {\n moduleScope.variables.push(variable)\n moduleScope.set.set(variable.name, variable)\n }\n }\n // Remove scope\n const upper = blockScope.upper\n if (upper) {\n const index = upper.childScopes.indexOf(blockScope)\n if (index >= 0) {\n upper.childScopes.splice(index, 1)\n }\n }\n const index = scopeManager.scopes.indexOf(blockScope)\n if (index >= 0) {\n scopeManager.scopes.splice(index, 1)\n }\n }\n}\n\nfunction remapLocationAndTokens(\n result: ESLintExtendedProgram,\n { codeBlocks }: ScriptSetupModuleCodeBlocks,\n locationCalculator: LocationCalculator,\n) {\n const tokens = result.ast.tokens ?? []\n\n const endMap = new Map<number, number>()\n const buffer: number[] = []\n for (let index = tokens.length - 1; index >= 0; index--) {\n const token = tokens[index]\n\n if (\n token.range[0] + 1 === token.range[1] &&\n codeBlocks.splitPunctuators.includes(token.range[0])\n ) {\n // remove\n tokens.splice(index, 1)\n buffer.push(token.range[1])\n continue\n } else {\n for (const end of buffer) {\n endMap.set(end, token.range[1])\n }\n buffer.length = 0\n }\n }\n\n traverseNodes(result.ast, {\n visitorKeys: result.visitorKeys,\n enterNode(node) {\n const rangeEnd = endMap.get(node.range[1])\n if (rangeEnd != null) {\n node.range[1] = rangeEnd\n }\n if (node.end) {\n const end = endMap.get(node.end)\n if (end != null) {\n node.end = rangeEnd\n }\n }\n },\n leaveNode() {\n // Do nothing.\n },\n })\n\n fixLocations(result, locationCalculator)\n}\n","import { debug } from \"../common/debug\"\nimport type { OffsetRange } from \"../ast/index\"\nimport {\n APOSTROPHE,\n ASTERISK,\n CARRIAGE_RETURN,\n EOF,\n isWhitespace,\n LEFT_CURLY_BRACKET,\n LEFT_PARENTHESIS,\n LINE_FEED,\n NULL,\n QUOTATION_MARK,\n REVERSE_SOLIDUS,\n RIGHT_CURLY_BRACKET,\n RIGHT_PARENTHESIS,\n SOLIDUS,\n COLON,\n SEMICOLON,\n LEFT_SQUARE_BRACKET,\n RIGHT_SQUARE_BRACKET,\n} from \"../html/util/unicode\"\n\nexport const enum CSSTokenType {\n Quoted = \"Quoted\",\n Block = \"Block\",\n Line = \"Line\",\n Word = \"Word\",\n Punctuator = \"Punctuator\",\n}\n\nexport interface CSSWordToken {\n type: CSSTokenType.Word\n value: string\n range: OffsetRange\n}\nexport interface CSSQuotedToken {\n type: CSSTokenType.Quoted\n valueRange: OffsetRange\n value: string\n range: OffsetRange\n quote: '\"' | \"'\"\n}\nexport interface CSSPunctuatorToken {\n type: CSSTokenType.Punctuator\n value: string\n range: OffsetRange\n}\nexport interface CSSCommentToken {\n type: CSSTokenType.Block | CSSTokenType.Line\n valueRange: OffsetRange\n value: string\n range: OffsetRange\n}\nexport type CSSToken =\n | CSSWordToken\n | CSSQuotedToken\n | CSSPunctuatorToken\n | CSSCommentToken\n\nexport type CSSTokenizeOption = { inlineComment?: boolean }\n\n/**\n * A simplified CSS tokenizer.\n * The tokenizer is implemented with reference to the CSS specification,\n * but it does not follow it. This tokenizer only does the tokenization needed to properly handle `v-bind()`.\n * @see https://drafts.csswg.org/css-syntax/#tokenization\n */\nexport class CSSTokenizer {\n // Reading\n public readonly text: string\n private readonly options: CSSTokenizeOption\n private cp: number\n private offset: number\n private nextOffset: number\n\n // Tokenizing\n private reconsuming: boolean\n\n /**\n * Initialize this tokenizer.\n * @param text The source code to tokenize.\n * @param options The tokenizer options.\n */\n public constructor(\n text: string,\n startOffset: number,\n options?: CSSTokenizeOption,\n ) {\n debug(\"[css] the source code length: %d\", text.length)\n this.text = text\n this.options = {\n inlineComment: options?.inlineComment ?? false,\n }\n this.cp = NULL\n this.offset = startOffset - 1\n this.nextOffset = startOffset\n this.reconsuming = false\n }\n\n /**\n * Get the next token.\n * @returns The next token or null.\n */\n public nextToken(): CSSToken | null {\n let cp\n if (this.reconsuming) {\n cp = this.cp\n this.reconsuming = false\n } else {\n cp = this.consumeNextCodePoint()\n }\n // Skip whitespaces\n while (isWhitespace(cp)) {\n cp = this.consumeNextCodePoint()\n }\n if (cp === EOF) {\n return null\n }\n\n const start = this.offset\n return this.consumeNextToken(cp, start)\n }\n\n /**\n * Get the next code point.\n * @returns The code point.\n */\n private nextCodePoint(): number {\n if (this.nextOffset >= this.text.length) {\n return EOF\n }\n return this.text.codePointAt(this.nextOffset)!\n }\n\n /**\n * Consume the next code point.\n * @returns The consumed code point.\n */\n private consumeNextCodePoint(): number {\n if (this.offset >= this.text.length) {\n this.cp = EOF\n return EOF\n }\n\n this.offset = this.nextOffset\n\n if (this.offset >= this.text.length) {\n this.cp = EOF\n return EOF\n }\n\n let cp = this.text.codePointAt(this.offset)!\n if (cp === CARRIAGE_RETURN) {\n this.nextOffset = this.offset + 1\n if (this.text.codePointAt(this.nextOffset)! === LINE_FEED) {\n this.nextOffset++\n }\n cp = LINE_FEED\n } else {\n this.nextOffset = this.offset + (cp >= 0x10000 ? 2 : 1)\n }\n\n this.cp = cp\n\n return cp\n }\n\n private consumeNextToken(cp: number, start: number): CSSToken | null {\n if (cp === SOLIDUS) {\n const nextCp = this.nextCodePoint()\n if (nextCp === ASTERISK) {\n return this.consumeComment(start)\n }\n if (nextCp === SOLIDUS && this.options.inlineComment) {\n return this.consumeInlineComment(start)\n }\n }\n if (isQuote(cp)) {\n return this.consumeString(start, cp)\n }\n if (isPunctuator(cp)) {\n return {\n type: CSSTokenType.Punctuator,\n range: [start, start + 1],\n value: String.fromCodePoint(cp),\n }\n }\n return this.consumeWord(start)\n }\n\n /**\n * Consume word\n */\n private consumeWord(start: number): CSSToken {\n let cp = this.consumeNextCodePoint()\n while (!isWhitespace(cp) && !isPunctuator(cp) && !isQuote(cp)) {\n cp = this.consumeNextCodePoint()\n }\n this.reconsuming = true\n const range: OffsetRange = [start, this.offset]\n const text = this.text\n let value: string\n return {\n type: CSSTokenType.Word,\n range,\n get value() {\n return (value ??= text.slice(...range))\n },\n }\n }\n\n /**\n * https://drafts.csswg.org/css-syntax/#consume-string-token\n */\n private consumeString(start: number, quote: number): CSSToken {\n let valueEndOffset: number | null = null\n let cp = this.consumeNextCodePoint()\n while (cp !== EOF) {\n if (cp === quote) {\n valueEndOffset = this.offset\n break\n }\n // PostCSS seems to continue parsing.\n // if (cp === LINE_FEED) {\n // // Bad string\n // this.reconsuming = true\n // valueEndOffset = this.offset\n // break\n // }\n if (cp === REVERSE_SOLIDUS) {\n // Escape\n this.consumeNextCodePoint()\n }\n cp = this.consumeNextCodePoint()\n }\n const text = this.text\n let value: string\n const valueRange: OffsetRange = [\n start + 1,\n valueEndOffset ?? this.nextOffset,\n ]\n return {\n type: CSSTokenType.Quoted,\n range: [start, this.nextOffset],\n valueRange,\n get value() {\n return (value ??= text.slice(...valueRange))\n },\n quote: String.fromCodePoint(quote) as never,\n }\n }\n /**\n * https://drafts.csswg.org/css-syntax/#consume-comment\n */\n private consumeComment(start: number): CSSToken {\n this.consumeNextCodePoint() // consume \"*\"\n let valueEndOffset: number | null = null\n let cp = this.consumeNextCodePoint()\n while (cp !== EOF) {\n if (cp === ASTERISK) {\n cp = this.consumeNextCodePoint()\n if (cp === SOLIDUS) {\n valueEndOffset = this.offset - 1\n break\n }\n }\n cp = this.consumeNextCodePoint()\n }\n const valueRange: OffsetRange = [\n start + 2,\n valueEndOffset ?? this.nextOffset,\n ]\n const text = this.text\n let value: string\n return {\n type: CSSTokenType.Block,\n range: [start, this.nextOffset],\n valueRange,\n get value() {\n return (value ??= text.slice(...valueRange))\n },\n }\n }\n /**\n * Consume inline comment\n */\n private consumeInlineComment(start: number): CSSToken {\n this.consumeNextCodePoint() // consume \"/\"\n let valueEndOffset: number | null = null\n let cp = this.consumeNextCodePoint()\n while (cp !== EOF) {\n if (cp === LINE_FEED) {\n valueEndOffset = this.offset - 1\n break\n }\n cp = this.consumeNextCodePoint()\n }\n const valueRange: OffsetRange = [\n start + 2,\n valueEndOffset ?? this.nextOffset,\n ]\n const text = this.text\n let value: string\n return {\n type: CSSTokenType.Line,\n range: [start, this.nextOffset],\n valueRange,\n get value() {\n return (value ??= text.slice(...valueRange))\n },\n }\n }\n}\n\nfunction isPunctuator(cp: number): boolean {\n return (\n cp === COLON ||\n cp === SEMICOLON ||\n // Brackets\n cp === LEFT_PARENTHESIS ||\n cp === RIGHT_PARENTHESIS ||\n cp === LEFT_CURLY_BRACKET ||\n cp === RIGHT_CURLY_BRACKET ||\n cp === LEFT_SQUARE_BRACKET ||\n cp === RIGHT_SQUARE_BRACKET ||\n // Maybe v-bind() in calc()\n cp === SOLIDUS ||\n cp === ASTERISK\n )\n}\n\nfunction isQuote(cp: number): boolean {\n return cp === APOSTROPHE || cp === QUOTATION_MARK\n}\n","import type {\n OffsetRange,\n Token,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VStyleElement,\n VText,\n} from \"../ast/index\"\nimport { ParseError } from \"../ast/index\"\nimport { getLang, getOwnerDocument } from \"../common/ast-utils\"\nimport { debug } from \"../common/debug\"\nimport { insertError } from \"../common/error-utils\"\nimport type { LocationCalculatorForHtml } from \"../common/location-calculator\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport {\n createSimpleToken,\n insertComments,\n replaceAndSplitTokens,\n} from \"../common/token-utils\"\nimport { parseExpression } from \"../script/index\"\nimport { DEFAULT_ECMA_VERSION } from \"../script-setup/parser-options\"\nimport { resolveReferences } from \"../template/index\"\nimport type {\n CSSCommentToken,\n CSSPunctuatorToken,\n CSSToken,\n CSSTokenizeOption,\n} from \"./tokenizer\"\nimport { CSSTokenType, CSSTokenizer } from \"./tokenizer\"\n\nclass CSSTokenScanner {\n private reconsuming: CSSToken[] = []\n private tokenizer: CSSTokenizer\n public constructor(text: string, options: CSSTokenizeOption) {\n this.tokenizer = new CSSTokenizer(text, 0, options)\n }\n public nextToken(): CSSToken | null {\n return this.reconsuming.shift() ?? this.tokenizer.nextToken()\n }\n public reconsume(...tokens: CSSToken[]) {\n this.reconsuming.push(...tokens)\n }\n}\n\n/**\n * Parse the source code of the given `<style>` elements.\n * @param elements The `<style>` elements to parse.\n * @param globalLocationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseStyleElements(\n elements: VElement[],\n globalLocationCalculator: LocationCalculatorForHtml,\n originalParserOptions: ParserOptions,\n): void {\n const parserOptions: ParserOptions = {\n ...originalParserOptions,\n ecmaVersion: originalParserOptions.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n }\n\n for (const style of elements) {\n ;(style as VStyleElement).style = true\n parseStyleElement(\n style as VStyleElement,\n globalLocationCalculator,\n parserOptions,\n {\n inlineComment: (getLang(style) || \"css\") !== \"css\",\n },\n )\n }\n}\n\nfunction parseStyleElement(\n style: VStyleElement,\n globalLocationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n cssOptions: CSSTokenizeOption,\n) {\n if (style.children.length !== 1) {\n return\n }\n const textNode = style.children[0]\n if (textNode.type !== \"VText\") {\n return\n }\n const code = textNode.value\n // short circuit\n if (!/v-bind\\s*(?:\\(|\\/)/u.test(code)) {\n return\n }\n\n const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n textNode.range[0],\n )\n const document = getOwnerDocument(style)\n parseStyle(\n document,\n style,\n code,\n locationCalculator,\n parserOptions,\n cssOptions,\n )\n}\n\nfunction parseStyle(\n document: VDocumentFragment | null,\n style: VStyleElement,\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n cssOptions: CSSTokenizeOption,\n) {\n let textStart = 0\n for (const {\n range,\n exprRange,\n quote,\n openingParenOffset,\n comments,\n } of iterateVBind(code, cssOptions)) {\n insertComments(\n document,\n comments.map((c) =>\n createSimpleToken(\n c.type,\n locationCalculator.getOffsetWithGap(c.range[0]),\n locationCalculator.getOffsetWithGap(c.range[1]),\n c.value,\n locationCalculator,\n ),\n ),\n )\n\n const container: VExpressionContainer = {\n type: \"VExpressionContainer\",\n range: [\n locationCalculator.getOffsetWithGap(range[0]),\n locationCalculator.getOffsetWithGap(range[1]),\n ],\n loc: {\n start: locationCalculator.getLocation(range[0]),\n end: locationCalculator.getLocation(range[1]),\n },\n parent: style,\n expression: null,\n references: [],\n }\n\n const openingParenStart =\n locationCalculator.getOffsetWithGap(openingParenOffset)\n const beforeTokens: Token[] = [\n createSimpleToken(\n \"HTMLRawText\",\n container.range[0],\n container.range[0] + 6 /* v-bind */,\n \"v-bind\",\n locationCalculator,\n ),\n createSimpleToken(\n \"Punctuator\",\n openingParenStart,\n openingParenStart + 1,\n \"(\",\n locationCalculator,\n ),\n ]\n const afterTokens: Token[] = [\n createSimpleToken(\n \"Punctuator\",\n container.range[1] - 1,\n container.range[1],\n \")\",\n locationCalculator,\n ),\n ]\n if (quote) {\n const openStart = locationCalculator.getOffsetWithGap(\n exprRange[0] - 1,\n )\n beforeTokens.push(\n createSimpleToken(\n \"Punctuator\",\n openStart,\n openStart + 1,\n quote,\n locationCalculator,\n ),\n )\n const closeStart = locationCalculator.getOffsetWithGap(exprRange[1])\n afterTokens.unshift(\n createSimpleToken(\n \"Punctuator\",\n closeStart,\n closeStart + 1,\n quote,\n locationCalculator,\n ),\n )\n }\n const beforeLast = beforeTokens[beforeTokens.length - 1]\n replaceAndSplitTokens(\n document,\n {\n range: [container.range[0], beforeLast.range[1]],\n loc: { start: container.loc.start, end: beforeLast.loc.end },\n },\n beforeTokens,\n )\n const afterFirst = afterTokens[0]\n replaceAndSplitTokens(\n document,\n {\n range: [afterFirst.range[0], container.range[1]],\n loc: { start: afterFirst.loc.start, end: container.loc.end },\n },\n afterTokens,\n )\n\n const lastChild = style.children[style.children.length - 1]\n style.children.push(container)\n if (lastChild.type === \"VText\") {\n const newTextNode: VText = {\n type: \"VText\",\n range: [container.range[1], lastChild.range[1]],\n loc: {\n start: { ...container.loc.end },\n end: { ...lastChild.loc.end },\n },\n parent: style,\n value: code.slice(range[1]),\n }\n style.children.push(newTextNode)\n\n lastChild.range[1] = container.range[0]\n lastChild.loc.end = { ...container.loc.start }\n lastChild.value = code.slice(textStart, range[0])\n textStart = range[1]\n }\n try {\n const ret = parseExpression(\n code.slice(...exprRange),\n locationCalculator.getSubCalculatorShift(exprRange[0]),\n parserOptions,\n { allowEmpty: false, allowFilters: false },\n )\n if (ret.expression) {\n ret.expression.parent = container\n container.expression = ret.expression\n container.references = ret.references\n }\n replaceAndSplitTokens(\n document,\n {\n range: [beforeLast.range[1], afterFirst.range[0]],\n loc: {\n start: beforeLast.loc.end,\n end: afterFirst.loc.start,\n },\n },\n ret.tokens,\n )\n insertComments(document, ret.comments)\n\n for (const variable of ret.variables) {\n style.variables.push(variable)\n }\n resolveReferences(container)\n } catch (err) {\n debug(\"[style] Parse error: %s\", err)\n\n if (ParseError.isParseError(err)) {\n insertError(document, err)\n } else {\n throw err\n }\n }\n }\n}\n\ntype VBindLocations = {\n range: OffsetRange\n exprRange: OffsetRange\n quote: '\"' | \"'\" | null\n openingParenOffset: number\n comments: CSSCommentToken[]\n}\n\n/**\n * Iterate the `v-bind()` information.\n */\nfunction* iterateVBind(\n code: string,\n cssOptions: CSSTokenizeOption,\n): IterableIterator<VBindLocations> {\n const tokenizer = new CSSTokenScanner(code, cssOptions)\n\n let token\n while ((token = tokenizer.nextToken())) {\n if (token.type !== CSSTokenType.Word || token.value !== \"v-bind\") {\n continue\n }\n const openingParen = findVBindOpeningParen(tokenizer)\n if (!openingParen) {\n continue\n }\n const arg = parseVBindArg(tokenizer)\n if (!arg) {\n continue\n }\n yield {\n range: [token.range[0], arg.closingParen.range[1]],\n exprRange: arg.exprRange,\n quote: arg.quote,\n openingParenOffset: openingParen.openingParen.range[0],\n comments: [...openingParen.comments, ...arg.comments],\n }\n }\n}\n\nfunction findVBindOpeningParen(tokenizer: CSSTokenScanner): {\n openingParen: CSSPunctuatorToken\n comments: CSSCommentToken[]\n} | null {\n const comments: CSSCommentToken[] = []\n let token\n while ((token = tokenizer.nextToken())) {\n if (token.type === CSSTokenType.Punctuator && token.value === \"(\") {\n return {\n openingParen: token,\n comments,\n }\n } else if (isComment(token)) {\n // Comment between `v-bind` and opening paren.\n comments.push(token)\n continue\n }\n tokenizer.reconsume(...comments, token)\n // There were no opening parens.\n return null\n }\n return null\n}\n\nfunction parseVBindArg(tokenizer: CSSTokenScanner): {\n exprRange: OffsetRange\n quote: '\"' | \"'\" | null\n closingParen: CSSPunctuatorToken\n comments: CSSCommentToken[]\n} | null {\n const tokensBuffer: CSSToken[] = []\n const comments: CSSCommentToken[] = []\n const tokens: CSSToken[] = []\n const closeTokenStack: string[] = []\n let token\n while ((token = tokenizer.nextToken())) {\n if (token.type === CSSTokenType.Punctuator) {\n if (token.value === \")\" && !closeTokenStack.length) {\n if (\n tokens.length === 1 &&\n tokens[0].type === CSSTokenType.Quoted\n ) {\n // for v-bind( 'expr' ), and v-bind( /**/ 'expr' /**/ )\n const quotedToken = tokens[0]\n return {\n exprRange: quotedToken.valueRange,\n quote: quotedToken.quote,\n closingParen: token,\n comments,\n }\n }\n const startToken = tokensBuffer[0] ?? token\n return {\n exprRange: [startToken.range[0], token.range[0]],\n quote: null,\n closingParen: token,\n comments: [],\n }\n }\n\n if (token.value === closeTokenStack[0]) {\n closeTokenStack.shift()\n } else if (token.value === \"(\") {\n closeTokenStack.unshift(\")\")\n }\n }\n\n tokensBuffer.push(token)\n if (isComment(token)) {\n comments.push(token)\n } else {\n tokens.push(token)\n }\n }\n tokenizer.reconsume(...tokensBuffer)\n return null\n}\n\nfunction isComment(token: CSSToken): token is CSSCommentToken {\n return token.type === CSSTokenType.Block || token.type === CSSTokenType.Line\n}\n","import type * as escopeTypes from \"eslint-scope\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport type {\n Reference,\n VAttribute,\n VDirective,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n} from \"../ast/index\"\nimport { traverseNodes } from \"../ast/index\"\nimport { getEslintScope } from \"../common/eslint-scope\"\nimport {\n findGenericDirective,\n isScriptElement,\n isScriptSetupElement,\n} from \"../common/ast-utils\"\nimport { camelize } from \"../utils/utils\"\n\nconst BUILTIN_COMPONENTS = new Set([\n \"template\",\n \"slot\",\n \"component\",\n \"Component\",\n \"transition\",\n \"Transition\",\n \"transition-group\",\n \"TransitionGroup\",\n \"keep-alive\",\n \"KeepAlive\",\n \"teleport\",\n \"Teleport\",\n \"suspense\",\n \"Suspense\",\n])\n\nconst BUILTIN_DIRECTIVES = new Set([\n \"bind\",\n \"on\",\n \"text\",\n \"html\",\n \"show\",\n \"if\",\n \"else\",\n \"else-if\",\n \"for\",\n \"model\",\n \"slot\",\n \"pre\",\n \"cloak\",\n \"once\",\n \"memo\",\n \"is\",\n])\n\n/**\n * @see https://github.com/vuejs/core/blob/48de8a42b7fed7a03f7f1ff5d53d6a704252cafe/packages/shared/src/domTagConfig.ts#L5-L28\n */\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS =\n \"html,body,base,head,link,meta,style,title,address,article,aside,footer,\" +\n \"header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,\" +\n \"figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,\" +\n \"data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,\" +\n \"time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,\" +\n \"canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,\" +\n \"th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,\" +\n \"option,output,progress,select,textarea,details,dialog,menu,\" +\n \"summary,template,blockquote,iframe,tfoot\"\n\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS =\n \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,\" +\n \"defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,\" +\n \"feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,\" +\n \"feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,\" +\n \"feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,\" +\n \"fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,\" +\n \"foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,\" +\n \"mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,\" +\n \"polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,\" +\n \"text,textPath,title,tspan,unknown,use,view\"\n\nconst NATIVE_TAGS = new Set([...HTML_TAGS.split(\",\"), ...SVG_TAGS.split(\",\")])\n\nconst COMPILER_MACROS_AT_ROOT = new Set([\n \"defineProps\",\n \"defineEmits\",\n \"defineExpose\",\n \"withDefaults\",\n // Added in Vue 3.3\n \"defineOptions\",\n \"defineSlots\",\n // Added in Vue 3.4\n \"defineModel\",\n])\n\nfunction capitalize(str: string) {\n return str[0].toUpperCase() + str.slice(1)\n}\n\n/**\n * Analyze `<script setup>` scope.\n * This method does the following process:\n *\n * 1. Add a virtual reference to the variables used in the template to mark them as used.\n * (This is the same way typescript-eslint marks a `React` variable.)\n *\n * 2. If compiler macros were used, add these variables as global variables.\n */\nexport function analyzeScriptSetupScope(\n scopeManager: escopeTypes.ScopeManager,\n templateBody: VElement | undefined,\n df: VDocumentFragment,\n parserOptions: ParserOptions,\n): void {\n analyzeUsedInTemplateVariables(scopeManager, templateBody, df)\n\n analyzeScriptSetupVariables(scopeManager, df, parserOptions)\n}\n\nfunction extractVariables(scopeManager: escopeTypes.ScopeManager) {\n const scriptVariables = new Map<string, escopeTypes.Variable>()\n const globalScope = scopeManager.globalScope\n if (!globalScope) {\n return scriptVariables\n }\n for (const variable of globalScope.variables) {\n scriptVariables.set(variable.name, variable)\n }\n const moduleScope = globalScope.childScopes.find(\n (scope) => scope.type === \"module\",\n )\n for (const variable of moduleScope?.variables ?? []) {\n scriptVariables.set(variable.name, variable)\n }\n return scriptVariables\n}\n\n/**\n * Analyze the variables used in the template.\n * Add a virtual reference to the variables used in the template to mark them as used.\n * (This is the same way typescript-eslint marks a `React` variable.)\n */\nfunction analyzeUsedInTemplateVariables(\n scopeManager: escopeTypes.ScopeManager,\n templateBody: VElement | undefined,\n df: VDocumentFragment,\n) {\n const scriptVariables = extractVariables(scopeManager)\n\n const markedVariables = new Set<string>()\n\n /**\n * @see https://github.com/vuejs/vue-next/blob/48de8a42b7fed7a03f7f1ff5d53d6a704252cafe/packages/compiler-core/src/transforms/transformElement.ts#L335\n */\n function markSetupReferenceVariableAsUsed(name: string) {\n if (scriptVariables.has(name)) {\n markVariableAsUsed(name)\n return true\n }\n const camelName = camelize(name)\n if (scriptVariables.has(camelName)) {\n markVariableAsUsed(camelName)\n return true\n }\n const pascalName = capitalize(camelName)\n if (scriptVariables.has(pascalName)) {\n markVariableAsUsed(pascalName)\n return true\n }\n return false\n }\n\n function markVariableAsUsed(nameOrRef: string | Reference) {\n let name: string\n let isValueReference: boolean | undefined\n let isTypeReference: boolean | undefined\n if (typeof nameOrRef === \"string\") {\n name = nameOrRef\n } else {\n name = nameOrRef.id.name\n isValueReference = nameOrRef.isValueReference\n isTypeReference = nameOrRef.isTypeReference\n }\n const variable = scriptVariables.get(name)\n if (!variable || variable.identifiers.length === 0) {\n return\n }\n if (markedVariables.has(name)) {\n return\n }\n markedVariables.add(name)\n\n const reference = new (getEslintScope().Reference)()\n ;(reference as any).vueUsedInTemplate = true // Mark for debugging.\n reference.from = variable.scope\n reference.identifier = variable.identifiers[0]\n reference.isWrite = () => false\n reference.isWriteOnly = () => false\n reference.isRead = () => true\n reference.isReadOnly = () => true\n reference.isReadWrite = () => false\n // For typescript-eslint\n reference.isValueReference = isValueReference\n reference.isTypeReference = isTypeReference\n\n variable.references.push(reference)\n reference.resolved = variable\n\n if (reference.isTypeReference) {\n // @typescript-eslint/no-unused-vars treats type references at the same position as recursive references,\n // so without this flag it will be marked as unused.\n ;(variable as any).eslintUsed = true\n }\n }\n\n function processVExpressionContainer(node: VExpressionContainer) {\n for (const reference of node.references.filter(\n (ref) => ref.variable == null,\n )) {\n markVariableAsUsed(reference)\n }\n }\n\n function processVElement(node: VElement) {\n if (\n (node.rawName === node.name && NATIVE_TAGS.has(node.rawName)) ||\n BUILTIN_COMPONENTS.has(node.rawName)\n ) {\n return\n }\n if (!markSetupReferenceVariableAsUsed(node.rawName)) {\n // Check namespace\n // https://github.com/vuejs/vue-next/blob/48de8a42b7fed7a03f7f1ff5d53d6a704252cafe/packages/compiler-core/src/transforms/transformElement.ts#L306\n const dotIndex = node.rawName.indexOf(\".\")\n if (dotIndex > 0) {\n markSetupReferenceVariableAsUsed(\n node.rawName.slice(0, dotIndex),\n )\n }\n }\n }\n\n function processVAttribute(node: VAttribute | VDirective) {\n if (node.directive) {\n if (BUILTIN_DIRECTIVES.has(node.key.name.name)) {\n return\n }\n markSetupReferenceVariableAsUsed(`v-${node.key.name.rawName}`)\n } else if (node.key.name === \"ref\" && node.value) {\n markVariableAsUsed(node.value.value)\n }\n }\n\n if (templateBody) {\n // Analyze `<template>`\n traverseNodes(templateBody, {\n enterNode(node) {\n if (node.type === \"VExpressionContainer\") {\n processVExpressionContainer(node)\n } else if (node.type === \"VElement\") {\n processVElement(node)\n } else if (node.type === \"VAttribute\") {\n processVAttribute(node)\n }\n },\n leaveNode() {\n /* noop */\n },\n })\n }\n\n for (const child of df.children) {\n if (child.type === \"VElement\") {\n if (isScriptSetupElement(child)) {\n // Analyze <script setup lang=\"ts\" generic=\"...\">\n const generic = findGenericDirective(child)\n if (generic) {\n processVExpressionContainer(generic.value)\n }\n } else if (child.name === \"style\") {\n // Analyze CSS v-bind()\n for (const node of child.children) {\n if (node.type === \"VExpressionContainer\") {\n processVExpressionContainer(node)\n }\n }\n }\n }\n }\n}\n\n/**\n * Analyze <script setup> variables.\n * - Analyze compiler macros.\n * If compiler macros were used, add these variables as global variables.\n * - Generic variables.\n * If defined generics are used, add these variables as global variables.\n */\nfunction analyzeScriptSetupVariables(\n scopeManager: escopeTypes.ScopeManager,\n df: VDocumentFragment,\n parserOptions: ParserOptions,\n) {\n const globalScope = scopeManager.globalScope\n if (!globalScope) {\n return\n }\n const customMacros = new Set(\n parserOptions.vueFeatures?.customMacros &&\n Array.isArray(parserOptions.vueFeatures.customMacros)\n ? parserOptions.vueFeatures.customMacros\n : [],\n )\n\n const genericDefineNames = new Set<string>()\n const scriptElements = df.children.filter(isScriptElement)\n const scriptSetupElement = scriptElements.find(isScriptSetupElement)\n if (scriptSetupElement && findGenericDirective(scriptSetupElement)) {\n for (const variable of scriptSetupElement.variables) {\n if (variable.kind === \"generic\") {\n genericDefineNames.add(variable.id.name)\n }\n }\n }\n\n const newThrough: escopeTypes.Reference[] = []\n for (const reference of globalScope.through) {\n if (\n COMPILER_MACROS_AT_ROOT.has(reference.identifier.name) ||\n customMacros.has(reference.identifier.name)\n ) {\n if (\n reference.from.type === \"global\" ||\n reference.from.type === \"module\"\n ) {\n addCompilerMacroVariable(reference)\n // This reference is removed from `Scope#through`.\n continue\n }\n }\n if (genericDefineNames.has(reference.identifier.name)) {\n addGenericVariable(reference)\n // This reference is removed from `Scope#through`.\n continue\n }\n\n newThrough.push(reference)\n }\n\n globalScope.through = newThrough\n\n function addCompilerMacroVariable(reference: escopeTypes.Reference) {\n addVariable(globalScope, reference)\n }\n\n function addGenericVariable(reference: escopeTypes.Reference) {\n addVariable(globalScope, reference)\n }\n}\n\nfunction addVariable(\n scope: escopeTypes.Scope,\n reference: escopeTypes.Reference,\n) {\n const name = reference.identifier.name\n let variable = scope.set.get(name)\n if (!variable) {\n variable = new (getEslintScope().Variable)()\n variable.name = name\n variable.scope = scope\n scope.variables.push(variable)\n scope.set.set(name, variable)\n }\n // Links the variable and the reference.\n reference.resolved = variable\n variable.references.push(reference)\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport * as path from \"path\"\nimport * as AST from \"./ast/index\"\nimport { LocationCalculatorForHtml } from \"./common/location-calculator\"\nimport { HTMLParser, HTMLTokenizer } from \"./html/index\"\nimport { parseScript, parseScriptElement } from \"./script/index\"\nimport * as services from \"./parser-services\"\nimport type { ParserOptions } from \"./common/parser-options\"\nimport { getScriptParser, getParserLangFromSFC } from \"./common/parser-options\"\nimport { parseScriptSetupElements } from \"./script-setup/index\"\nimport { LinesAndColumns } from \"./common/lines-and-columns\"\nimport type { VElement } from \"./ast/index\"\nimport { DEFAULT_ECMA_VERSION } from \"./script-setup/parser-options\"\nimport {\n getLang,\n isScriptElement,\n isScriptSetupElement,\n isStyleElement,\n isTemplateElement,\n} from \"./common/ast-utils\"\nimport { parseStyleElements } from \"./style/index\"\nimport { analyzeScope } from \"./script/scope-analyzer\"\nimport { analyzeScriptSetupScope } from \"./script-setup/scope-analyzer\"\n\nconst STARTS_WITH_LT = /^\\s*</u\n\n/**\n * Check whether the code is a Vue.js component.\n * @param code The source code to check.\n * @param options The parser options.\n * @returns `true` if the source code is a Vue.js component.\n */\nfunction isVueFile(code: string, options: ParserOptions): boolean {\n const filePath = options.filePath || \"unknown.js\"\n return path.extname(filePath) === \".vue\" || STARTS_WITH_LT.test(code)\n}\n\n/**\n * Parse the given source code.\n * @param code The source code to parse.\n * @param parserOptions The parser options.\n * @returns The parsing result.\n */\nexport function parseForESLint(\n code: string,\n parserOptions: any,\n): AST.ESLintExtendedProgram {\n const options: ParserOptions = {\n comment: true,\n loc: true,\n range: true,\n tokens: true,\n ...parserOptions,\n }\n\n let result: AST.ESLintExtendedProgram\n let document: AST.VDocumentFragment | null\n let locationCalculator: LocationCalculatorForHtml | null\n if (!isVueFile(code, options)) {\n result = parseAsScript(code, options)\n document = null\n locationCalculator = null\n } else {\n ;({ result, document, locationCalculator } = parseAsSFC(code, options))\n }\n\n result.services = {\n ...result.services,\n ...services.define(code, result.ast, document, locationCalculator, {\n parserOptions: options,\n }),\n }\n\n return result\n}\n\n/**\n * Parse the given source code.\n * @param code The source code to parse.\n * @param options The parser options.\n * @returns The parsing result.\n */\nexport function parse(code: string, options: any): AST.ESLintProgram {\n return parseForESLint(code, options).ast\n}\n\nexport { AST }\n\n// eslint-disable-next-line complexity -- ignore\nfunction parseAsSFC(code: string, options: ParserOptions) {\n const optionsForTemplate = {\n ...options,\n ecmaVersion: options.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n }\n const skipParsingScript = options.parser === false\n const tokenizer = new HTMLTokenizer(code, optionsForTemplate)\n const rootAST = new HTMLParser(tokenizer, optionsForTemplate).parse()\n\n const locationCalculator = new LocationCalculatorForHtml(\n tokenizer.gaps,\n tokenizer.lineTerminators,\n )\n const scripts = rootAST.children.filter(isScriptElement)\n const template = rootAST.children.find(isTemplateElement)\n const templateLang = getLang(template) || \"html\"\n const hasTemplateTokenizer = options?.templateTokenizer?.[templateLang]\n const concreteInfo: AST.HasConcreteInfo = {\n tokens: rootAST.tokens,\n comments: rootAST.comments,\n errors: rootAST.errors,\n }\n const templateBody =\n template != null && (templateLang === \"html\" || hasTemplateTokenizer)\n ? Object.assign(template, concreteInfo)\n : undefined\n\n const scriptParser = getScriptParser(options.parser, () =>\n getParserLangFromSFC(rootAST),\n )\n let result: AST.ESLintExtendedProgram\n let scriptSetup: VElement | undefined\n if (skipParsingScript || !scripts.length) {\n result = parseScript(\"\", {\n ...options,\n ecmaVersion: options.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n parser: scriptParser,\n })\n } else if (\n scripts.length === 2 &&\n (scriptSetup = scripts.find(isScriptSetupElement))\n ) {\n result = parseScriptSetupElements(\n scriptSetup,\n scripts.find((e) => e !== scriptSetup)!,\n code,\n new LinesAndColumns(tokenizer.lineTerminators),\n {\n ...options,\n parser: scriptParser,\n },\n )\n } else {\n result = parseScriptElement(\n scripts[0],\n code,\n new LinesAndColumns(tokenizer.lineTerminators),\n {\n ...options,\n parser: scriptParser,\n },\n )\n }\n\n if (options.vueFeatures?.styleCSSVariableInjection ?? true) {\n const styles = rootAST.children.filter(isStyleElement)\n parseStyleElements(styles, locationCalculator, {\n ...options,\n parser: getScriptParser(options.parser, function* () {\n yield \"<template>\"\n yield getParserLangFromSFC(rootAST)\n }),\n project: undefined,\n projectService: undefined,\n })\n }\n result.ast.templateBody = templateBody\n\n if (options.eslintScopeManager) {\n if (scripts.some(isScriptSetupElement)) {\n if (!result.scopeManager) {\n result.scopeManager = analyzeScope(result.ast, options)\n }\n analyzeScriptSetupScope(\n result.scopeManager,\n templateBody,\n rootAST,\n options,\n )\n }\n }\n\n return {\n result,\n locationCalculator,\n document: rootAST,\n }\n}\n\nfunction parseAsScript(code: string, options: ParserOptions) {\n return parseScript(code, {\n ...options,\n ecmaVersion: options.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n parser: getScriptParser(options.parser, () => {\n const ext = (\n path.extname(options.filePath || \"unknown.js\").toLowerCase() ||\n \"\"\n )\n // remove dot\n .slice(1)\n if (/^[jt]sx$/u.test(ext)) {\n return [ext, ext.slice(0, -1)]\n }\n\n return ext\n }),\n })\n}\n\nexport const meta = {\n name: \"vue-eslint-parser\",\n // eslint-disable-next-line no-process-env\n version: process.env.PACKAGE_VERSION,\n}\n"],"names":["Evk","debugFactory","path","escope","lte","createRequire","dependencyEspree","DUMMY_PARENT","parseScript","getTagName","SVG_TAGS","assert","esquery","cursors.forward","cursors.backward","EventEmitter","parseScriptBase","services.define","HTMLTokenizer","HTMLParser"],"mappings":"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,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,KAAK,CAAC,EAAC,iBAAiB,EAAC,CAAC,KAAK,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,KAAK,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,iBAAiB,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,EAAE,EAAC,UAAU,EAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,IAAI,CAAC,EAAC,gBAAgB,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,gBAAgB,EAAC,CAA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C,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,IAAI,CAAC,EAAC,aAAa,EAAC,CAAC,KAAK,CAAC,EAAC,aAAa,EAAC,CAA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C,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,KAAK,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAC,CAAC,GAAG,CAAC,EAAC,WAAW,EAAC,CAAC,GAAG,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,EAAE,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,EAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAE,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAE,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAE,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAE,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,QAAQ,EAAC,CAAC,GAAG,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,EAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,EAAE,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,KAAK,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,EAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,EAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,GAAG,CAAC,EAAC,KAAK,EAAC,CAA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"}