This repository has been archived on 2020-11-02. You can view files and clone it, but cannot push or open issues or pull requests.
TripSit_Suite/node_modules/vue-eslint-parser/index.js.map
2020-11-01 22:46:04 +00:00

1 line
515 KiB
Plaintext

{"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/common/src/common/location-calculator.ts",".temp/common/src/common/debug.ts",".temp/script/src/script/scope-analyzer.ts",".temp/script/src/script/espree.ts",".temp/script/src/script/index.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/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/src/parser-services.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 { 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 * 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 (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// ---- 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 { ScopeManager } from \"eslint-scope\"\nimport { ParseError } from \"./errors\"\nimport { HasLocation } from \"./locations\"\nimport { Token } from \"./tokens\"\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 | 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 | ESLintModuleDeclaration\n | ESLintModuleSpecifier\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}\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\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: ESLintMethodDefinition[]\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\n value: ESLintFunctionExpression\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 source: ESLintLiteral\n}\n\nexport interface ESLintImportSpecifier extends HasLocation, HasParent {\n type: \"ImportSpecifier\"\n imported: ESLintIdentifier\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 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 exported: ESLintIdentifier\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 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\nexport interface ESLintIdentifier extends HasLocation, HasParent {\n type: \"Identifier\"\n name: string\n}\n\nexport interface ESLintLiteral extends HasLocation, HasParent {\n type: \"Literal\"\n value: string | boolean | null | number | RegExp\n regex?: {\n pattern: string\n flags: string\n }\n}\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\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\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\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 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 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 computed: boolean\n object: ESLintExpression | ESLintSuper\n property: ESLintExpression\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\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\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\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\"\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\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 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 | 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: VAttribute\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)[]\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 Evk, { VisitorKeys } from \"eslint-visitor-keys\"\nimport { Node } from \"./nodes\"\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst 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})\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 * @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 \"lodash/sortedLastIndex\"\nimport { HasLocation, Location, ParseError } from \"../ast\"\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 LocationCalculator {\n private gapOffsets: number[]\n private ltOffsets: 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: number = 0,\n ) {\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): LocationCalculator {\n return new LocationCalculator(\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): LocationCalculator {\n return new LocationCalculator(\n this.gapOffsets,\n this.ltOffsets,\n this.baseOffset,\n this.shiftOffset + offset,\n )\n }\n\n /**\n * Calculate the location of the given offset.\n * @param offset The offset to calculate their location.\n * @returns The location of the offset.\n */\n private _getLocation(offset: number): Location {\n const line = sortedLastIndex(this.ltOffsets, offset) + 1\n const column = offset - (line === 1 ? 0 : this.ltOffsets[line - 2])\n return { line, column }\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._getLocation(this.baseOffset + index + this.shiftOffset)\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 const shiftOffset = this.shiftOffset\n return (\n this.baseOffset +\n index +\n shiftOffset +\n this._getGap(index + shiftOffset)\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 */\n public fixLocation<T extends HasLocation>(node: T): T {\n const shiftOffset = this.shiftOffset\n const range = node.range\n const loc = node.loc\n const gap0 = this._getGap(range[0] + shiftOffset)\n const gap1 = this._getGap(range[1] + shiftOffset)\n const d0 = this.baseOffset + Math.max(0, gap0) + shiftOffset\n const d1 = this.baseOffset + Math.max(0, gap1) + shiftOffset\n\n if (d0 !== 0) {\n range[0] += d0\n if (node.start != null) {\n node.start += d0\n }\n loc.start = this._getLocation(range[0])\n }\n if (d1 !== 0) {\n range[1] += d1\n if (node.end != null) {\n node.end += d0\n }\n loc.end = this._getLocation(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 */\n public fixErrorLocation(error: ParseError) {\n const shiftOffset = this.shiftOffset\n const gap = this._getGap(error.index + shiftOffset)\n const diff = this.baseOffset + Math.max(0, gap) + shiftOffset\n\n error.index += diff\n\n const loc = this._getLocation(error.index)\n error.lineNumber = loc.line\n error.column = loc.column\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","/**\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 escope, * as escopeTypes from \"eslint-scope\"\nimport {\n ESLintIdentifier,\n ESLintProgram,\n Reference,\n Variable,\n getFallbackKeys,\n} from \"../ast\"\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 }\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(variable: escopeTypes.Variable): Variable {\n const ret: Variable = {\n id: variable.defs[0].name as ESLintIdentifier,\n kind: variable.scope.type === \"for\" ? \"v-for\" : \"scope\",\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\n/**\n *\n * @param ast\n * @param parserOptions\n */\nfunction analyze(ast: ESLintProgram, parserOptions: any): escopeTypes.Scope {\n const ecmaVersion = parserOptions.ecmaVersion || 2017\n const ecmaFeatures = parserOptions.ecmaFeatures || {}\n const sourceType = parserOptions.sourceType || \"script\"\n const result = escope.analyze(ast, {\n ignoreEval: true,\n nodejsScope: false,\n impliedStrict: ecmaFeatures.impliedStrict,\n ecmaVersion,\n sourceType,\n fallback: getFallbackKeys,\n })\n\n return result.globalScope\n}\n\n/**\n * Analyze the external references of the given AST.\n * @param {ASTNode} ast The root node to analyze.\n * @returns {Reference[]} The reference objects of external references.\n */\nexport function analyzeExternalReferences(\n ast: ESLintProgram,\n parserOptions: any,\n): Reference[] {\n const scope = analyze(ast, parserOptions)\n return scope.through.filter(isUnique).map(transformReference)\n}\n\n/**\n * Analyze the external references of the given AST.\n * @param {ASTNode} ast The root node to analyze.\n * @returns {Reference[]} The reference objects of external references.\n */\nexport function analyzeVariablesAndExternalReferences(\n ast: ESLintProgram,\n parserOptions: any,\n): { variables: Variable[]; references: Reference[] } {\n const scope = analyze(ast, parserOptions)\n return {\n variables: getForScope(scope)\n .variables.filter(hasDefinition)\n .map(transformVariable),\n references: scope.through.filter(isUnique).map(transformReference),\n }\n}\n","import Module from \"module\"\nimport path from \"path\"\nimport { ESLintExtendedProgram, ESLintProgram } from \"../ast\"\n\n/**\n * The interface of a result of ESLint custom parser.\n */\nexport type ESLintCustomParserResult = ESLintProgram | ESLintExtendedProgram\n\n/**\n * The interface of ESLint custom parsers.\n */\nexport interface ESLintCustomParser {\n parse(code: string, options: any): ESLintCustomParserResult\n parseForESLint?(code: string, options: any): ESLintCustomParserResult\n}\n\nconst createRequire: (filename: string) => (filename: string) => any =\n // Added in v12.2.0\n (Module as any).createRequire ||\n // Added in v10.12.0, but deprecated in v12.2.0.\n Module.createRequireFromPath ||\n // Polyfill - This is not executed on the tests on node@>=10.\n /* istanbul ignore next */\n (filename => {\n const mod = new Module(filename)\n\n mod.filename = filename\n mod.paths = (Module as any)._nodeModulePaths(path.dirname(filename))\n ;(mod as any)._compile(\"module.exports = require;\", filename)\n return mod.exports\n })\n\nlet espreeCache: ESLintCustomParser | null = null\n\nfunction isLinterPath(p: string): boolean {\n return (\n // ESLint 6 and above\n p.includes(\n `eslint${path.sep}lib${path.sep}linter${path.sep}linter.js`,\n ) ||\n // ESLint 5\n p.includes(`eslint${path.sep}lib${path.sep}linter.js`)\n )\n}\n\n/**\n * Load `espree` from the loaded ESLint.\n * If the loaded ESLint was not found, just returns `require(\"espree\")`.\n */\nexport function getEspree(): ESLintCustomParser {\n if (!espreeCache) {\n // Lookup the loaded eslint\n const linterPath = Object.keys(require.cache).find(isLinterPath)\n if (linterPath) {\n try {\n espreeCache = createRequire(linterPath)(\"espree\")\n } catch {\n // ignore\n }\n }\n if (!espreeCache) {\n //eslint-disable-next-line @mysticatea/ts/no-require-imports\n espreeCache = require(\"espree\")\n }\n }\n\n return espreeCache!\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 first from \"lodash/first\"\nimport last from \"lodash/last\"\nimport sortedIndexBy from \"lodash/sortedIndexBy\"\nimport {\n traverseNodes,\n ESLintArrayPattern,\n ESLintCallExpression,\n ESLintExpression,\n ESLintExpressionStatement,\n ESLintExtendedProgram,\n ESLintForInStatement,\n ESLintForOfStatement,\n ESLintFunctionExpression,\n ESLintPattern,\n ESLintVariableDeclaration,\n ESLintUnaryExpression,\n HasLocation,\n Node,\n ParseError,\n Reference,\n Token,\n Variable,\n VElement,\n VFilter,\n VFilterSequenceExpression,\n VForExpression,\n VOnExpression,\n VSlotScopeExpression,\n} from \"../ast\"\nimport { debug } from \"../common/debug\"\nimport { LocationCalculator } from \"../common/location-calculator\"\nimport {\n analyzeExternalReferences,\n analyzeVariablesAndExternalReferences,\n} from \"./scope-analyzer\"\nimport { ESLintCustomParser, getEspree } from \"./espree\"\n\n// [1] = spacing before the aliases.\n// [2] = aliases.\n// [3] = all after the aliases.\nconst ALIAS_PARENS = /^(\\s*)\\(([\\s\\S]+)\\)(\\s*(?:in|of)\\b[\\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/vue/blob/0948d999f2fddf9f90991956493f976273c5da1f/src/compiler/codegen/events.js#L3\nconst IS_FUNCTION_EXPRESSION = /^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/u\nconst IS_SIMPLE_PATH = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?'\\]|\\[\"[^\"]*?\"\\]|\\[\\d+\\]|\\[[A-Za-z_$][\\w$]*\\])*$/u\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 */\nfunction postprocess(\n result: ESLintExtendedProgram,\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 Set<Node | number[]>()\n\n traverseNodes(result.ast, {\n visitorKeys: result.visitorKeys,\n\n enterNode(node, parent) {\n if (!traversed.has(node)) {\n traversed.add(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 traversed.add(node.range)\n locationCalculator.fixLocation(node)\n }\n }\n },\n\n leaveNode() {\n // Do nothing.\n },\n })\n\n for (const token of result.ast.tokens || []) {\n locationCalculator.fixLocation(token)\n }\n for (const comment of result.ast.comments || []) {\n locationCalculator.fixLocation(comment)\n }\n}\n\n/**\n * Replace parentheses which wrap the alias of 'v-for' directive values by array brackets in order to avoid syntax errors.\n * @param code The code to replace.\n * @returns The replaced code.\n */\nfunction replaceAliasParens(code: string): string {\n const match = ALIAS_PARENS.exec(code)\n if (match != null) {\n return `${match[1]}[${match[2]}]${match[3]}`\n }\n return code\n}\n\n/**\n * Normalize the `ForXStatement#left` node to parse v-for expressions.\n * @param left The `ForXStatement#left` node to normalize.\n * @param replaced The flag to indicate that the alias parentheses were replaced.\n */\nfunction normalizeLeft(\n left: ESLintVariableDeclaration | ESLintPattern,\n replaced: boolean,\n): ESLintPattern[] {\n if (left.type !== \"VariableDeclaration\") {\n throw new Error(\"unreachable\")\n }\n const id = left.declarations[0].id\n\n if (replaced) {\n return (id as ESLintArrayPattern).elements\n }\n return [id]\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,\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: LocationCalculator,\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 locationCalculator.fixErrorLocation(err)\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: LocationCalculator,\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 postprocess.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseScriptFragment(\n code: string,\n locationCalculator: LocationCalculator,\n parserOptions: any,\n): ESLintExtendedProgram {\n try {\n const result = parseScript(code, parserOptions)\n postprocess(result, locationCalculator)\n return result\n } catch (err) {\n const perr = ParseError.normalize(err)\n if (perr) {\n locationCalculator.fixErrorLocation(perr)\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: LocationCalculator,\n parserOptions: any,\n allowEmpty = false,\n): ExpressionParseResult<ESLintExpression> {\n debug('[script] parse expression: \"0(%s)\"', code)\n\n try {\n const ast = parseScriptFragment(\n `0(${code})`,\n locationCalculator.getSubCalculatorShift(-2),\n parserOptions,\n ).ast\n const tokens = ast.tokens || []\n const comments = ast.comments || []\n const references = analyzeExternalReferences(ast, 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 && 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: LocationCalculator,\n parserOptions: any,\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 { ast } = parseScriptFragment(\n `0${argsCode}`,\n locationCalculator\n .getSubCalculatorAfter(paren)\n .getSubCalculatorShift(-1),\n parserOptions,\n )\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 = last(ast.tokens)!\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(ast, parserOptions))\n }\n\n // Update range.\n const firstToken = tokens[0]\n const lastToken = last(tokens)!\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\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: any,\n): ESLintExtendedProgram {\n const parser: ESLintCustomParser =\n typeof parserOptions.parser === \"string\"\n ? // eslint-disable-next-line @mysticatea/ts/no-require-imports\n require(parserOptions.parser)\n : getEspree()\n const result: any =\n // eslint-disable-next-line @mysticatea/ts/unbound-method\n typeof parser.parseForESLint === \"function\"\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 globalLocationCalculator The location calculator for postprocess.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScriptElement(\n node: VElement,\n globalLocationCalculator: LocationCalculator,\n parserOptions: any,\n): ESLintExtendedProgram {\n const text = node.children[0]\n const offset =\n text != null && text.type === \"VText\"\n ? text.range[0]\n : node.startTag.range[1]\n const code = text != null && text.type === \"VText\" ? text.value : \"\"\n const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n offset,\n )\n const result = parseScriptFragment(code, locationCalculator, parserOptions)\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 if (startTag != null) {\n result.ast.tokens.unshift({\n type: \"Punctuator\",\n range: startTag.range,\n loc: startTag.loc,\n value: \"<script>\",\n })\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: LocationCalculator,\n parserOptions: any,\n { allowEmpty = false, allowFilters = false } = {},\n): ExpressionParseResult<ESLintExpression | VFilterSequenceExpression> {\n debug('[script] parse expression: \"%s\"', code)\n\n const [mainCode, ...filterCodes] = allowFilters\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 = (retB as unknown) as ExpressionParseResult<\n VFilterSequenceExpression\n >\n\n ret.expression = {\n type: \"VFilterSequenceExpression\",\n parent: null as any,\n expression: retB.expression,\n filters: [],\n range: retB.expression.range.slice(0) as [number, number],\n loc: Object.assign({}, 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 locationCalculator.fixLocation({\n type: \"Punctuator\",\n value: \"|\",\n range: [prevLoc, prevLoc + 1],\n loc: {} as any,\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 = last(ret.tokens)!\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 */\nexport function parseVForExpression(\n code: string,\n locationCalculator: LocationCalculator,\n parserOptions: any,\n): ExpressionParseResult<VForExpression> {\n const processedCode = replaceAliasParens(code)\n debug('[script] parse v-for expression: \"for(%s);\"', processedCode)\n\n if (code.trim() === \"\") {\n throwEmptyError(locationCalculator, \"'<alias> in <expression>'\")\n }\n\n try {\n const replaced = processedCode !== code\n const ast = parseScriptFragment(\n `for(let ${processedCode});`,\n locationCalculator.getSubCalculatorShift(-8),\n parserOptions,\n ).ast\n const tokens = ast.tokens || []\n const comments = ast.comments || []\n const scope = analyzeVariablesAndExternalReferences(ast, parserOptions)\n const references = scope.references\n const variables = scope.variables\n const statement = ast.body[0] as\n | ESLintForInStatement\n | ESLintForOfStatement\n const left = normalizeLeft(statement.left, replaced)\n const right = statement.right\n const firstToken = tokens[3] || statement.left\n const lastToken = tokens[tokens.length - 3] || 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 // Remvoe `for` `(` `let` `)` `;`.\n tokens.shift()\n tokens.shift()\n tokens.shift()\n tokens.pop()\n tokens.pop()\n\n // Restore parentheses from array brackets.\n if (replaced) {\n const closeOffset = statement.left.range[1] - 1\n const open = tokens[0]\n const close = tokens.find(t => t.range[0] === closeOffset)\n\n if (open != null) {\n open.value = \"(\"\n }\n if (close != null) {\n close.value = \")\"\n }\n }\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 */\nexport function parseVOnExpression(\n code: string,\n locationCalculator: LocationCalculator,\n parserOptions: any,\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: LocationCalculator,\n parserOptions: any,\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 ast = parseScriptFragment(\n `void function($event){${code}}`,\n locationCalculator.getSubCalculatorShift(-22),\n parserOptions,\n ).ast\n const references = analyzeExternalReferences(ast, parserOptions)\n const outermostStatement = ast.body[0] as ESLintExpressionStatement\n const functionDecl = (outermostStatement.expression as ESLintUnaryExpression)\n .argument as ESLintFunctionExpression\n const block = functionDecl.body\n const body = block.body\n const firstStatement = first(body)\n const lastStatement = last(body)\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: LocationCalculator,\n parserOptions: any,\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 ast = parseScriptFragment(\n `void function(${code}) {}`,\n locationCalculator.getSubCalculatorShift(-14),\n parserOptions,\n ).ast\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(ast, parserOptions)\n const references = scope.references\n const variables = scope.variables\n const firstParam = first(params)!\n const lastParam = last(params)!\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 // Remvoe `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 * @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 \"lodash/sortedIndexBy\"\nimport sortedLastIndexBy from \"lodash/sortedLastIndexBy\"\nimport {\n ESLintExpression,\n ParseError,\n Reference,\n Token,\n VAttribute,\n VDirective,\n VDirectiveKey,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VFilterSequenceExpression,\n VForExpression,\n VIdentifier,\n VLiteral,\n VNode,\n VOnExpression,\n VSlotScopeExpression,\n} from \"../ast\"\nimport { debug } from \"../common/debug\"\nimport { LocationCalculator } from \"../common/location-calculator\"\nimport {\n ExpressionParseResult,\n parseExpression,\n parseVForExpression,\n parseVOnExpression,\n parseSlotScopeExpression,\n} from \"../script\"\n\nconst shorthandSign = /^[.:@#]/u\nconst shorthandNameMap = { \":\": \"bind\", \".\": \"bind\", \"@\": \"on\", \"#\": \"slot\" }\nconst invalidDynamicArgumentNextChar = /^[\\s\\r\\n=/>]$/u\n\n/**\n * Get the belonging document of the given node.\n * @param leafNode The node to get.\n * @returns The belonging document.\n */\nfunction 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 * 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 */\nfunction createSimpleToken(\n type: string,\n start: number,\n end: number,\n value: string,\n globalLocationCalculator: LocationCalculator,\n): Token {\n return {\n type,\n range: [start, end],\n loc: {\n start: globalLocationCalculator.getLocation(start),\n end: globalLocationCalculator.getLocation(end),\n },\n value,\n }\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: any,\n locationCalculator: LocationCalculator,\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: any,\n locationCalculator: LocationCalculator,\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\ninterface HasRange {\n range: [number, number]\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\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/**\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 */\nfunction 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 * Insert the given comment tokens.\n * @param document The document that the node is belonging to.\n * @param newComments The comments to insert.\n */\nfunction 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 * Insert the given error.\n * @param document The document that the node is belonging to.\n * @param error The error to insert.\n */\nfunction 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 * 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: any,\n globalLocationCalculator: LocationCalculator,\n node: VLiteral,\n tagName: string,\n directiveKey: VDirectiveKey,\n): ExpressionParseResult<\n | ESLintExpression\n | VFilterSequenceExpression\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\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 directiveName = directiveKey.name.name\n\n let result: ExpressionParseResult<\n | ESLintExpression\n | VFilterSequenceExpression\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\n >\n if (quoted && node.value === \"\") {\n result = {\n expression: null,\n tokens: [],\n comments: [],\n variables: [],\n references: [],\n }\n } else if (directiveName === \"for\") {\n result = parseVForExpression(\n node.value,\n locationCalculator,\n parserOptions,\n )\n } else if (directiveName === \"on\" && directiveKey.argument != null) {\n result = parseVOnExpression(\n node.value,\n locationCalculator,\n parserOptions,\n )\n } else if (\n directiveName === \"slot\" ||\n directiveName === \"slot-scope\" ||\n (tagName === \"template\" && directiveName === \"scope\")\n ) {\n result = parseSlotScopeExpression(\n node.value,\n locationCalculator,\n parserOptions,\n )\n } else if (directiveName === \"bind\") {\n result = parseExpression(\n node.value,\n locationCalculator,\n parserOptions,\n { allowFilters: true },\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\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 != null && 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: any,\n locationCalculator: LocationCalculator,\n node: VAttribute,\n): void {\n debug(\n '[template] convert to directive: %s=\"%s\" %j',\n node.key.name,\n node.value && 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 (\n argument &&\n argument.type === \"VIdentifier\" &&\n argument.name.startsWith(\"[\")\n ) {\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 return\n }\n\n try {\n const ret = parseAttributeValue(\n code,\n parserOptions,\n locationCalculator,\n node.value,\n node.parent.parent.name,\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\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: any,\n globalLocationCalculator: LocationCalculator,\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 = globalLocationCalculator.getSubCalculatorAfter(\n range[0],\n )\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 last from \"lodash/last\"\nimport {\n ErrorCode,\n HasLocation,\n Namespace,\n ParseError,\n Token,\n VAttribute,\n} from \"../ast\"\nimport { debug } from \"../common/debug\"\nimport { 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 = last(this.expressionTokens) || 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 != null && 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 last(this.expressionTokens) || 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 = last(this.expressionTokens) || 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 last from \"lodash/last\"\nimport findLastIndex from \"lodash/findLastIndex\"\nimport {\n ErrorCode,\n HasLocation,\n Namespace,\n NS,\n ParseError,\n Token,\n VAttribute,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n} from \"../ast\"\nimport { debug } from \"../common/debug\"\nimport { LocationCalculator } from \"../common/location-calculator\"\nimport {\n convertToDirective,\n processMustache,\n resolveReferences,\n} from \"../template\"\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 {\n IntermediateToken,\n IntermediateTokenizer,\n EndTag,\n Mustache,\n StartTag,\n Text,\n} from \"./intermediate-tokenizer\"\nimport { Tokenizer } from \"./tokenizer\"\n\nconst DIRECTIVE_NAME = /^(?:v-|[.:@#]).*[^.:@#]$/u\nconst DT_DD = /^d[dt]$/u\nconst DUMMY_PARENT: any = Object.freeze({})\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 * @returns `true` if the element is a MathML text integration point.\n */\nfunction isMathMLIntegrationPoint(element: VElement): boolean {\n if (element.namespace === NS.MathML) {\n const name = element.name\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 * @returns `true` if the element is a HTML integration point.\n */\nfunction isHTMLIntegrationPoint(element: VElement): boolean {\n if (element.namespace === NS.MathML) {\n return (\n element.name === \"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 = element.name\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) || last(node.children)\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\n private locationCalculator: LocationCalculator\n private parserOptions: any\n private document: VDocumentFragment\n private elementStack: VElement[]\n private vPreElement: VElement | null\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 // eslint-disable-next-line @mysticatea/ts/ban-ts-ignore\n // @ts-ignore\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 last(this.elementStack) || 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: any) {\n this.tokenizer = new IntermediateTokenizer(tokenizer)\n this.locationCalculator = new LocationCalculator(\n tokenizer.gaps,\n tokenizer.lineTerminators,\n )\n this.parserOptions = 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\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 return this.document\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 * 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 = token.name\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 element.name === \"annotation-xml\" &&\n name === \"svg\"\n ) {\n return NS.SVG\n }\n if (\n isHTMLIntegrationPoint(element) ||\n (isMathMLIntegrationPoint(element) &&\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 && xmlns.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 name The tag name to check.\n */\n private closeCurrentElementIfNecessary(name: string): void {\n const element = this.currentNode\n if (element.type !== \"VElement\") {\n return\n }\n\n if (element.name === \"p\" && HTML_NON_FHRASING_TAGS.has(name)) {\n this.popElementStack()\n }\n if (element.name === name && HTML_CAN_BE_LEFT_OPEN_TAGS.has(name)) {\n this.popElementStack()\n }\n if (DT_DD.test(element.name) && 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 const tagName = node.parent.parent.name\n const attrName = node.key.name\n\n if (\n (this.expressionEnabled ||\n (attrName === \"v-pre\" && !this.isInVPreElement)) &&\n (DIRECTIVE_NAME.test(attrName) ||\n attrName === \"slot-scope\" ||\n (tagName === \"template\" && attrName === \"scope\"))\n ) {\n convertToDirective(\n this.text,\n this.parserOptions,\n this.locationCalculator,\n node,\n )\n return\n }\n\n const key = (node.key.name = adjustAttributeName(\n node.key.name,\n namespace,\n ))\n const value = node.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 /**\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.name)\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 => a.key.name === \"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 for (const attribute of element.startTag.attributes) {\n if (attribute.directive) {\n if (\n attribute.key.argument != null &&\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 // Check whether the self-closing is valid.\n const isVoid =\n namespace === NS.HTML && HTML_VOID_ELEMENT_TAGS.has(element.name)\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 if (\n element.name === \"template\" &&\n element.parent.type === \"VDocumentFragment\"\n ) {\n const langAttr = element.startTag.attributes.find(\n a => !a.directive && a.key.name === \"lang\",\n ) as VAttribute | undefined\n const lang =\n (langAttr && langAttr.value && langAttr.value.value) ||\n \"html\"\n\n if (lang !== \"html\") {\n this.tokenizer.state = \"RAWTEXT\"\n }\n this.expressionEnabled = true\n }\n if (HTML_RCDATA_TAGS.has(element.name)) {\n this.tokenizer.state = \"RCDATA\"\n }\n if (HTML_RAWTEXT_TAGS.has(element.name)) {\n this.tokenizer.state = \"RAWTEXT\"\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 = findLastIndex(\n this.elementStack,\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\n const parent = this.currentNode\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 processMustache(\n this.parserOptions,\n this.locationCalculator,\n container,\n token,\n )\n\n // Set relationship.\n parent.children.push(container)\n\n // Resolve references.\n resolveReferences(container)\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 HYPHEN_MINUS = 0x2D\nexport const SOLIDUS = 0x2F\nexport const DIGIT_0 = 0x30\nexport const DIGIT_9 = 0x39\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 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 cp === TABULATION || cp === LINE_FEED || cp === FORM_FEED || cp === CARRIAGE_RETURN || cp === SPACE\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-constant-condition, no-param-reassign */\n\nimport assert from \"assert\"\nimport { debug } from \"../common/debug\"\nimport { ErrorCode, Namespace, NS, ParseError, Token } from \"../ast\"\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\"\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_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 lastCodePoint: number\n private offset: number\n private column: number\n private line: number\n\n // Tokenizing\n private returnState: TokenizerState\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 */\n public constructor(text: string) {\n debug(\"[html] the source code length: %d\", text.length)\n this.text = text\n this.gaps = []\n this.lineTerminators = []\n this.lastCodePoint = 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 = 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 = 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.lastCodePoint === CARRIAGE_RETURN && cp === LINE_FEED) {\n this.lastCodePoint = LINE_FEED\n this.gaps.push(this.offset)\n return this.consumeNextCodePoint()\n }\n\n // Update locations.\n this.advanceLocation()\n this.lastCodePoint = cp\n\n // To convert CRLF → LF.\n if (cp === CARRIAGE_RETURN) {\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.lastCodePoint === 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 as Token\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 as Token\n debug(\"[html] rollback token: %d %s\", token.range[0], token.type)\n\n this.currentToken = this.provisionalToken as Token\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)) {\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\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 (isWhitespace(cp) || cp === LESS_THAN_SIGN || cp === EOF) {\n return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n }\n if (cp === NUMBER_SIGN) {\n this.buffer.push(cp)\n return \"NUMERIC_CHARACTER_REFERENCE\"\n }\n return this.reconsumeAs(\"NAMED_CHARACTER_REFERENCE\")\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#character-reference-end-state\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 as Token\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 return this.returnState\n }\n\n this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n return this.reconsumeAs(this.returnState)\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 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-constant-condition, no-param-reassign */\n","/**\n * This file is copied from `eslint/lib/util/node-event-generator.js`\n */\nimport EventEmitter from \"events\"\nimport esquery, {Selector} from \"esquery\"\nimport union from \"lodash/union\"\nimport intersection from \"lodash/intersection\"\nimport memoize from \"lodash/memoize\"\nimport {Node} from \"../ast\"\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 = 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.map(getPossibleTypes).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 /*\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 */\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 countClassAttributes(parsedSelector.left) + countClassAttributes(parsedSelector.right)\n\n case \"compound\":\n case \"not\":\n case \"matches\":\n return parsedSelector.selectors.reduce((sum, childSelector) => sum + countClassAttributes(childSelector), 0)\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 countIdentifiers(parsedSelector.left) + countIdentifiers(parsedSelector.right)\n\n case \"compound\":\n case \"not\":\n case \"matches\":\n return parsedSelector.selectors.reduce((sum, childSelector) => sum + countIdentifiers(childSelector), 0)\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(selectorA: NodeSelector, selectorB: NodeSelector): number {\n return selectorA.attributeCount - selectorB.attributeCount ||\n selectorA.identifierCount - selectorB.identifierCount ||\n (selectorA.rawSelector <= selectorB.rawSelector ? -1 : 1)\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$/, \"\"))\n }\n catch (err) {\n if (typeof err.offset === \"number\") {\n throw new Error(`Syntax error in selector \"${rawSelector}\" at position ${err.offset}: ${err.message}`)\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>(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// 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 emitter: EventEmitter\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 constructor(emitter: EventEmitter) {\n this.emitter = emitter\n this.currentAncestry = []\n this.enterSelectorsByNodeType = new Map()\n this.exitSelectorsByNodeType = new Map()\n this.anyTypeEnterSelectors = []\n this.anyTypeExitSelectors = []\n\n const eventNames = typeof emitter.eventNames === \"function\"\n\n // Use the built-in eventNames() function if available (Node 6+)\n ? emitter.eventNames()\n\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 ? this.exitSelectorsByNodeType : 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 }\n else {\n (selector.isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors).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 (esquery.matches(node, selector.parsedSelector, this.currentAncestry)) {\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 = (isExit ? this.exitSelectorsByNodeType : this.enterSelectorsByNodeType).get(node.type) || []\n const anyTypeSelectors = isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors\n\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 */\n let selectorsByTypeIndex = 0\n let anyTypeSelectorsIndex = 0\n\n while (selectorsByTypeIndex < selectorsByNodeType.length || anyTypeSelectorsIndex < anyTypeSelectors.length) {\n if (\n selectorsByTypeIndex >= selectorsByNodeType.length ||\n (anyTypeSelectorsIndex < anyTypeSelectors.length && compareSpecificity(anyTypeSelectors[anyTypeSelectorsIndex], selectorsByNodeType[selectorsByTypeIndex]) < 0)\n ) {\n this.applySelector(node, anyTypeSelectors[anyTypeSelectorsIndex++])\n }\n else {\n this.applySelector(node, selectorsByNodeType[selectorsByTypeIndex++])\n }\n }\n }\n\n /**\n * Emits an event of entering AST node.\n * @param node - A node which was entered.\n */\n 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 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 \"lodash/sortedIndexBy\"\nimport {HasLocation} from \"../../ast\"\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,\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(tokens: HasLocation[], indexMap: { [key: number]: number }, startLoc: number): 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(tokens: HasLocation[], indexMap: { [key: number]: number }, endLoc: number): 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 {Token} from \"../../../ast\"\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 current: Token | null\n\n /**\n * Initializes this cursor.\n */\n 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 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 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 abstract moveNext(): boolean\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens and comments in reverse.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\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 constructor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number) {\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 moveNext(): boolean {\n const token = (this.tokenIndex >= 0) ? this.tokens[this.tokenIndex] : null\n const comment = (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 }\n else if (comment) {\n this.current = comment\n this.commentIndex -= 1\n }\n else {\n this.current = null\n }\n\n return this.current != null && (this.border === -1 || this.current.range[0] >= this.border)\n }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens only in reverse.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\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 constructor(tokens: Token[], _comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number) {\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 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 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 constructor(cursor: Cursor) {\n super()\n this.cursor = cursor\n }\n\n /** @inheritdoc */\n 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 {Token} from \"../../../ast\"\nimport 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 constructor(cursor: Cursor, predicate: (token: Token) => boolean) {\n super(cursor)\n this.predicate = predicate\n }\n\n /** @inheritdoc */\n 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 {Token} from \"../../../ast\"\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 constructor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number) {\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 moveNext(): boolean {\n const token = (this.tokenIndex < this.tokens.length) ? this.tokens[this.tokenIndex] : null\n const comment = (this.commentIndex < this.comments.length) ? this.comments[this.commentIndex] : null\n\n if (token && (!comment || token.range[0] < comment.range[0])) {\n this.current = token\n this.tokenIndex += 1\n }\n else if (comment) {\n this.current = comment\n this.commentIndex += 1\n }\n else {\n this.current = null\n }\n\n return this.current != null && (this.border === -1 || this.current.range[1] <= this.border)\n }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens only.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\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 constructor(tokens: Token[], _comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number) {\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 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 getOneToken(): Token | null {\n return (this.index <= this.indexEnd) ? this.tokens[this.index] : null\n }\n\n /** @inheritdoc */\n 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 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 constructor(cursor: Cursor, count: number) {\n super(cursor)\n this.count = count\n }\n\n /** @inheritdoc */\n 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 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 constructor(cursor: Cursor, count: number) {\n super(cursor)\n this.count = count\n }\n\n /** @inheritdoc */\n 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 {Token} from \"../../../ast\"\nimport BackwardTokenCommentCursor from \"./backward-token-comment-cursor\"\nimport BackwardTokenCursor from \"./backward-token-cursor\"\nimport 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: typeof BackwardTokenCommentCursor | 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 constructor(TokenCursor: typeof BackwardTokenCursor | typeof ForwardTokenCursor, TokenCommentCursor: typeof BackwardTokenCommentCursor | typeof ForwardTokenCommentCursor) {\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 createBaseCursor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, includeComments: boolean): Cursor {\n const TokenCursor = includeComments ? this.TokenCommentCursor : 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 createCursor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, includeComments: boolean, filter: ((token: Token) => boolean) | null, skip: number, count: number): Cursor {\n let cursor = this.createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments)\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(ForwardTokenCursor, ForwardTokenCommentCursor)\nexport const backward = new CursorFactory(BackwardTokenCursor, BackwardTokenCommentCursor)\n","/**\n * @fileoverview Define the cursor which iterates tokens only, with inflated range.\n * @author Toru Nagashima\n */\nimport {Token} from \"../../../ast\"\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 constructor(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, beforeCount: number, afterCount: number) {\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 {HasLocation, Token} from \"../../ast\"\nimport * as cursors from \"./cursors\"\nimport 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 = number | ((token: Token) => boolean) | {\n includeComments?: boolean\n filter?: (token: Token) => boolean\n skip?: number\n}\nexport type CountOptions = number | ((token: Token) => boolean) | {\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 token.type === \"Line\" || token.type === \"Block\" || token.type === \"Shebang\"\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(tokens: Token[], comments: Token[]): { [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 = (commentIndex < comments.length) ? comments[commentIndex].range[0] : Number.MAX_SAFE_INTEGER\n while (tokenIndex < tokens.length && (range = tokens[tokenIndex].range)[0] < nextStart) {\n map[range[0]] = tokenIndex\n map[range[1] - 1] = tokenIndex\n tokenIndex += 1\n }\n\n nextStart = (tokenIndex < tokens.length) ? tokens[tokenIndex].range[0] : Number.MAX_SAFE_INTEGER\n while (commentIndex < comments.length && (range = comments[commentIndex].range)[0] < nextStart) {\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(factory: cursors.CursorFactory, tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, opts?: SkipOptions): 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 }\n else if (typeof opts === \"function\") {\n filter = opts\n }\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(!filter || typeof filter === \"function\", \"options.filter should be a function.\")\n\n return factory.createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, skip, -1)\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(factory: cursors.CursorFactory, tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, opts?: CountOptions): 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 }\n else if (typeof opts === \"function\") {\n filter = opts\n }\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(!filter || typeof filter === \"function\", \"options.filter should be a function.\")\n\n return factory.createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, 0, countExists ? count : -1)\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(tokens: Token[], comments: Token[], indexMap: { [key: number]: number }, startLoc: number, endLoc: number, beforeCount?: CountOptions, afterCount?: number): Cursor {\n if (typeof beforeCount === \"undefined\" && typeof afterCount === \"undefined\") {\n return new ForwardTokenCursor(tokens, comments, indexMap, startLoc, endLoc)\n }\n if (typeof beforeCount === \"number\" || typeof beforeCount === \"undefined\") {\n return new PaddedTokenCursor(tokens, comments, indexMap, startLoc, endLoc, beforeCount || 0, afterCount || 0)\n }\n return createCursorWithCount(cursors.forward, tokens, comments, indexMap, startLoc, endLoc, beforeCount)\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 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 getTokenByRangeStart(offset: number, options?: { includeComments: boolean }): Token | null {\n const includeComments = Boolean(options && options.includeComments)\n const token = cursors.forward.createBaseCursor(\n this._tokens,\n this._comments,\n this._indexMap,\n offset,\n -1,\n includeComments\n ).getOneToken()\n\n if (token && 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 getFirstToken(node: HasLocation, options?: SkipOptions): 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 getLastToken(node: HasLocation, options?: SkipOptions): 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 getTokenBefore(node: HasLocation, options?: SkipOptions): 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 getTokenAfter(node: HasLocation, options?: SkipOptions): 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 getFirstTokenBetween(left: HasLocation, right: HasLocation, options?: SkipOptions): 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 getLastTokenBetween(left: HasLocation, right: HasLocation, options?: SkipOptions): 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 getTokenOrCommentBefore(node: HasLocation, skip?: number): 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 getTokenOrCommentAfter(node: HasLocation, skip?: number): 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 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 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 ).getAllTokens().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 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 ).getAllTokens().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 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 getFirstTokensBetween(left: HasLocation, right: HasLocation, options?: CountOptions): 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 getLastTokensBetween(left: HasLocation, right: HasLocation, options?: CountOptions): 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 ).getAllTokens().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 getTokens(node: HasLocation, beforeCount?: CountOptions, afterCount?: number): 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 getTokensBetween(left: HasLocation, right: HasLocation, padding?: CountOptions): 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 commentsExistBetween(left: HasLocation, right: HasLocation): 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 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 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 getCommentsInside(node: HasLocation): Token[] {\n return this.getTokens(node, {\n includeComments: true,\n filter: isCommentToken,\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 EventEmitter from \"events\"\nimport NodeEventGenerator from \"./external/node-event-generator\"\nimport TokenStore from \"./external/token-store\"\nimport {\n traverseNodes,\n ESLintProgram,\n VElement,\n VDocumentFragment,\n} from \"./ast\"\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst emitters = new WeakMap<object, EventEmitter>()\nconst stores = new WeakMap<object, TokenStore>()\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 */\n defineTemplateBodyVisitor(\n templateBodyVisitor: { [key: string]: (...args: any) => void },\n scriptVisitor?: { [key: string]: (...args: any) => void },\n ): object\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 rootAST: ESLintProgram,\n document: VDocumentFragment | null,\n): ParserServices {\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 ): object {\n if (scriptVisitor == null) {\n scriptVisitor = {} //eslint-disable-line no-param-reassign\n }\n if (rootAST.templateBody == null) {\n return scriptVisitor\n }\n\n let emitter = emitters.get(rootAST)\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 emitters.set(rootAST, emitter)\n\n const programExitHandler = scriptVisitor[\"Program:exit\"]\n scriptVisitor[\"Program:exit\"] = node => {\n try {\n if (typeof programExitHandler === \"function\") {\n programExitHandler(node)\n }\n\n // Traverse template body.\n const generator = new NodeEventGenerator(\n emitter as EventEmitter,\n )\n traverseNodes(\n rootAST.templateBody as VElement,\n generator,\n )\n } finally {\n // eslint-disable-next-line @mysticatea/ts/ban-ts-ignore\n // @ts-ignore\n scriptVisitor[\"Program:exit\"] = programExitHandler\n emitters.delete(rootAST)\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 * Get the token store of the template body.\n * @returns The token store of template body.\n */\n getTemplateBodyTokenStore(): TokenStore {\n const ast = rootAST.templateBody\n const key = ast || stores\n let store = stores.get(key)\n\n if (!store) {\n store =\n ast != null\n ? new TokenStore(ast.tokens, ast.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 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\"\nimport { LocationCalculator } from \"./common/location-calculator\"\nimport { HTMLParser, HTMLTokenizer } from \"./html\"\nimport { parseScript, parseScriptElement } from \"./script\"\nimport * as services from \"./parser-services\"\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: any): boolean {\n const filePath = (options.filePath as string | undefined) || \"unknown.js\"\n return path.extname(filePath) === \".vue\" || STARTS_WITH_LT.test(code)\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 */\nfunction isTemplateElement(node: AST.VNode): node is AST.VElement {\n return node.type === \"VElement\" && node.name === \"template\"\n}\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 */\nfunction isScriptElement(node: AST.VNode): node is AST.VElement {\n return node.type === \"VElement\" && node.name === \"script\"\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 */\nfunction isLang(\n attribute: AST.VAttribute | AST.VDirective,\n): attribute is AST.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 */\nfunction getLang(\n element: AST.VElement | undefined,\n defaultLang: string,\n): string {\n const langAttr = element && element.startTag.attributes.find(isLang)\n const lang = langAttr && langAttr.value && langAttr.value.value\n return lang || defaultLang\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 parseForESLint(\n code: string,\n options: any,\n): AST.ESLintExtendedProgram {\n //eslint-disable-next-line no-param-reassign\n options = Object.assign(\n {\n comment: true,\n ecmaVersion: 2015,\n loc: true,\n range: true,\n tokens: true,\n },\n options || {},\n )\n\n let result: AST.ESLintExtendedProgram\n let document: AST.VDocumentFragment | null\n if (!isVueFile(code, options)) {\n result = parseScript(code, options)\n document = null\n } else {\n const skipParsingScript = options.parser === false\n const tokenizer = new HTMLTokenizer(code)\n const rootAST = new HTMLParser(tokenizer, options).parse()\n const locationCalcurator = new LocationCalculator(\n tokenizer.gaps,\n tokenizer.lineTerminators,\n )\n const script = rootAST.children.find(isScriptElement)\n const template = rootAST.children.find(isTemplateElement)\n const templateLang = getLang(template, \"html\")\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\"\n ? Object.assign(template, concreteInfo)\n : undefined\n\n if (skipParsingScript || script == null) {\n result = parseScript(\"\", options)\n } else {\n result = parseScriptElement(script, locationCalcurator, options)\n }\n\n result.ast.templateBody = templateBody\n document = rootAST\n }\n\n result.services = Object.assign(\n result.services || {},\n services.define(result.ast, document),\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"],"names":["path","DUMMY_PARENT","cursors.forward","cursors.backward","path.extname","HTMLTokenizer","HTMLParser","services.define"],"mappings":"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AC,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,CAAC,KAAK,EAAC,KAAK,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,EAAE,EAAC,UAAU,EAAC,EAAC,eAAe,EAAC,CAAC,KAAK,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,EAAC,CAAC,IAAI,CAAC,EAAC,eAAe,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GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,EAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,EAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,YAAY,EAAC,CAAC,IAAI,CAAC,EAAC,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,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,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,EAAE,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,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,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,EAAC,EAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,UAAU,EAAC,EAAC,IAAI,EAAC,CAAC,EAAE,CAAC,EAAC,IAAI,EAAC,CAAC,EAAE,CAAC,EAAC,IAAI,EAAC,CAAC,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"}