@ibyar/expressions 0.8.4 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/v8/inline.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"inline.js","sourceRoot":"","sources":["../../../src/expressions/v8/inline.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeclarationExpression, ExpressionNode } from '../api/expression.js';\nimport type { NodeFactory } from './node.js';\nimport {\n\tClassDeclaration, ClassExpression, PrivateIdentifier\n} from '../api/class/class.js';\nimport { RestElement } from '../api/computing/rest.js';\nimport { SpreadElement } from '../api/computing/spread.js';\nimport { FunctionDeclaration, FunctionExpression } from '../api/definition/function.js';\nimport { Property } from '../api/definition/object.js';\nimport {\n\tIdentifier, Literal, TaggedTemplateExpression, TemplateLiteral\n} from '../api/definition/values.js';\nimport {\n\tAssignmentOperator\n} from '../api/operators/assignment.js';\nimport { LogicalOperator } from '../api/operators/logical.js';\nimport { BlockStatement } from '../api/statement/control/block.js';\nimport { EmptyStatement } from '../api/statement/control/empty.js';\nimport { SwitchCase } from '../api/statement/control/switch.js';\nimport {\n\tVariableDeclarationNode, VariableDeclarator\n} from '../api/statement/declarations/declares.js';\nimport { ForDeclaration } from '../api/statement/iterations/for.js';\nimport {\n\tAllowLabelledFunctionStatement,\n\tFunctionBodyType, FunctionInfo, FunctionKind,\n\tfunctionKindForImpl, FunctionSyntaxKind,\n\tisAsyncFunction, isAsyncGeneratorFunction,\n\tisAwaitAsIdentifierDisallowed, isClassMembersInitializerFunction,\n\tisGeneratorFunction, isModule, isResumableFunction, ParseFunctionFlag,\n\tParsingArrowHeadFlag, PropertyKind, PropertyKindInfo,\n\tPropertyPosition, SubFunctionKind, VariableDeclarationContext\n} from './enums.js';\nimport { TemplateStringLiteral, TokenStream } from './stream.js';\nimport { Token, TokenExpression } from './token.js';\n\nimport { BinaryOperator } from '../api/operators/binary.js';\nimport { UnaryOperator } from '../api/operators/unary.js';\nimport { UpdateOperator } from '../api/operators/update.js';\nimport { ExpressionNodeFactory, ExpressionNodeSourcePosition } from './factory.js';\nimport { isSloppy, isStrict, LanguageMode } from './language.js';\n\n\n\nexport type InlineParserOptions = {\n\tmode?: LanguageMode,\n\tacceptIN?: boolean,\n\tfactory?: NodeFactory,\n\taddLocation?: boolean\n};\n\nexport type Range = [number, number];\nexport type RangeOrVoid = Range | undefined;\n\nexport type PositionMark = { range?: Range };\n\nexport abstract class AbstractParser {\n\n\tprotected acceptIN: boolean;\n\tprotected previousAcceptIN: boolean[] = [];\n\n\tprotected functionKind: FunctionKind;\n\tprotected previousFunctionKind: FunctionKind[] = [];\n\tget languageMode() {\n\t\treturn this.scanner.getLanguageMode();\n\t}\n\n\tset languageMode(mode: LanguageMode) {\n\t\tthis.scanner.setLanguageMode(mode);\n\t}\n\n\tconstructor(protected scanner: TokenStream, protected factory: NodeFactory, acceptIN?: boolean) {\n\t\tthis.previousAcceptIN.push(this.acceptIN = acceptIN ?? false);\n\t\tthis.previousFunctionKind.push(this.functionKind = FunctionKind.NormalFunction);\n\t}\n\tabstract scan(): ExpressionNode;\n\tprotected position() {\n\t\treturn this.scanner.getPos();\n\t}\n\tprotected setAcceptIN(acceptIN: boolean) {\n\t\tthis.previousAcceptIN.push(this.acceptIN);\n\t\tthis.acceptIN = acceptIN;\n\t}\n\tprotected restoreAcceptIN() {\n\t\tthis.acceptIN = this.previousAcceptIN.pop() ?? false;\n\t}\n\tprotected getLastFunctionKind() {\n\t\treturn this.previousFunctionKind.at(-2) ?? FunctionKind.NormalFunction;\n\t}\n\tprotected setFunctionKind(functionKind: FunctionKind) {\n\t\tthis.previousFunctionKind.push(this.functionKind);\n\t\tthis.functionKind = functionKind;\n\t}\n\tprotected restoreFunctionKind() {\n\t\tthis.functionKind = this.previousFunctionKind.pop() ?? FunctionKind.NormalFunction;\n\t}\n\tprotected setStatue(acceptIN: boolean, functionKind: FunctionKind) {\n\t\tthis.setFunctionKind(functionKind);\n\t\tthis.setAcceptIN(acceptIN);\n\t}\n\tprotected restoreStatue() {\n\t\tthis.restoreFunctionKind();\n\t\tthis.restoreAcceptIN();\n\t}\n\tprotected current() {\n\t\treturn this.scanner.currentToken();\n\t}\n\tprotected next() {\n\t\treturn this.scanner.next();\n\t}\n\tprotected peek(): TokenExpression {\n\t\treturn this.scanner.peek();\n\t}\n\tprotected peekAhead(): TokenExpression {\n\t\treturn this.scanner.peekAhead();\n\t}\n\tprotected peekAheadPosition() {\n\t\treturn this.scanner.peekAheadPosition();\n\t}\n\tprotected peekPosition() {\n\t\treturn this.scanner.peekPosition();\n\t}\n\tprotected createRange(): undefined;\n\tprotected createRange(start: Required<PositionMark>): Range;\n\tprotected createRange(start?: PositionMark): RangeOrVoid;\n\tprotected createRange(start?: PositionMark): RangeOrVoid {\n\t\tif (Number.isNaN(start?.range?.[0])) {\n\t\t\treturn;\n\t\t}\n\t\treturn [start!.range![0], this.scanner.getPos()];\n\t}\n\tprotected createRangeByStart(start: Required<PositionMark>): Range {\n\t\treturn [start!.range![0], this.scanner.getPos()];\n\t}\n\tprotected createStartPosition(): Range {\n\t\treturn [this.scanner.getPos(), -1];\n\t}\n\tprotected updateRangeEnd(range: Range): void {\n\t\trange[1] = this.scanner.getPos();\n\t}\n\tprotected consume(token: Token) {\n\t\tconst next = this.scanner.next();\n\t\tif (next.isNotType(token)) {\n\t\t\tthrow new Error(this.errorMessage(`Parsing ${JSON.stringify(token)}`));\n\t\t}\n\t\treturn next;\n\t}\n\tprotected check(token: Token): boolean {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.isType(token)) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected checkAndGetValue(token: Token): ExpressionNode | undefined {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.isType(token)) {\n\t\t\tthis.scanner.next();\n\t\t\treturn next.value;\n\t\t}\n\t\treturn undefined;\n\t}\n\tprotected checkValue(value: ExpressionNode): boolean {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.value == value) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected expect(token: Token) {\n\t\tconst current = this.scanner.next();\n\t\tif (current.isNotType(token)) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${JSON.stringify(token)}, current is ${JSON.stringify(current)}`));\n\t\t}\n\t\treturn current;\n\t}\n\tprotected expectAndGetValue(token: Token) {\n\t\tconst current = this.scanner.next();\n\t\tif (current.isNotType(token)) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${JSON.stringify(token)}, current is ${JSON.stringify(current)}`));\n\t\t}\n\t\treturn current.getValue();\n\t}\n\tprotected checkInOrOf(): 'IN' | 'OF' | false {\n\t\tconst result = this.peekInOrOf();\n\t\tif (result) {\n\t\t\tthis.scanner.next();\n\t\t}\n\t\treturn result;\n\t}\n\tprotected peekInOrOf(): 'IN' | 'OF' | false {\n\t\tvar next = this.peek();\n\t\tif (next.isType(Token.IN)) {\n\t\t\treturn 'IN';\n\t\t} else if (this.factory.isIdentifier(next.value) && next.value.getName() === 'of') {\n\t\t\treturn 'OF';\n\t\t}\n\t\treturn false;\n\t}\n\tprotected isArguments(node: ExpressionNode): boolean {\n\t\treturn this.factory.isIdentifier(node) && node.getName() === 'arguments';\n\t}\n\tprotected isEval(node: ExpressionNode): boolean {\n\n\t\treturn this.factory.isIdentifier(node) && node.getName() === 'eval';\n\t}\n\tprotected isEvalOrArguments(node: ExpressionNode): boolean {\n\t\treturn this.factory.isIdentifier(node) && (node.getName() === 'eval' || node.getName() === 'arguments');\n\t}\n\tprotected isNextLetKeyword() {\n\t\tif (this.peek().isNotType(Token.LET)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst nextNextToken = this.peekAhead().token;\n\t\tswitch (nextNextToken) {\n\t\t\tcase Token.LBRACE:\n\t\t\tcase Token.LBRACK:\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.STATIC:\n\t\t\tcase Token.LET: // `let let;` is disallowed by static semantics, but the\n\t\t\t// token must be first interpreted as a keyword in order\n\t\t\t// for those semantics to apply. This ensures that ASI is\n\t\t\t// not honored when a LineTerminator separates the\n\t\t\t// tokens.\n\t\t\tcase Token.YIELD:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprotected markParenthesized(expression: ExpressionNode) {\n\t\tReflect.set(expression, 'parenthesized', true);\n\t}\n\tprotected clearParenthesized(expression: ExpressionNode) {\n\t\tReflect.deleteProperty(expression, 'parenthesized');\n\t}\n\tprotected isParenthesized(expression: ExpressionNode): boolean {\n\t\treturn Reflect.get(expression, 'parenthesized') === true;\n\t}\n\tprotected isAssignableIdentifier(expression: ExpressionNode): boolean {\n\t\t// return expression instanceof AssignmentNode;\n\t\tif (!(this.factory.isIdentifier(expression))) {\n\t\t\treturn false;\n\t\t}\n\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(expression)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\tprotected isValidReferenceExpression(expression: ExpressionNode): boolean {\n\t\treturn this.isAssignableIdentifier(expression) || this.factory.isPropertyOrMemberExpression(expression);\n\t}\n\tprotected expectSemicolon() {\n\t\tconst tok = this.peek();\n\t\tif (tok.isType(Token.SEMICOLON)) {\n\t\t\tthis.next();\n\t\t\treturn;\n\t\t}\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || Token.isAutoSemicolon(tok.token)) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.scanner.currentToken().isType(Token.AWAIT) && !isAsyncFunction(this.functionKind)) {\n\t\t\tthrow new Error(this.errorMessage(`Await Not In Async Context/Function`));\n\t\t}\n\t}\n\tprotected peekAnyIdentifier() {\n\t\treturn Token.isAnyIdentifier(this.peek().token);\n\t}\n\tprotected expectContextualKeyword(keyword: string) {\n\t\tconst current = this.scanner.next();\n\t\tif (!current.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString())) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: current Token is ${JSON.stringify(current)}`));\n\t\t}\n\t\treturn true;\n\t}\n\tprotected checkContextualKeyword(keyword: string) {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString())) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected peekContextualKeyword(keyword: string) {\n\t\tconst next = this.scanner.peek();\n\t\treturn next.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString());\n\t}\n\tprotected methodKindFor(isStatic: boolean, flag: ParseFunctionFlag): FunctionKind {\n\t\treturn functionKindForImpl(\n\t\t\tisStatic ? SubFunctionKind.StaticMethod : SubFunctionKind.NonStaticMethod,\n\t\t\tflag\n\t\t);\n\t}\n\tprotected isGenerator() {\n\t\treturn isGeneratorFunction(this.functionKind);\n\t}\n\tprotected isAsyncFunction() {\n\t\treturn isAsyncFunction(this.functionKind);\n\t}\n\tprotected is_async_function() {\n\t\treturn isAsyncFunction(this.functionKind);\n\t}\n\tprotected is_async_generator() {\n\t\treturn isAsyncGeneratorFunction(this.functionKind);\n\t}\n\tprotected is_resumable() {\n\t\treturn isResumableFunction(this.functionKind);\n\t}\n\tprotected isAwaitAllowed() {\n\t\treturn this.isAsyncFunction() || isModule(this.functionKind);\n\t}\n\tprotected isAwaitAsIdentifierDisallowed() {\n\t\treturn isStrict(this.languageMode) ||\n\t\t\tisAwaitAsIdentifierDisallowed(this.functionKind);\n\t}\n\tprotected shouldBanArguments() {\n\t\treturn isClassMembersInitializerFunction(this.functionKind);\n\t}\n\tprotected errorMessage(message: string): string {\n\t\treturn this.scanner.createError(message);\n\t}\n\n\tprotected reportErrorMessage(message: string): void {\n\t\tconsole.error(this.scanner.createError(message));\n\t}\n}\n\nexport class JavaScriptInlineParser extends AbstractParser {\n\tstatic parse(source: string | TokenExpression[] | TokenStream, { mode, acceptIN, factory, addLocation }: InlineParserOptions = {}) {\n\t\tmode ??= LanguageMode.Strict;\n\t\tconst stream = (typeof source === 'string')\n\t\t\t? TokenStream.getTokenStream(source, mode)\n\t\t\t: Array.isArray(source) ? TokenStream.getTokenStream(source) : source;\n\t\tacceptIN ??= false;\n\t\tif (factory == undefined) {\n\t\t\tconst sourcePositionFactory = addLocation && typeof source === 'string' ? new ExpressionNodeSourcePosition(source) : undefined;\n\t\t\tfactory = new ExpressionNodeFactory(sourcePositionFactory);\n\t\t}\n\t\tconst parser = new JavaScriptInlineParser(stream, factory, acceptIN);\n\t\treturn parser.scan();\n\t}\n\tconstructor(scanner: TokenStream, factory: NodeFactory, acceptIN?: boolean) {\n\t\tsuper(scanner, factory, acceptIN);\n\t}\n\tscan(): ExpressionNode {\n\t\tconst start = this.scanner.getPos();\n\t\tconst list: ExpressionNode[] = this.parseStatementList(Token.EOS);\n\t\tif (list.length === 1) {\n\t\t\treturn list[0];\n\t\t}\n\t\treturn this.factory.createExpressionStatement(list, [start, this.scanner.getPos()]);\n\t}\n\n\t/**\n\t * Statement ::\n\t * Block\n\t * VariableStatement\n\t * EmptyStatement\n\t * ExpressionStatement\n\t * IfStatement\n\t * IterationStatement\n\t * ContinueStatement\n\t * BreakStatement\n\t * ReturnStatement\n\t * WithStatement\n\t * LabelledStatement\n\t * SwitchStatement\n\t * ThrowStatement\n\t * TryStatement\n\t * DebuggerStatement\n\t */\n\tprotected parseStatement(\n\t\tallowFunction: AllowLabelledFunctionStatement = AllowLabelledFunctionStatement.DisallowLabelledFunctionStatement\n\t): ExpressionNode {\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.LBRACE:\n\t\t\t\treturn this.parseBlock();\n\t\t\tcase Token.SEMICOLON:\n\t\t\t\tconst semicolon = this.consume(Token.SEMICOLON);\n\t\t\t\treturn this.factory.createEmptyStatement(semicolon.range);\n\t\t\tcase Token.IF:\n\t\t\t\treturn this.parseIfStatement();\n\t\t\tcase Token.DO:\n\t\t\t\treturn this.parseDoWhileStatement();\n\t\t\tcase Token.WHILE:\n\t\t\t\treturn this.parseWhileStatement();\n\t\t\tcase Token.FOR:\n\t\t\t\tif (this.isAwaitAllowed() && this.peekAhead().isType(Token.AWAIT)) {\n\t\t\t\t\treturn this.parseForAwaitStatement();\n\t\t\t\t}\n\t\t\t\treturn this.parseForStatement();\n\t\t\tcase Token.CONTINUE:\n\t\t\t\treturn this.parseContinueStatement();\n\t\t\tcase Token.BREAK:\n\t\t\t\treturn this.parseBreakStatement();\n\t\t\tcase Token.RETURN:\n\t\t\t\treturn this.parseReturnStatement();\n\t\t\tcase Token.THROW:\n\t\t\t\treturn this.parseThrowStatement();\n\t\t\tcase Token.TRY:\n\t\t\t\treturn this.parseTryStatement();\n\t\t\tcase Token.SWITCH:\n\t\t\t\treturn this.parseSwitchStatement();\n\t\t\tcase Token.WITH:\n\t\t\t\treturn this.parseWithStatement();\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tthrow new SyntaxError(this.errorMessage(`FunctionDeclaration only allowed as a StatementListItem not in an arbitrary Statement position.`));\n\t\t\tcase Token.DEBUGGER:\n\t\t\t\treturn this.parseDebuggerStatement();\n\t\t\tcase Token.VAR:\n\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.Statement);\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (!this.scanner.hasLineTerminatorAfterNext() && this.peekAhead().isType(Token.FUNCTION)) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage(`async function in single statement context.`));\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this.parseExpressionOrLabelledStatement(allowFunction);\n\t\t}\n\t}\n\tprotected parseDebuggerStatement() {\n\t\tconst token = this.consume(Token.DEBUGGER);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createDebuggerStatement(token.range);\n\t}\n\tprotected parseTryStatement(): ExpressionNode {\n\t\t// TryStatement ::\n\t\t// 'try' Block Catch\n\t\t// 'try' Block Finally\n\t\t// 'try' Block Catch Finally\n\t\t//\n\t\t// Catch ::\n\t\t// 'catch' '(' Identifier ')' Block\n\t\t//\n\t\t// Finally ::\n\t\t// 'finally' Block\n\n\t\tconst tryToken = this.consume(Token.TRY);\n\t\tconst tryBlock = this.parseBlock();\n\t\tlet range: RangeOrVoid;\n\t\tlet peek = this.peek();\n\t\tif (peek.isNotType(Token.CATCH) && peek.isNotType(Token.FINALLY)) {\n\t\t\tthrow new Error(this.errorMessage(`Uncaught SyntaxError: Missing catch or finally after try`));\n\t\t}\n\t\tlet catchBlock: ExpressionNode | undefined;\n\t\tif (this.check(Token.CATCH)) {\n\t\t\tlet identifier: ExpressionNode | undefined;\n\t\t\tconst hasBinding = this.check(Token.LPAREN);\n\t\t\tif (hasBinding) {\n\t\t\t\tif (this.peekAnyIdentifier()) {\n\t\t\t\t\tidentifier = this.parseNonRestrictedIdentifier();\n\t\t\t\t} else {\n\t\t\t\t\tidentifier = this.parseBindingPattern(true);\n\t\t\t\t}\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t}\n\t\t\tconst block = this.parseBlock();\n\t\t\tcatchBlock = this.factory.createCatchClause(block, identifier, this.createRange(peek));\n\t\t\trange = this.createRange(tryToken);\n\t\t}\n\t\tlet finallyBlock: ExpressionNode | undefined;\n\t\tif (this.check(Token.FINALLY)) {\n\t\t\tfinallyBlock = this.parseBlock();\n\t\t\trange = this.createRange(tryToken);\n\t\t}\n\t\treturn this.factory.createTryStatement(tryBlock, catchBlock, finallyBlock, range);\n\t}\n\tprotected parseNonRestrictedIdentifier() {\n\t\tconst result = this.parseIdentifier();\n\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(result)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Strict Eval/Arguments '));\n\t\t}\n\t\treturn result;\n\t}\n\tprotected parseBlock(): BlockStatement {\n\t\tconst start = this.expect(Token.LBRACE);\n\t\tconst statements: ExpressionNode[] = [];\n\t\tconst range = this.createRangeByStart(start);\n\t\tconst block = this.factory.createBlock(statements, range);\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tconst stat = this.parseStatementListItem();\n\t\t\tif (!stat) {\n\t\t\t\treturn block;\n\t\t\t} else if (this.factory.isEmptyStatement(stat)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstatements.push(stat);\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\tthis.updateRangeEnd(range);\n\t\treturn block;\n\t}\n\t/**\n\t * ECMA 262 6th Edition\n\t * \tStatementListItem[Yield, Return] :\n\t * \tStatement[?Yield, ?Return]\n\t * \tDeclaration[?Yield]\n\t * //\n\t * Declaration[Yield] :\n\t * \tHoistableDeclaration[?Yield]\n\t * \tClassDeclaration[?Yield]\n\t * \tLexicalDeclaration[In, ?Yield]\n\t * //\n\t * HoistableDeclaration[Yield, Default] :\n\t * \tFunctionDeclaration[?Yield, ?Default]\n\t * \tGeneratorDeclaration[?Yield, ?Default]\n\t * //\n\t * LexicalDeclaration[In, Yield] :\n\t * \tLetOrConst BindingList[?In, ?Yield] ;\n\t */\n\tprotected parseStatementListItem(): ExpressionNode | undefined {\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\treturn this.parseHoistableDeclaration(undefined, false, this.peek());\n\t\t\tcase Token.CLASS:\n\t\t\t\tconst classToken = this.consume(Token.CLASS);\n\t\t\t\treturn this.parseClassDeclaration(undefined, false, classToken);\n\t\t\tcase Token.VAR:\n\t\t\tcase Token.CONST:\n\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.StatementListItem);\n\t\t\tcase Token.LET:\n\t\t\t\tif (this.isNextLetKeyword()) {\n\t\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.StatementListItem);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorAfterNext()) {\n\t\t\t\t\tconst start = this.consume(Token.ASYNC);\n\t\t\t\t\treturn this.parseAsyncFunctionDeclaration(undefined, false, start);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn this.parseStatement(AllowLabelledFunctionStatement.AllowLabelledFunctionStatement);\n\t}\n\tprotected parseFunctionExpression() {\n\t\tconst start = this.consume(Token.FUNCTION);\n\t\tconst functionKind = this.check(Token.MUL) ? FunctionKind.GeneratorFunction : FunctionKind.NormalFunction;\n\t\tlet name: Identifier | undefined;\n\t\tlet functionSyntaxKind = FunctionSyntaxKind.AnonymousExpression;\n\t\tconst peek = this.peek();\n\t\tif (peek.isNotType(Token.LPAREN)) {\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t\tfunctionSyntaxKind = FunctionSyntaxKind.NamedExpression;\n\t\t}\n\t\treturn this.parseFunctionLiteral(functionKind, functionSyntaxKind, name, start);\n\t}\n\tprotected parseAsyncFunctionDeclaration(names: string[] | undefined, defaultExport: boolean, start: PositionMark): FunctionDeclaration {\n\t\t// AsyncFunctionDeclaration ::\n\t\t// async [no LineTerminator here] function BindingIdentifier[Await]\n\t\t// ( FormalParameters[Await] ) { AsyncFunctionBody }\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Line Terminator Before `function` parsing `async function`.'));\n\t\t}\n\t\tthis.consume(Token.FUNCTION);\n\t\treturn this.parseHoistableDeclaration01(FunctionKind.AsyncFunction, names, defaultExport, start) as FunctionDeclaration;\n\n\t}\n\tprotected parseIfStatement(): ExpressionNode {\n\t\tconst ifToken = this.consume(Token.IF);\n\t\tthis.consume(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.consume(Token.RPAREN);\n\t\tconst thenStatement = this.parseScopedStatement();\n\t\tlet range: RangeOrVoid;\n\t\tlet elseStatement: ExpressionNode | undefined;\n\t\tif (this.peek().isType(Token.ELSE)) {\n\t\t\tthis.consume(Token.ELSE);\n\t\t\telseStatement = this.parseScopedStatement();\n\t\t}\n\t\trange = this.createRange(ifToken);\n\t\treturn this.factory.createIfStatement(condition, thenStatement, elseStatement, range);\n\t}\n\tprotected parseScopedStatement(): ExpressionNode {\n\t\tif (isStrict(this.languageMode) || this.peek().isNotType(Token.FUNCTION)) {\n\t\t\treturn this.parseStatement();\n\t\t} else {\n\t\t\treturn this.parseFunctionDeclaration();\n\t\t}\n\t}\n\tprotected parseDoWhileStatement(): ExpressionNode {\n\t\t// DoStatement ::\n\t\t// 'do' Statement 'while' '(' Expression ')' ';'\n\t\tconst start = this.consume(Token.DO);\n\t\tconst body = this.parseStatement();\n\t\tthis.expect(Token.WHILE);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\n\t\tthis.check(Token.SEMICOLON);\n\t\treturn this.factory.createDoStatement(condition, body, this.createRange(start));\n\t}\n\tprotected parseWhileStatement() {\n\t\t// WhileStatement ::\n\t\t// 'while' '(' Expression ')' Statement\n\t\tconst start = this.consume(Token.WHILE);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\treturn this.factory.createWhileStatement(condition, body, this.createRange(start));\n\t}\n\tprotected parseThrowStatement(): ExpressionNode {\n\t\t// ThrowStatement ::\n\t\t// 'throw' Expression ';'\n\t\tconst throwToken = this.consume(Token.THROW);\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new Error(this.scanner.createError(`New line After Throw`));\n\t\t}\n\t\tconst exception = this.parseExpression();\n\t\tconst range = this.createRange(throwToken);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createThrowStatement(exception, range);\n\t}\n\tprotected parseSwitchStatement(): ExpressionNode {\n\t\t// SwitchStatement ::\n\t\t// 'switch' '(' Expression ')' '{' CaseClause* '}'\n\t\t// CaseClause ::\n\t\t// 'case' Expression ':' StatementList\n\t\t// 'default' ':' StatementList\n\n\t\tconst start = this.consume(Token.SWITCH);\n\t\tconst range = this.createRangeByStart(start);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst tag = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\n\n\t\tconst cases: SwitchCase[] = [];\n\t\tconst switchStatement = this.factory.createSwitchStatement(tag, cases, range);\n\n\t\tlet defaultSeen = false;\n\t\tthis.expect(Token.LBRACE);\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tconst statements: ExpressionNode[] = [];\n\t\t\tlet test: ExpressionNode;\n\t\t\tconst caseStart = this.scanner.peek();\n\t\t\tif (this.check(Token.CASE)) {\n\t\t\t\ttest = this.parseExpression();\n\t\t\t} else {\n\t\t\t\tthis.expect(Token.DEFAULT);\n\t\t\t\tif (defaultSeen) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Multiple Defaults In Switch`));\n\t\t\t\t}\n\t\t\t\tdefaultSeen = true;\n\t\t\t}\n\t\t\tconst blockStart = this.expect(Token.COLON);\n\t\t\twhile (this.peek().isNotType(Token.CASE)\n\t\t\t\t&& this.peek().isNotType(Token.DEFAULT)\n\t\t\t\t&& this.peek().isNotType(Token.RBRACE)) {\n\t\t\t\tconst statement = this.parseStatementListItem();\n\t\t\t\tif (!statement || this.factory.isEmptyStatement(statement)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstatements.push(statement);\n\t\t\t}\n\t\t\tconst block = this.factory.createBlock(statements, this.createRange(blockStart));\n\t\t\tconst caseRange = this.createRange(caseStart);\n\t\t\tconst clause = defaultSeen\n\t\t\t\t? this.factory.createDefaultClause(block, caseRange)\n\t\t\t\t: this.factory.createCaseBlock(test!, block, caseRange);\n\t\t\tcases.push(clause);\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\tthis.updateRangeEnd(range);\n\t\treturn switchStatement;\n\t}\n\tprotected parseForStatement() {\n\n\t\t// Either a standard for loop\n\t\t// for (<init>; <cond>; <next>) { ... }\n\t\t// or a for-each loop\n\t\t// for (<each> of|in <iterable>) { ... }\n\t\t//\n\t\t// We parse a declaration/expression after the 'for (' and then read the first\n\t\t// expression/declaration before we know if this is a for or a for-each.\n\t\t// typename FunctionState::LoopScope loop_scope(function_state_);\n\n\t\tconst start = this.consume(Token.FOR);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst peek = this.peek();\n\t\tconst starts_with_let = peek.isType(Token.LET);\n\t\tif (peek.isType(Token.CONST) || (starts_with_let && this.isNextLetKeyword())) {\n\n\t\t\t// The initializer contains lexical declarations,\n\t\t\t// so create an in-between scope.\n\n\t\t\t// Also record whether inner functions or evals are found inside\n\t\t\t// this loop, as this information is used to simplify the desugaring\n\t\t\t// if none are found.\n\t\t\t// typename FunctionState::FunctionOrEvalRecordingScope recording_scope(function_state_);\n\t\t\tconst initializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\treturn this.parseForEachStatementWithDeclarations(initializer, forMode, start);\n\t\t\t}\n\n\t\t\tthis.expect(Token.SEMICOLON);\n\n\t\t\t// Parse the remaining code in the inner block scope since the declaration\n\t\t\t// above was parsed there. We'll finalize the unnecessary outer block scope\n\t\t\t// after parsing the rest of the loop.\n\t\t\treturn this.parseStandardForLoopWithLexicalDeclarations(initializer, start);\n\t\t}\n\n\t\tlet initializer: ExpressionNode;\n\t\tif (peek.isType(Token.VAR)) {\n\t\t\tinitializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\t\t\t// ParseVariableDeclarations(kForStatement, & for_info.parsing_result,& for_info.bound_names);\n\t\t\t// DCHECK_EQ(for_info.parsing_result.descriptor.mode, VariableMode:: kVar);\n\t\t\t// for_info.position = scanner() -> location().beg_pos;\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\treturn this.parseForEachStatementWithDeclarations(initializer as VariableDeclarationNode, forMode, start);\n\t\t\t}\n\t\t\t// init = impl() -> BuildInitializationBlock(& for_info.parsing_result);\n\t\t} else if (this.peek().isNotType(Token.SEMICOLON)) {\n\t\t\t// The initializer does not contain declarations.\n\t\t\tthis.setAcceptIN(false);\n\t\t\tinitializer = this.parseExpressionCoverGrammar();\n\t\t\tthis.restoreAcceptIN();\n\t\t\t// ExpressionParsingScope parsing_scope(impl());\n\t\t\t// AcceptINScope scope(this, false);\n\t\t\t// `for (async of` is disallowed but `for (async.x of` is allowed, so\n\t\t\t// check if the token is ASYNC after parsing the expression.\n\t\t\t// Initializer is reference followed by in/of.\n\t\t\tconst expression_is_async = this.current().isType(Token.ASYNC);\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\tif (forMode === 'OF' && starts_with_let || expression_is_async) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage(starts_with_let ? 'For Of Let' : 'For Of Async'));\n\t\t\t\t}\n\t\t\t\treturn this.parseForEachStatementWithoutDeclarations(initializer, forMode, start);\n\t\t\t}\n\t\t}\n\n\t\tthis.expect(Token.SEMICOLON);\n\t\treturn this.parseStandardForLoop(initializer!, start);\n\t}\n\tprotected parseStandardForLoopWithLexicalDeclarations(initializer: VariableDeclarationNode, start: PositionMark) {\n\t\t// The condition and the next statement of the for loop must be parsed\n\t\t// in a new scope.\n\t\treturn this.parseStandardForLoop(initializer, start);\n\t}\n\tprotected parseForEachStatementWithDeclarations(initializer: VariableDeclarationNode, forMode: 'IN' | 'OF', start: PositionMark) {\n\t\t// Just one declaration followed by in/of.\n\t\tif (initializer.getDeclarations().length != 1) {\n\t\t\tthrow new SyntaxError(this.errorMessage('For In/Of loop Multi Bindings'));\n\t\t}\n\t\treturn this.parseForEachStatementWithoutDeclarations(initializer, forMode, start);\n\t}\n\tprotected parseForEachStatementWithoutDeclarations(initializer: ExpressionNode, forMode: 'IN' | 'OF', start: PositionMark) {\n\t\tlet enumerable: ExpressionNode;\n\t\tif (forMode == 'OF') {\n\t\t\tthis.setAcceptIN(true);\n\t\t\tenumerable = this.parseAssignmentExpression();\n\t\t\tthis.restoreAcceptIN();\n\t\t} else {\n\t\t\tenumerable = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\tconst range = this.createRange(start);\n\t\tif (forMode === 'OF') {\n\t\t\treturn this.factory.createForOfStatement(initializer as ForDeclaration, enumerable, body, range);\n\t\t} else if (forMode === 'IN') {\n\t\t\treturn this.factory.createForInStatement(initializer as ForDeclaration, enumerable, body, range);\n\t\t}\n\t\tthrow new Error(this.errorMessage(`parsing for loop: ${this.position()}`));\n\t}\n\tprotected parseStandardForLoop(initializer: ExpressionNode, start: PositionMark) {\n\t\t// CheckStackOverflow();\n\t\t// ForStatementT loop = factory() -> NewForStatement(stmt_pos);\n\t\t// Target target(this, loop, labels, own_labels, Target:: TARGET_FOR_ANONYMOUS);\n\n\t\tlet cond: ExpressionNode = this.factory.createEmptyStatement();\n\t\tif (this.peek().isNotType(Token.SEMICOLON)) {\n\t\t\tcond = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.SEMICOLON);\n\n\t\tlet next: ExpressionNode = this.factory.createEmptyStatement();\n\t\tif (this.peek().isNotType(Token.RPAREN)) {\n\t\t\tnext = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\treturn this.factory.createForStatement(body, initializer, cond, next, this.createRange(start));\n\t}\n\tprotected parseForAwaitStatement() {\n\t\t// for await '(' ForDeclaration of AssignmentExpression ')'\n\n\t\t// Create an in-between scope for let-bound iteration variables.\n\t\t// BlockState for_state(zone(), & scope_);\n\t\tif (!this.isAwaitAllowed()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('\"await\" is not allowed'));\n\t\t}\n\t\tconst start = this.expect(Token.FOR);\n\t\tthis.expect(Token.AWAIT);\n\t\tthis.expect(Token.LPAREN);\n\n\t\tlet hasDeclarations = false;\n\t\t// Scope * inner_block_scope = NewScope(BLOCK_SCOPE);\n\t\tlet eachVariable: ExpressionNode;\n\n\t\tlet peek = this.peek();\n\t\tlet startsWithLet = peek.isType(Token.LET);\n\t\tif (peek.isType(Token.VAR) || peek.isType(Token.CONST)\n\t\t\t|| (startsWithLet && this.isNextLetKeyword())) {\n\t\t\t// The initializer contains declarations\n\t\t\t// 'for' 'await' '(' ForDeclaration 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\t// 'for' 'await' '(' 'var' ForBinding 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\thasDeclarations = true;\n\t\t\tconst initializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\t\t\tif (initializer.getDeclarations().length != 1) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('For In/Of Loop MultiBindings, \"for-await-of\"'));\n\t\t\t}\n\t\t\teachVariable = initializer;\n\t\t} else {\n\t\t\t// The initializer does not contain declarations.\n\t\t\t// 'for' 'await' '(' LeftHandSideExpression 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\tif (startsWithLet) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('The initializer does not contain declarations, For Of Let, \"for-await-of\"'));\n\t\t\t}\n\t\t\teachVariable = this.parseLeftHandSideExpression();\n\t\t}\n\n\t\tthis.expectContextualKeyword('of');\n\t\tthis.setAcceptIN(true);\n\t\tconst iterable = this.parseAssignmentExpression();\n\t\tthis.restoreAcceptIN();\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\tconst range = this.createRange(start);\n\t\treturn this.factory.createForAwaitOfStatement(eachVariable as ForDeclaration, iterable, body, range);\n\t}\n\tprotected parseVariableDeclarations(varContext: VariableDeclarationContext): VariableDeclarationNode {\n\t\t// VariableDeclarations ::\n\t\t// ('var' | 'const' | 'let') (Identifier ('=' AssignmentExpression)?)+[',']\n\t\t// var converted into ==> 'let' by parser\n\n\t\tlet mode: 'const' | 'let' | 'var';\n\t\tconst start = this.peek();\n\t\tconst token = start.token;\n\t\tswitch (token) {\n\t\t\tcase Token.CONST:\n\t\t\t\tthis.consume(token);\n\t\t\t\tmode = 'const';\n\t\t\t\tbreak;\n\t\t\tcase Token.VAR:\n\t\t\t\tthis.consume(token);\n\t\t\t\tmode = 'var';\n\t\t\t\tbreak;\n\t\t\tcase Token.LET:\n\t\t\tdefault:\n\t\t\t\tthis.consume(token);\n\t\t\t\tmode = 'let';\n\t\t\t\tbreak;\n\t\t}\n\t\tconst variables: VariableDeclarator[] = [];\n\t\tdo {\n\n\t\t\tlet name: ExpressionNode;\n\t\t\tlet value: ExpressionNode | undefined;\n\t\t\tconst range = this.createStartPosition();\n\t\t\t// Check for an identifier first, so that we can elide the pattern in cases\n\t\t\t// where there is no initializer (and so no proxy needs to be created).\n\t\t\tif (Token.isAnyIdentifier(this.peek().token)) {\n\t\t\t\tname = this.parseAndClassifyIdentifier(this.next());\n\t\t\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(name)) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments`));\n\t\t\t\t}\n\t\t\t\t// if (this.peekInOrOf()) {\n\t\t\t\t// \t// // Assignments need the variable expression for the assignment LHS, and\n\t\t\t\t// \t// // for of/in will need it later, so create the expression now.\n\t\t\t\t// }\n\t\t\t} else {\n\t\t\t\tname = this.parseBindingPattern(true);\n\t\t\t}\n\n\t\t\tif (this.check(Token.ASSIGN)) {\n\t\t\t\tthis.setAcceptIN(varContext !== VariableDeclarationContext.ForStatement)\n\t\t\t\tvalue = this.parseAssignmentExpression();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t} else if (!this.peekInOrOf()) {\n\t\t\t\t// ES6 'const' and binding patterns require initializers.\n\t\t\t\tif (mode === 'const' && (name === undefined || value === undefined)) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Declaration Missing Initializer`));\n\t\t\t\t}\n\t\t\t\t// value = undefined;\n\t\t\t}\n\t\t\tthis.updateRangeEnd(range);\n\t\t\tvariables.push(this.factory.createVariableDeclaration(name as DeclarationExpression, value, range));\n\t\t} while (this.check(Token.COMMA));\n\t\tconst range = this.createRange(start);\n\t\treturn this.factory.createVariableStatement(variables, mode, range);\n\t}\n\tprotected parseBindingPattern(isPattern: boolean): ExpressionNode {\n\t\t// Pattern ::\n\t\t// Identifier\n\t\t// ArrayLiteral\n\t\t// ObjectLiteral\n\n\t\tconst token = this.peek().token;\n\t\tif (Token.isAnyIdentifier(token)) {\n\t\t\tconst name = this.parseAndClassifyIdentifier(this.next());\n\t\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(name)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments`));\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t\tif (token == Token.LBRACK) {\n\t\t\treturn this.parseArrayLiteral(isPattern);\n\t\t} else if (token == Token.LBRACE) {\n\t\t\treturn this.parseObjectLiteral(isPattern);\n\t\t}\n\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${this.next().getValue()}`));\n\t}\n\tprotected parseAndClassifyIdentifier(next: TokenExpression): ExpressionNode {\n\t\t// Updates made here must be reflected on ClassifyPropertyIdentifier.\n\t\tif (Token.isInRangeIdentifierAndAsync(next.token)) {\n\t\t\tconst name = next.getValue<Identifier>();\n\t\t\tif (this.isArguments(name) && this.shouldBanArguments()) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Arguments Disallowed In Initializer And Static Block'));\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\n\t\tif (!Token.isValidIdentifier(next.token, this.languageMode, this.isGenerator(), this.isAwaitAsIdentifierDisallowed())) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Invalid Identifier'));\n\t\t}\n\n\t\tif (next.isType(Token.AWAIT)) {\n\t\t\treturn next.getValue<Identifier>();\n\t\t}\n\n\t\treturn next.getValue<Identifier>();\n\t}\n\tprotected parseContinueStatement(): ExpressionNode {\n\t\t// ContinueStatement ::\n\t\t// 'continue' ';'\n\t\t// Identifier? is not supported\n\n\t\tconst start = this.consume(Token.CONTINUE);\n\t\tlet label: Identifier | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext() &&\n\t\t\t!Token.isAutoSemicolon(this.peek().token)) {\n\t\t\t// ECMA allows \"eval\" or \"arguments\" as labels even in strict mode.\n\t\t\tlabel = this.parseIdentifier();\n\t\t}\n\t\tconst range = this.createRange(start);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createContinueStatement(label, range);\n\n\t}\n\tprotected parseBreakStatement(): ExpressionNode {\n\t\t// BreakStatement ::\n\t\t// 'break' ';'\n\t\t// Identifier? is not supported\n\n\t\tconst start = this.consume(Token.BREAK);\n\t\tlet label: Identifier | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext() &&\n\t\t\t!Token.isAutoSemicolon(this.peek().token)) {\n\t\t\t// ECMA allows \"eval\" or \"arguments\" as labels even in strict mode.\n\t\t\tlabel = this.parseIdentifier();\n\t\t}\n\t\tconst range = this.createRange(start);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createBreakStatement(label, range);\n\t}\n\tprotected parseReturnStatement(): ExpressionNode {\n\t\t// ReturnStatement ::\n\t\t// 'return' [no line terminator] Expression? ';'\n\n\t\t// Consume the return token. It is necessary to do that before\n\t\t// reporting any errors on it, because of the way errors are\n\t\t// reported (underlining).\n\t\tconst start = this.consume(Token.RETURN);\n\t\tconst tokenExp = this.peek();\n\t\tlet returnValue: ExpressionNode | undefined;\n\t\t// ExpressionT return_value = impl() -> NullExpression();\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || Token.isAutoSemicolon(tokenExp.token)) {\n\t\t\t// check if this scope is belong to 'constructor' method to return this at the end;\n\t\t\t// if (this.isDerivedConstructor(this.functionKind)) {\n\t\t\t// \treturnValue = ThisNode;\n\t\t\t// }\n\t\t} else {\n\t\t\treturnValue = this.parseExpression();\n\t\t}\n\t\tconst range = this.createRange(start);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createReturnStatement(returnValue, range);\n\t}\n\tprotected parseExpressionOrLabelledStatement(allowFunction: AllowLabelledFunctionStatement): ExpressionNode {\n\t\t// ExpressionStatement | LabelledStatement ::\n\t\t// Expression ';'\n\t\t// Identifier ':' Statement\n\t\t//\n\t\t// ExpressionStatement[Yield] :\n\t\t// [lookahead notin {{, function, class, let [}] Expression[In, ?Yield] ;\n\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\tcase Token.LBRACE:\n\t\t\t\tthrow new Error(this.errorMessage(`Unreachable state`));\n\t\t\tcase Token.CLASS:\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token ${this.next().getValue().toString()}`));\n\t\t\tcase Token.LET: {\n\t\t\t\tconst nextNext = this.peekAhead();\n\t\t\t\t// \"let\" followed by either \"[\", \"{\" or an identifier means a lexical\n\t\t\t\t// declaration, which should not appear here.\n\t\t\t\t// However, ASI may insert a line break before an identifier or a brace.\n\t\t\t\tif (nextNext.isNotType(Token.LBRACK) &&\n\t\t\t\t\t((nextNext.isNotType(Token.LBRACE) && nextNext.isNotType(Token.IDENTIFIER)))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Lexical Declaration ${this.position()}`));\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tconst range = this.createStartPosition();\n\t\tconst startsWithIdentifier = Token.isAnyIdentifier(this.peek().token);\n\t\tthis.setAcceptIN(true);\n\t\tconst expression: ExpressionNode = this.parseExpressionCoverGrammar();\n\t\tif (this.peek().isType(Token.COLON) && startsWithIdentifier && this.factory.isIdentifier(expression)) {\n\t\t\t// The whole expression was a single identifier, and not, e.g.,\n\t\t\t// something starting with an identifier or a parenthesized identifier.\n\n\t\t\t// Remove the \"ghost\" variable that turned out to be a label from the top\n\t\t\t// scope. This way, we don't try to resolve it during the scope\n\t\t\t// processing.\n\n\t\t\tthis.consume(Token.COLON);\n\t\t\t// ES#sec-labelled-function-declarations Labelled Function Declarations\n\t\t\tif (this.peek().isType(Token.FUNCTION)\n\t\t\t\t&& isSloppy(this.languageMode)\n\t\t\t\t&& allowFunction == AllowLabelledFunctionStatement.AllowLabelledFunctionStatement) {\n\t\t\t\tconst result = this.parseFunctionDeclaration();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tthis.updateRangeEnd(range);\n\t\t\t\treturn this.factory.createLabeledStatement(expression, result, range);\n\t\t\t}\n\t\t\tconst result = this.parseStatement(allowFunction);\n\t\t\tthis.restoreAcceptIN();\n\t\t\tthis.updateRangeEnd(range);\n\t\t\treturn this.factory.createLabeledStatement(expression, result, range);\n\t\t}\n\t\tthis.restoreAcceptIN();\n\t\t// Parsed expression statement, followed by semicolon.\n\t\tthis.expectSemicolon();\n\t\treturn expression;\n\t}\n\tprotected parseExpression(): ExpressionNode {\n\t\tthis.setAcceptIN(true);\n\t\tconst result = this.parseExpressionCoverGrammar();\n\t\tthis.restoreAcceptIN();\n\t\treturn result;\n\t}\n\tprotected parseFunctionDeclaration(): FunctionDeclaration {\n\t\tconst start = this.consume(Token.FUNCTION);\n\t\tif (this.check(Token.MUL)) {\n\t\t\tthrow new Error(this.errorMessage(`Error Generator In Single Statement Context`));\n\t\t}\n\t\treturn this.parseHoistableDeclaration01(FunctionKind.NormalFunction, undefined, false, start) as FunctionDeclaration;\n\t}\n\n\tprotected parseAsyncFunctionLiteral() {\n\t\t// AsyncFunctionLiteral ::\n\t\t// async [no LineTerminator here] function ( FormalParameters[Await] )\n\t\t// { AsyncFunctionBody }\n\t\t//\n\t\t// async [no LineTerminator here] function BindingIdentifier[Await]\n\t\t// ( FormalParameters[Await] ) { AsyncFunctionBody }\n\t\tif (this.current().isNotType(Token.ASYNC)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('invalid token'));\n\t\t}\n\t\tconst start = this.consume(Token.FUNCTION);\n\t\tlet name: Identifier | undefined;\n\t\tlet syntaxKind = FunctionSyntaxKind.AnonymousExpression;\n\t\tlet flags = FunctionKind.AsyncFunction;\n\t\tif (this.check(Token.MUL)) {\n\t\t\tflags = FunctionKind.AsyncGeneratorFunction;\n\t\t}\n\t\tif (this.peekAnyIdentifier()) {\n\t\t\tsyntaxKind = FunctionSyntaxKind.NamedExpression;\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t}\n\t\treturn this.parseFunctionLiteral(flags, syntaxKind, name, start);\n\t}\n\tprotected parseHoistableDeclaration(names: string[] | undefined, defaultExport: boolean, start: PositionMark) {\n\t\tthis.consume(Token.FUNCTION);\n\t\tlet flags = FunctionKind.NormalFunction;\n\t\tif (this.check(Token.MUL)) {\n\t\t\tflags = FunctionKind.GeneratorFunction;\n\t\t}\n\t\treturn this.parseHoistableDeclaration01(flags, names, defaultExport, start);\n\t}\n\n\tprotected parseHoistableDeclaration01(flag: FunctionKind, names: string[] | undefined, defaultExport: boolean, start: PositionMark) {\n\t\t// FunctionDeclaration ::\n\t\t// 'function' Identifier '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t// 'function' '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t// GeneratorDeclaration ::\n\t\t// 'function' '*' Identifier '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t// 'function' '*' '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t//\n\t\t// The anonymous forms are allowed iff [default_export] is true.\n\t\t//\n\t\t// 'function' and '*' (if present) have been consumed by the caller.\n\n\t\t// (FunctionType.ASYNC === flag || FunctionType.GENERATOR === flag);\n\n\t\tif ((flag & ParseFunctionFlag.IsAsync) != 0 && this.check(Token.MUL)) {\n\t\t\t// Async generator\n\t\t\tflag |= ParseFunctionFlag.IsGenerator;\n\t\t}\n\n\t\tlet name: Identifier | undefined;\n\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\tif (defaultExport) {\n\t\t\t\tname = this.factory.createIdentifier('default', this.createRange(start));\n\t\t\t} else {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Missing Function Name'));\n\t\t\t}\n\t\t} else {\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t}\n\t\tnames?.push(name.toString());\n\t\treturn this.parseFunctionLiteral(flag, FunctionSyntaxKind.Declaration, name, start);\n\t}\n\tprotected parseIdentifier(kind?: FunctionKind): Identifier {\n\t\tkind ??= this.functionKind;\n\t\tconst next = this.next();\n\t\tif (!Token.isValidIdentifier(next.token, this.languageMode, isGeneratorFunction(kind), isAwaitAsIdentifierDisallowed(kind))) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${next.getValue()}`));\n\t\t}\n\t\tif (next.isType(Token.IDENTIFIER)) {\n\t\t\treturn next.getValue<Identifier>();\n\t\t}\n\t\treturn this.getIdentifier();\n\t}\n\tprotected getIdentifier(): Identifier {\n\t\tconst current = this.current();\n\t\tswitch (current.token) {\n\t\t\tcase Token.AWAIT:\n\t\t\t\treturn this.factory.createIdentifier('await', current.range);\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn this.factory.createIdentifier('async', current.range);\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\treturn current.getValue();\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tconst name = current.getValue().toString();\n\t\tif (name == 'constructor') {\n\t\t\treturn this.factory.createIdentifier('constructor', current.range);\n\t\t}\n\t\tif (name == 'name') {\n\t\t\treturn this.factory.createIdentifier('name', current.range);\n\t\t}\n\t\tif (name == 'eval') {\n\t\t\treturn this.factory.createIdentifier('eval', current.range);\n\t\t}\n\t\telse if (name == 'arguments') {\n\t\t\treturn this.factory.createIdentifier('arguments', current.range);\n\t\t}\n\t\treturn current.getValue();\n\t}\n\tprotected parseFunctionLiteral(flag: FunctionKind, functionSyntaxKind: FunctionSyntaxKind, name: Identifier | undefined, start: PositionMark): FunctionDeclaration | FunctionExpression {\n\t\t// Function ::\n\t\t// '(' FormalParameterList? ')' '{' FunctionBody '}'\n\n\t\tthis.setFunctionKind(flag);\n\t\tconst functionInfo: FunctionInfo = {};\n\t\tthis.expect(Token.LPAREN);\n\t\tconst formals = this.parseFormalParameterList(functionInfo);\n\t\tthis.expect(Token.RPAREN);\n\t\tconst bodyStart = this.expect(Token.LBRACE);\n\t\tthis.setAcceptIN(true);\n\t\tconst body = this.parseFunctionBody(flag, FunctionBodyType.BLOCK, functionSyntaxKind);\n\t\tthis.restoreAcceptIN();\n\t\tthis.restoreFunctionKind();\n\t\tconst bodyRange = this.createRange(bodyStart);\n\t\tconst funcRange = this.createRange(start);\n\t\tconst bodyBlock = this.factory.createBlock(body, bodyRange);\n\t\tif (name) {\n\t\t\treturn this.factory.createFunctionDeclaration(formals, bodyBlock, isAsyncFunction(flag), isGeneratorFunction(flag), name, funcRange);\n\t\t}\n\t\treturn this.factory.createFunctionExpression(formals, bodyBlock, isAsyncFunction(flag), isGeneratorFunction(flag), funcRange);\n\t}\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType.BLOCK,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode[];\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType.EXPRESSION,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode[] | ExpressionNode {\n\t\t// Building the parameter initialization block declares the parameters.\n\t\t// TODO(verwaest): Rely on ArrowHeadParsingScope instead.\n\n\t\tlet innerBody: ExpressionNode[] | ExpressionNode;\n\t\tif (bodyType == FunctionBodyType.EXPRESSION) {\n\t\t\tinnerBody = this.parseAssignmentExpression();\n\t\t} else {\n\t\t\t// DCHECK(accept_IN_);\n\t\t\t// DCHECK_EQ(FunctionBodyType:: kBlock, body_type);\n\t\t\t// If we are parsing the source as if it is wrapped in a function, the\n\t\t\t// source ends without a closing brace.\n\t\t\tconst closing_token = functionSyntaxKind == FunctionSyntaxKind.Wrapped ? Token.EOS : Token.RBRACE;\n\n\t\t\tif (isAsyncGeneratorFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAndRewriteAsyncGeneratorFunctionBody(kind);\n\t\t\t} else if (isGeneratorFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAndRewriteGeneratorFunctionBody(kind);\n\t\t\t} else if (isAsyncFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAsyncFunctionBody();\n\t\t\t} else {\n\t\t\t\tinnerBody = this.parseStatementList(closing_token);\n\t\t\t}\n\t\t\tthis.expect(closing_token);\n\t\t}\n\t\treturn innerBody;\n\t}\n\tprotected parseAndRewriteAsyncGeneratorFunctionBody(kind: FunctionKind): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseAndRewriteGeneratorFunctionBody(kind: FunctionKind): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseAsyncFunctionBody(): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseStatementList(endToken: Token): ExpressionNode[] {\n\t\t// StatementList ::\n\t\t// (StatementListItem)* <end_token>\n\t\tif (this.peek().test((token, value) => Token.STRING === token && 'use strict' === (value as Literal<string>).getValue())) {\n\t\t\tthis.languageMode = LanguageMode.Strict;\n\t\t}\n\t\tconst list: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(endToken)) {\n\t\t\tconst stat = this.parseStatementListItem();\n\t\t\tif (!stat) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (this.factory.isEmptyStatement(stat)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlist.push(stat);\n\t\t}\n\t\treturn list;\n\t}\n\tprotected parseFormalParameterList(functionInfo: FunctionInfo): DeclarationExpression[] {\n\t\t// FormalParameters[Yield] :\n\t\t// [empty]\n\t\t// FunctionRestParameter[?Yield]\n\t\t// FormalParameterList[?Yield]\n\t\t// FormalParameterList[?Yield] ,\n\t\t// FormalParameterList[?Yield] , FunctionRestParameter[?Yield]\n\t\t//\n\t\t// FormalParameterList[Yield] :\n\t\t// FormalParameter[?Yield]\n\t\t// FormalParameterList[?Yield] , FormalParameter[?Yield]\n\n\t\tconst parameters: DeclarationExpression[] = [];\n\t\tif (this.peek().isNotType(Token.RPAREN)) {\n\t\t\twhile (true) {\n\t\t\t\tconst param = this.parseFormalParameter(functionInfo);\n\t\t\t\tparameters.push(param);\n\t\t\t\tif (functionInfo.rest) {\n\t\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Param After Rest`));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!this.check(Token.COMMA)) break;\n\t\t\t\tif (this.peek().isType(Token.RPAREN)) {\n\t\t\t\t\t// allow the trailing comma\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn parameters;\n\t}\n\tprotected parseFormalParameter(functionInfo: FunctionInfo): DeclarationExpression {\n\t\t// FormalParameter[Yield,GeneratorParameter] :\n\t\t// BindingElement[?Yield, ?GeneratorParameter]\n\t\tconst range = this.createStartPosition();\n\t\tfunctionInfo.rest = this.check(Token.ELLIPSIS);\n\t\tconst pattern = this.parseBindingPattern(true);\n\t\tlet initializer: DeclarationExpression;\n\t\tif (this.check(Token.ASSIGN)) {\n\t\t\tif (functionInfo.rest) {\n\t\t\t\tthrow new Error(this.errorMessage(`Rest Default Initializer`));\n\t\t\t}\n\t\t\tthis.setAcceptIN(true);\n\t\t\tconst right = this.parseAssignmentExpression();\n\t\t\tthis.restoreAcceptIN();\n\t\t\tthis.updateRangeEnd(range);\n\t\t\tconst left = this.checkParamType(pattern as DeclarationExpression);\n\t\t\tinitializer = this.factory.createAssignmentPattern(left, right, range);\n\t\t} else {\n\t\t\tthis.updateRangeEnd(range);\n\t\t\tconst param = this.checkParamType(pattern as DeclarationExpression);\n\t\t\tinitializer = functionInfo.rest ? this.factory.createRestElement(param, param.range && [range[0], param.range[1]]) : param;\n\t\t}\n\t\treturn initializer;\n\t}\n\tprotected parseExpressionCoverGrammar(): ExpressionNode {\n\t\t// Expression ::\n\t\t// AssignmentExpression\n\t\t// Expression ',' AssignmentExpression\n\n\t\tconst list: ExpressionNode[] = [];\n\t\tlet expression: ExpressionNode;\n\t\twhile (true) {\n\t\t\tif (this.peek().isType(Token.ELLIPSIS)) {\n\t\t\t\treturn this.parseArrowParametersWithRest(list);\n\t\t\t}\n\t\t\texpression = this.parseAssignmentExpressionCoverGrammar();\n\t\t\tlist.push(expression);\n\n\t\t\tif (!this.check(Token.COMMA)) break;\n\n\t\t\tif (this.peek().isType(Token.RPAREN) && this.peekAhead().isType(Token.ARROW)) {\n\t\t\t\t// a trailing comma is allowed at the end of an arrow parameter list\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (list.length == 1) return expression;\n\t\treturn this.expressionListToExpression(list);\n\t}\n\tprotected parseArrowParametersWithRest(list: ExpressionNode[]): ExpressionNode {\n\t\tconst start = this.consume(Token.ELLIPSIS);\n\t\tconst pattern: ExpressionNode = this.parseBindingPattern(true);\n\t\tconst range = this.createRange(start);\n\t\tif (this.peek().isType(Token.ASSIGN)) {\n\t\t\tthrow new Error(this.errorMessage(`Error A rest parameter cannot have an initializer`));\n\t\t}\n\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\tthrow new Error(this.errorMessage(`Error A rest parameter or binding pattern may not have a trailing comma`));\n\t\t}\n\t\t// 'x, y, ...z' in CoverParenthesizedExpressionAndArrowParameterList only\n\t\t// as the formal parameters of'(x, y, ...z) => foo', and is not itself a\n\t\t// valid expression.\n\t\tif (this.peek().isNotType(Token.RPAREN) || this.peekAhead().isNotType(Token.ARROW)) {\n\t\t\tthrow new Error(this.errorMessage(`Error Unexpected Token At ${this.position()}`));\n\t\t}\n\t\tlist.push(this.factory.createSpreadElement(pattern, range));\n\t\treturn this.expressionListToExpression(list);\n\t}\n\tprotected expressionListToExpression(list: ExpressionNode[]): ExpressionNode {\n\t\tconst first = list[0];\n\t\tif (list.length === 1) { return first; }\n\t\tif (this.factory.isSequenceExpression(first)) {\n\t\t\tfirst.getExpressions().push(...list.slice(1));\n\t\t\treturn first;\n\t\t}\n\t\tconst range = this.createRange(list.at(0));\n\t\trange && this.updateRangeEnd(range);\n\t\treturn this.factory.createCommaListExpression(list, range);\n\t}\n\tprotected parseMemberExpression(): ExpressionNode {\n\t\t// MemberExpression ::\n\t\t// (PrimaryExpression | FunctionLiteral | ClassLiteral)\n\t\t// ('[' Expression ']' | '.' Identifier | Arguments | TemplateLiteral)*\n\t\t//\n\t\t// CallExpression ::\n\t\t// (SuperCall | ImportCall)\n\t\t// ('[' Expression ']' | '.' Identifier | Arguments | TemplateLiteral)*\n\t\t//\n\t\t// The '[' Expression ']' and '.' Identifier parts are parsed by\n\t\t// ParseMemberExpressionContinuation, and everything preceeding it is merged\n\t\t// into ParsePrimaryExpression.\n\n\t\t// Parse the initial primary or function expression.\n\t\tconst result = this.parsePrimaryExpression();\n\t\treturn this.parseMemberExpressionContinuation(result);\n\t}\n\tprotected parsePrimaryExpression(): ExpressionNode {\n\t\t// PrimaryExpression ::\n\t\t// 'this'\n\t\t// 'null'\n\t\t// 'true'\n\t\t// 'false'\n\t\t// Identifier\n\t\t// Number\n\t\t// String\n\t\t// ArrayLiteral\n\t\t// ObjectLiteral\n\t\t// RegExpLiteral\n\t\t// '(' Expression ')'\n\t\t// do Block\n\t\t// AsyncFunctionLiteral\n\n\t\tlet token = this.peek();\n\t\tif (Token.isAnyIdentifier(token.token)) {\n\t\t\tthis.consume(token.token);\n\t\t\tlet kind = FunctionKind.NormalFunction;\n\t\t\tif (token.isType(Token.ASYNC) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t// async function ...\n\t\t\t\tif (this.peek().isType(Token.FUNCTION)) {\n\t\t\t\t\treturn this.parseAsyncFunctionLiteral();\n\t\t\t\t};\n\t\t\t\t// async Identifier => ...\n\t\t\t\tif (Token.isAnyIdentifier(this.peek().token) && this.peekAhead().isType(Token.ARROW)) {\n\t\t\t\t\ttoken = this.next();\n\t\t\t\t\tkind = FunctionKind.AsyncFunction;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.peek().isType(Token.ARROW)) {\n\t\t\t\tthis.setFunctionKind(kind);\n\t\t\t\tconst name = this.parseAndClassifyIdentifier(token);\n\t\t\t\tconst params = this.factory.isSequenceExpression(name) ? name.getExpressions() : [name];\n\t\t\t\tconst arrow = this.parseArrowFunctionLiteral(params as DeclarationExpression[], kind, this.createRange(token));\n\t\t\t\tthis.restoreFunctionKind();\n\t\t\t\treturn arrow;\n\t\t\t}\n\t\t\treturn this.parseAndClassifyIdentifier(token);\n\t\t}\n\n\t\tif (Token.isLiteral(token.token)) {\n\t\t\treturn this.next().getValue();\n\t\t}\n\n\t\tswitch (token.token) {\n\t\t\tcase Token.NEW:\n\t\t\t\treturn this.parseMemberWithPresentNewPrefixesExpression();\n\t\t\tcase Token.THIS:\n\t\t\t\tthis.consume(Token.THIS);\n\t\t\t\treturn this.factory.createThis(token.range);\n\t\t\tcase Token.DIV:\n\t\t\tcase Token.DIV_ASSIGN:\n\t\t\t\t// case Token.REGEXP_LITERAL:\n\t\t\t\t// this.consume(Token.REGEXP_LITERAL);\n\t\t\t\t// return token.value!;\n\t\t\t\treturn this.parseRegExpLiteral();\n\t\t\tcase Token.FUNCTION:\n\t\t\t\treturn this.parseFunctionExpression();\n\t\t\tcase Token.SUPER: {\n\t\t\t\treturn this.parseSuperExpression();\n\t\t\t}\n\t\t\tcase Token.IMPORT:\n\t\t\t\treturn this.parseImportExpressions();\n\n\t\t\tcase Token.LBRACK:\n\t\t\t\treturn this.parseArrayLiteral(false);\n\n\t\t\tcase Token.LBRACE:\n\t\t\t\treturn this.parseObjectLiteral(false);\n\n\t\t\tcase Token.LPAREN: {\n\t\t\t\tthis.consume(Token.LPAREN);\n\t\t\t\tif (this.check(Token.RPAREN)) {\n\t\t\t\t\t// ()=>x. The continuation that consumes the => is in\n\t\t\t\t\t// ParseAssignmentExpressionCoverGrammar.\n\n\t\t\t\t\tif (!this.peek().isType(Token.ARROW)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${Token.RPAREN.getName()}`));\n\t\t\t\t\t}\n\t\t\t\t\tconst result = this.factory.createCommaListExpression([], this.createRange(token));\n\t\t\t\t\tthis.markParenthesized(result);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\t// Heuristically try to detect immediately called functions before\n\t\t\t\t// seeing the call parentheses.\n\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst expression = this.parseExpressionCoverGrammar();\n\t\t\t\tthis.markParenthesized(expression);\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn expression;\n\t\t\t}\n\t\t\tcase Token.CLASS: {\n\t\t\t\treturn this.parseClassExpression();\n\t\t\t}\n\t\t\tcase Token.TEMPLATE_SPAN:\n\t\t\tcase Token.TEMPLATE_TAIL:\n\t\t\t\treturn this.parseTemplateLiteral();\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${JSON.stringify(this.next())}`));\n\t}\n\tprotected parseTemplateLiteral(tag?: ExpressionNode): ExpressionNode {\n\t\t// A TemplateLiteral is made up of 0 or more TEMPLATE_SPAN tokens (literal\n\t\t// text followed by a substitution expression), finalized by a single\n\t\t// TEMPLATE_TAIL.\n\t\t//\n\t\t// In terms of draft language, TEMPLATE_SPAN may be either the TemplateHead or\n\t\t// TemplateMiddle productions, while TEMPLATE_TAIL is either TemplateTail, or\n\t\t// NoSubstitutionTemplate.\n\t\t//\n\t\t// When parsing a TemplateLiteral, we must have scanned either an initial\n\t\t// TEMPLATE_SPAN, or a TEMPLATE_TAIL.\n\t\tlet next = this.peek();\n\t\tif (!Token.isTemplate(next.token)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Token: ${JSON.stringify(this.next())}`));\n\t\t}\n\t\t// If we reach a TEMPLATE_TAIL first, we are parsing a NoSubstitutionTemplate.\n\t\t// In this case we may simply consume the token and build a template with a\n\t\t// single TEMPLATE_SPAN and no expressions.\n\t\tif (next.isType(Token.TEMPLATE_TAIL)) {\n\t\t\tthis.consume(Token.TEMPLATE_TAIL);\n\t\t\tconst template = next.getValue<TemplateStringLiteral>();\n\t\t\treturn this.createTemplateLiteralExpressionNode([template.string], [], tag, template.range);\n\t\t}\n\t\tthis.consume(Token.TEMPLATE_SPAN);\n\t\tconst expressions: ExpressionNode[] = [];\n\t\tconst strings: string[] = [];\n\t\tstrings.push(next.getValue<TemplateStringLiteral>().string);\n\t\t// If we open with a TEMPLATE_SPAN, we must scan the subsequent expression,\n\t\t// and repeat if the following token is a TEMPLATE_SPAN as well (in this\n\t\t// case, representing a TemplateMiddle).\n\t\tdo {\n\t\t\tthis.setAcceptIN(true);\n\t\t\tconst expression = this.parseExpressionCoverGrammar();\n\t\t\texpressions.push(expression);\n\t\t\tnext = this.next();\n\t\t\tif (next.isNotType(Token.RBRACE)) {\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unterminated Template Expr'));\n\t\t\t}\n\t\t\t// If we didn't die parsing that expression, our next token should be a\n\t\t\t// TEMPLATE_SPAN or TEMPLATE_TAIL.\n\t\t\tnext = this.scanner.scanTemplateContinuation();\n\t\t\tstrings.push(next.getValue<TemplateStringLiteral>().string);\n\t\t\tthis.restoreAcceptIN();\n\t\t} while (next.isType(Token.TEMPLATE_SPAN));\n\t\tif (next.isNotType(Token.TEMPLATE_TAIL)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Token: ${JSON.stringify(next)}`));\n\t\t}\n\t\t// Once we've reached a TEMPLATE_TAIL, we can close the TemplateLiteral.\n\t\treturn this.createTemplateLiteralExpressionNode(strings, expressions, tag);\n\t}\n\tprotected createTemplateLiteralExpressionNode(strings: string[], expressions: ExpressionNode[], tag?: ExpressionNode, range?: RangeOrVoid): TaggedTemplateExpression | TemplateLiteral {\n\t\tif (tag) {\n\t\t\treturn this.factory.createTaggedTemplateExpression(tag, strings, expressions, range);\n\t\t}\n\t\treturn this.factory.createTemplateExpression(strings, expressions, range);\n\t}\n\tprotected parseMemberWithPresentNewPrefixesExpression(): ExpressionNode {\n\t\t// NewExpression ::\n\t\t// ('new')+ MemberExpression\n\t\t//\n\t\t// NewTarget ::\n\t\t// 'new' '.' 'target'\n\n\t\t// The grammar for new expressions is pretty warped. We can have several 'new'\n\t\t// keywords following each other, and then a MemberExpression. When we see '('\n\t\t// after the MemberExpression, it's associated with the rightmost unassociated\n\t\t// 'new' to create a NewExpression with arguments. However, a NewExpression\n\t\t// can also occur without arguments.\n\n\t\t// Examples of new expression:\n\t\t// new foo.bar().baz means (new (foo.bar)()).baz\n\t\t// new foo()() means (new foo())()\n\t\t// new new foo()() means (new (new foo())())\n\t\t// new new foo means new (new foo)\n\t\t// new new foo() means new (new foo())\n\t\t// new new foo().bar().baz means (new (new foo()).bar()).baz\n\t\t// new super.x means new (super.x)\n\t\tconst start = this.consume(Token.NEW);\n\n\t\tlet result: ExpressionNode;\n\n\t\t// CheckStackOverflow();\n\n\t\tif (this.peek().isType(Token.IMPORT) && this.peekAhead().isType(Token.LPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Import Call Not New Expression`));\n\t\t} else if (this.peek().isType(Token.PERIOD)) {\n\t\t\tresult = this.parseNewTargetExpression(start);\n\t\t\treturn this.parseMemberExpressionContinuation(result);\n\t\t} else {\n\t\t\tresult = this.parseMemberExpression();\n\t\t\tif (this.factory.isSuper(result)) {\n\t\t\t\t// new super() is never allowed\n\t\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Super, new super() is never allowed`));\n\t\t\t}\n\t\t}\n\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\t// NewExpression with arguments.\n\t\t\tconst args = this.parseArguments();\n\t\t\tresult = this.factory.createNewExpression(result, args, this.createRange(start));\n\t\t\t// The expression can still continue with . or [ after the arguments.\n\t\t\treturn this.parseMemberExpressionContinuation(result);\n\t\t}\n\n\t\tif (this.peek().isType(Token.QUESTION_PERIOD)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Optional Chaining with New not allowed, new x?.y()`));\n\t\t}\n\t\treturn this.factory.createNewExpression(result, undefined, this.createRange(start));\n\t}\n\tprotected parseArguments(maybeArrow?: ParsingArrowHeadFlag): ExpressionNode[] {\n\t\t// Arguments ::\n\t\t// '(' (AssignmentExpression)*[','] ')'\n\n\t\tthis.consume(Token.LPAREN);\n\t\tconst args: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(Token.RPAREN)) {\n\t\t\tconst range = this.createStartPosition();\n\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\tthis.setAcceptIN(true);\n\t\t\tlet argument: ExpressionNode = this.parseAssignmentExpressionCoverGrammar();\n\t\t\tif (ParsingArrowHeadFlag.MaybeArrowHead === maybeArrow) {\n\t\t\t\tif (isSpread) {\n\t\t\t\t\tif (this.factory.isAssignmentExpression(argument)) {\n\t\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\t\tthrow new Error(this.errorMessage(` Rest parameter may not have a default initializer'`));\n\t\t\t\t\t}\n\t\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`parsing '...spread,arg =>'`));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isSpread) {\n\t\t\t\tthis.updateRangeEnd(range);\n\t\t\t\targument = this.factory.createSpreadElement(argument, range);\n\t\t\t}\n\t\t\targs.push(argument);\n\t\t\tthis.restoreAcceptIN();\n\t\t\tif (!this.check(Token.COMMA)) break;\n\t\t}\n\t\tif (!this.check(Token.RPAREN)) {\n\t\t\tthrow new Error(this.errorMessage(`parsing arguments call, expecting ')'`));\n\t\t}\n\t\treturn args;\n\t}\n\tprotected parseAssignmentExpressionCoverGrammar(): ExpressionNode {\n\t\t// AssignmentExpression ::\n\t\t// ConditionalExpression\n\t\t// ArrowFunction\n\t\t// YieldExpression\n\t\t// LeftHandSideExpression AssignmentOperator AssignmentExpression\n\n\t\tconst range = this.createStartPosition();\n\t\tif (this.peek().isType(Token.YIELD) && isGeneratorFunction(this.functionKind)) {\n\t\t\treturn this.parseYieldExpression();\n\t\t}\n\t\tlet expression: ExpressionNode = this.parseConditionalExpression();\n\t\tconst op = this.peek().token;\n\t\tif (!Token.isArrowOrAssignmentOp(op)) {\n\t\t\tthis.clearParenthesized(expression);\n\t\t\treturn expression;\n\t\t};\n\t\t// Arrow functions.\n\t\tif (op === Token.ARROW) {\n\t\t\tif (!this.factory.isIdentifier(expression) && !this.isParenthesized(expression)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Malformed Arrow Fun Param List`));\n\t\t\t}\n\t\t\tconst kind = FunctionKind.NormalFunction;\n\t\t\tthis.setFunctionKind(kind);\n\t\t\tlet arrow: ExpressionNode;\n\t\t\tif (this.factory.isSequenceExpression(expression)) {\n\t\t\t\tarrow = this.parseArrowFunctionLiteral(expression.getExpressions() as DeclarationExpression[], FunctionKind.NormalFunction, range);\n\t\t\t} else if (this.factory.isGroupingExpression(expression)) {\n\t\t\t\tarrow = this.parseArrowFunctionLiteral([expression.getNode() as DeclarationExpression], FunctionKind.NormalFunction, range);\n\t\t\t} else {\n\t\t\t\tthis.clearParenthesized(expression);\n\t\t\t\tarrow = this.parseArrowFunctionLiteral([expression as DeclarationExpression], FunctionKind.NormalFunction, range);\n\t\t\t}\n\t\t\tthis.restoreFunctionKind();\n\t\t\treturn arrow;\n\t\t}\n\t\tif (this.isAssignableIdentifier(expression)) {\n\t\t} else if (this.factory.isPropertyOrMemberExpression(expression)) {\n\t\t} else if (this.factory.canBePattern(expression) && Token.isAssignment(op)) {\n\t\t\t// Destructuring assignment.\n\t\t\texpression = this.factory.isObjectExpression(expression)\n\t\t\t\t? this.factory.createObjectBindingPattern(expression.getProperties(), expression.range)\n\t\t\t\t: this.factory.createArrayBindingPattern(expression.getElements() as DeclarationExpression[], expression.range);\n\t\t} else {\n\t\t\tif (!this.isValidReferenceExpression(expression)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Invalid Reference Expression`));\n\t\t\t}\n\t\t\tif (Token.isLogicalAssignmentOp(op)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Invalid Lhs In Assignment`));\n\t\t\t}\n\t\t}\n\n\t\tthis.consume(op);\n\t\t// const opPosition = this.position();\n\t\tconst right: ExpressionNode = this.parseAssignmentExpression();\n\t\t// Anonymous function name inference applies to =, ||=, &&=, and ??=.\n\n\t\tif (!Token.isAssignment(op)) {\n\t\t\tthrow new Error(this.errorMessage(`Invalid Destructuring Target`));\n\t\t}\n\t\tthis.updateRangeEnd(range)\n\t\treturn this.factory.createAssignment(op.getName() as AssignmentOperator, expression, right, range);\n\t}\n\tprotected parseAssignmentExpression(): ExpressionNode {\n\t\treturn this.parseAssignmentExpressionCoverGrammar();\n\t}\n\tprivate checkParamType(node: DeclarationExpression) {\n\t\tif (this.factory.isArrayExpression(node)) {\n\t\t\treturn this.factory.createArrayBindingPattern(node.getElements() as DeclarationExpression[], node.range);\n\t\t} else if (this.factory.isObjectExpression(node)) {\n\t\t\treturn this.factory.createObjectBindingPattern(node.getProperties(), node.range);\n\t\t}\n\t\telse if (this.factory.isSpreadElement(node)) {\n\t\t\tlet arg = node.getArgument() as DeclarationExpression;\n\t\t\t// let param = arg;\n\t\t\tif (this.factory.isArrayExpression(arg)) {\n\t\t\t\targ = this.factory.createArrayBindingPattern(arg.getElements() as DeclarationExpression[], arg.range);\n\t\t\t} else if (this.factory.isObjectExpression(arg)) {\n\t\t\t\targ = this.factory.createObjectBindingPattern(arg.getProperties(), arg.range);\n\t\t\t}\n\t\t\treturn this.factory.createRestElement(arg, node.range);\n\t\t}\n\t\treturn node;\n\t}\n\tprotected parseArrowFunctionLiteral(parameters: DeclarationExpression[], kind: FunctionKind, range: Range): ExpressionNode {\n\t\tparameters = parameters.map(node => this.checkParamType(node));\n\t\tif (this.peek().isNotType(Token.ARROW)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('SyntaxError Expecting Arrow Token'));\n\t\t}\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token \"\\n\" a line terminator after arrow token\"'));\n\t\t}\n\t\tlet body: ExpressionNode[] | ExpressionNode;\n\t\tlet has_braces = true;\n\t\tthis.consume(Token.ARROW);\n\t\tif (this.peek().isType(Token.LBRACE)) {\n\t\t\tthis.consume(Token.LBRACE);\n\t\t\tthis.setStatue(true, kind);\n\t\t\tbody = this.parseFunctionBody(kind, FunctionBodyType.BLOCK, FunctionSyntaxKind.AnonymousExpression);\n\t\t\tthis.restoreStatue();\n\t\t} else {\n\t\t\thas_braces = false;\n\t\t\tbody = this.parseFunctionBody(kind, FunctionBodyType.EXPRESSION, FunctionSyntaxKind.AnonymousExpression);\n\t\t}\n\t\tthis.updateRangeEnd(range);\n\t\treturn this.factory.createArrowFunction(parameters, body, !has_braces, isAsyncFunction(kind), range);\n\t}\n\tprotected parseRegExpLiteral(): ExpressionNode {\n\t\tif (!this.scanner.scanRegExpPattern()) {\n\t\t\tthrow new Error('Unterminated RegExp');\n\t\t}\n\t\treturn this.scanner.currentToken().getValue();\n\t}\n\tprotected parseArrayLiteral(isPattern: boolean) {\n\n\t\t// ArrayLiteral ::\n\t\t// '[' Expression? (',' Expression?)* ']'\n\n\t\tconst start = this.consume(Token.LBRACK);\n\t\tlet first_spread_index = -1;\n\t\tconst values: (ExpressionNode | null)[] = [];\n\n\t\twhile (!this.check(Token.RBRACK)) {\n\t\t\tlet elem: ExpressionNode | null;\n\t\t\tconst peek = this.peek();\n\t\t\tif (peek.isType(Token.COMMA)) {\n\t\t\t\telem = null;\n\t\t\t} else if (this.check(Token.ELLIPSIS)) {\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst argument = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\telem = this.factory.createSpreadElement(argument, this.createRange(peek));\n\t\t\t\tif (first_spread_index < 0) {\n\t\t\t\t\tfirst_spread_index = values.length;\n\t\t\t\t}\n\t\t\t\tif (this.factory.isAssignmentExpression(argument) && isPattern) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Invalid Destructuring Target'));\n\t\t\t\t}\n\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Element After Rest'));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\telem = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t}\n\t\t\tvalues.push(elem);\n\t\t\tif (this.peek().isNotType(Token.RBRACK)) {\n\t\t\t\tthis.expect(Token.COMMA);\n\t\t\t}\n\t\t}\n\t\tconst range = this.createRange(start);\n\t\tif (isPattern) {\n\t\t\treturn this.factory.createArrayBindingPattern(values as DeclarationExpression[], range);\n\t\t}\n\t\treturn this.factory.createArrayLiteralExpression(values, range);\n\t}\n\tprotected parsePossibleDestructuringSubPattern(): ExpressionNode {\n\t\treturn this.parseAssignmentExpressionCoverGrammar();\n\t}\n\tprotected parseObjectLiteral(isPattern: boolean): ExpressionNode {\n\t\t// ObjectLiteral ::\n\t\t// '{' (PropertyDefinition (',' PropertyDefinition)* ','? )? '}'\n\n\t\tconst start = this.consume(Token.LBRACE);\n\t\tconst properties: ExpressionNode[] = [];\n\t\twhile (!this.check(Token.RBRACE)) {\n\t\t\tconst property: ExpressionNode = this.parseObjectPropertyDefinition(isPattern);\n\t\t\tproperties.push(property);\n\t\t\tif (this.peek().isNotType(Token.RBRACE)) {\n\t\t\t\tthis.expect(Token.COMMA);\n\t\t\t}\n\t\t}\n\t\tconst range = this.createRange(start)\n\t\tif (isPattern) {\n\t\t\treturn this.factory.createObjectBindingPattern(properties as (Property | RestElement)[], range);\n\t\t}\n\t\treturn this.factory.createObjectLiteralExpression(properties as Property[], range);\n\t}\n\tprotected parseObjectPropertyDefinition(isPattern: boolean): ExpressionNode {\n\t\tconst propInfo = new PropertyKindInfo();\n\t\tconst nameExpression = this.parseProperty(propInfo);\n\n\t\tswitch (propInfo.kind) {\n\t\t\tcase PropertyKind.Spread:\n\t\t\t\tlet value: SpreadElement | RestElement = nameExpression as SpreadElement;\n\t\t\t\tif (isPattern) {\n\t\t\t\t\tvalue = this.factory.createRestElement(value.getArgument() as DeclarationExpression, value.range);\n\t\t\t\t}\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tvalue.getArgument(),\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\n\t\t\tcase PropertyKind.Value: {\n\t\t\t\tthis.consume(Token.COLON);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst value = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase PropertyKind.Assign:\n\t\t\tcase PropertyKind.ShorthandOrClassField:\n\t\t\tcase PropertyKind.Shorthand: {\n\t\t\t\t// PropertyDefinition\n\t\t\t\t// IdentifierReference\n\t\t\t\t// CoverInitializedName\n\t\t\t\t//\n\t\t\t\t// CoverInitializedName\n\t\t\t\t// IdentifierReference Initializer?\n\n\t\t\t\tconst lhs = this.factory.createIdentifier(propInfo.name, this.createRange(propInfo.rangeStart));\n\t\t\t\tif (!this.isAssignableIdentifier(lhs)) {\n\t\t\t\t\tthrow new Error(this.errorMessage('Strict Eval Arguments'));\n\t\t\t\t}\n\t\t\t\tlet value: ExpressionNode;\n\t\t\t\tif (this.peek().isType(Token.ASSIGN)) {\n\t\t\t\t\tthis.consume(Token.ASSIGN);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tconst rhs = this.parseAssignmentExpression();\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\tvalue = this.factory.createAssignment(\n\t\t\t\t\t\tToken.ASSIGN.getName() as AssignmentOperator,\n\t\t\t\t\t\tlhs,\n\t\t\t\t\t\trhs,\n\t\t\t\t\t\tthis.createRange(propInfo.rangeStart)\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = lhs;\n\t\t\t\t}\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.kind !== PropertyKind.Assign,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase PropertyKind.Method: {\n\t\t\t\t// MethodDefinition\n\t\t\t\t// PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// '*' PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\n\t\t\t\tconst kind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\t\t\t\tconst value = this.parseFunctionLiteral(\n\t\t\t\t\tkind,\n\t\t\t\t\tFunctionSyntaxKind.AccessorOrMethod,\n\t\t\t\t\tpropInfo.name ? this.factory.createIdentifier(propInfo.name,) : undefined,\n\t\t\t\t\tpropInfo.rangeStart\n\t\t\t\t);\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase PropertyKind.AccessorGetter:\n\t\t\tcase PropertyKind.AccessorSetter: {\n\t\t\t\tconst isGet = propInfo.kind == PropertyKind.AccessorGetter;\n\t\t\t\tconst kind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\t\t\t\tconst value = this.parseFunctionLiteral(\n\t\t\t\t\tkind,\n\t\t\t\t\tFunctionSyntaxKind.AccessorOrMethod,\n\t\t\t\t\tpropInfo.name ? this.factory.createIdentifier(propInfo.name, this.createRange(propInfo.rangeStart)) : undefined,\n\t\t\t\t\tpropInfo.rangeStart\n\t\t\t\t);\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\tisGet ? 'get' : 'set',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase PropertyKind.ClassField:\n\t\t\tcase PropertyKind.NotSet:\n\t\t\t\treturn this.factory.createNull(this.createRange(propInfo.rangeStart));\n\t\t}\n\t}\n\tprotected parseProperty(propInfo: PropertyKindInfo): ExpressionNode {\n\t\tlet nextToken = this.peek();\n\t\tpropInfo.rangeStart = nextToken;\n\t\tif (this.check(Token.ASYNC)) {\n\t\t\t// async\n\t\t\tnextToken = this.peek();\n\t\t\tif (nextToken.isNotType(Token.MUL)\n\t\t\t\t&& propInfo.parsePropertyKindFromToken(nextToken.token)\n\t\t\t\t|| this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\treturn this.factory.createIdentifier('async', this.createRange(propInfo.rangeStart));\n\t\t\t}\n\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\tpropInfo.funcFlag = ParseFunctionFlag.IsAsync;\n\t\t}\n\n\t\tnextToken = this.peek();\n\t\tif (this.check(Token.MUL)) {\n\t\t\t// async*\n\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\tpropInfo.funcFlag = ParseFunctionFlag.IsGenerator;\n\t\t}\n\n\t\tnextToken = this.peek();\n\t\tif (propInfo.kind == PropertyKind.NotSet && nextToken.isType(Token.GET) || nextToken.isType(Token.SET)) {\n\t\t\tconst token = this.next();\n\t\t\tif (propInfo.parsePropertyKindFromToken(this.peek().token)) {\n\t\t\t\treturn this.factory.createIdentifier(nextToken.isType(Token.GET) ? 'get' : 'set', this.createRange(propInfo.rangeStart));\n\t\t\t}\n\t\t\tif (token.isType(Token.GET)) {\n\t\t\t\tpropInfo.kind = PropertyKind.AccessorGetter;\n\t\t\t} else if (token.isType(Token.SET)) {\n\t\t\t\tpropInfo.kind = PropertyKind.AccessorSetter;\n\t\t\t}\n\t\t\tnextToken = this.peek();\n\t\t}\n\t\tlet propertyName: ExpressionNode;\n\t\tswitch (nextToken.token) {\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\tpropInfo.isPrivate = true;\n\t\t\t\tthis.consume(Token.PRIVATE_NAME);\n\t\t\t\tif (propInfo.kind == PropertyKind.NotSet) {\n\t\t\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t\t\t}\n\t\t\t\tpropertyName = this.getIdentifier();\n\t\t\t\tpropInfo.name = (propertyName as PrivateIdentifier).getName() as string;\n\t\t\t\tif (propInfo.position == PropertyPosition.ObjectLiteral) {\n\t\t\t\t\tthrow new TypeError(this.errorMessage('UnexpectedToken PRIVATE_NAME'));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase Token.STRING:\n\t\t\tcase Token.NUMBER:\n\t\t\tcase Token.BIGINT:\n\t\t\t\t// \"12\" -> 12\n\t\t\t\t// 12.3 -> \"12.3\"\n\t\t\t\t// 12.30 -> \"12.3\"\n\t\t\t\tthis.consume(nextToken.token);\n\t\t\t\tpropertyName = nextToken.getValue();\n\t\t\t\tpropInfo.name = (propertyName as Literal<string>).getValue();\n\t\t\t\tbreak;\n\t\t\tcase Token.LBRACK:\n\t\t\t\t// [Symbol.iterator]\n\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tpropertyName = this.parseAssignmentExpression();\n\t\t\t\tthis.expect(Token.RBRACK);\n\t\t\t\tif (propInfo.kind === PropertyKind.NotSet) {\n\t\t\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t\t\t}\n\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn propertyName;\n\t\t\tcase Token.ELLIPSIS:\n\t\t\t\tif (propInfo.kind == PropertyKind.NotSet) {\n\t\t\t\t\tthis.consume(Token.ELLIPSIS);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tpropertyName = this.parsePossibleDestructuringSubPattern();\n\t\t\t\t\tpropInfo.kind = PropertyKind.Spread;\n\n\t\t\t\t\tif (!this.isValidReferenceExpression(propertyName)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage('Invalid Rest Binding/Assignment Pattern'));\n\t\t\t\t\t}\n\t\t\t\t\tif (this.peek().isNotType(Token.RBRACE)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage('Element After Rest'));\n\t\t\t\t\t}\n\t\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\treturn this.factory.createSpreadElement(propertyName, this.createRange(nextToken));\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tpropertyName = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\tbreak;\n\t\t}\n\t\tif (propInfo.kind === PropertyKind.NotSet) {\n\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t}\n\t\treturn propertyName;\n\t}\n\tprotected parseMemberExpressionContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tif (!Token.isMember(this.peek().token)) return expression;\n\t\treturn this.doParseMemberExpressionContinuation(expression);\n\t}\n\tprotected doParseMemberExpressionContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tif (!Token.isMember(this.peek().token)) {\n\t\t\tthrow new Error(this.errorMessage(`Parsing member expression`));\n\t\t}\n\t\t// Parses this part of MemberExpression:\n\t\t// ('[' Expression ']' | '.' Identifier | TemplateLiteral)*\n\t\tdo {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.LBRACK: {\n\t\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tconst index = this.parseExpressionCoverGrammar();\n\t\t\t\t\texpression = this.factory.createPropertyAssignment(expression, index, true, false, this.createRange(expression));\n\t\t\t\t\tthis.expect(Token.RBRACK);\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase Token.PERIOD: {\n\t\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\t\tconst key: ExpressionNode = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\texpression = this.factory.createPropertyAssignment(expression, key, false, false, this.createRange(expression));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase Token.TEMPLATE_SPAN:\n\t\t\t\tcase Token.TEMPLATE_TAIL: {\n\t\t\t\t\texpression = this.parseTemplateLiteral(expression);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('unknown token position'));\n\t\t\t}\n\t\t} while (Token.isMember(this.peek().token));\n\t\treturn expression;\n\t}\n\tprotected parsePropertyOrPrivatePropertyName(): ExpressionNode {\n\t\tconst next = this.next();\n\t\tif (next.isType(Token.IDENTIFIER) || next.isType(Token.PRIVATE_NAME)) {\n\t\t\treturn next.getValue();\n\t\t}\n\t\t// check keyword as identifier\n\t\tif (Token.isPropertyName(next.token) && next.isNotType(Token.EOS)) {\n\t\t\treturn this.factory.createIdentifier(next.token.getName(), next.range);\n\t\t}\n\t\tthrow new SyntaxError(this.errorMessage(`Parsing property expression: Unexpected Token`));\n\t}\n\tprotected parsePipelineExpression(expression: ExpressionNode): ExpressionNode {\n\t\t// ConditionalExpression ::\n\t\t// LogicalExpression\n\t\t// expression '|>' function [':' expression [':'? expression] ] *\n\t\t// expression '|>' function '('[expression ','?]* ')'\n\t\t//\n\t\t// expression '|>' function ':' expression [':' expression | '?']*]\n\t\t// expression '|>' function '(' expression [',' expression | '?']* ')'\n\t\t//\n\t\t// [~Await]PipelineExpression[?In, ?Yield, ?Await] |> LogicalORExpression[?In, ?Yield, ?Await]\n\t\t// [+Await]PipelineExpression[? In, ? Yield, ? Await] |> [lookahead ∉ { await }]LogicalORExpression[? In, ? Yield, ? Await]\n\n\t\tlet token: Token;\n\t\twhile (Token.isPipelineOperator(token = this.peek().token)) {\n\t\t\tthis.consume(token);\n\t\t\texpression = this.parsePipelineBody(expression);\n\t\t}\n\t\treturn expression;\n\t}\n\tprotected parsePipelineBody(lhs: ExpressionNode): ExpressionNode {\n\t\tlet body: ExpressionNode | undefined;\n\t\tlet token = this.peek();\n\t\t// parse function\n\t\tswitch (token.token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tbody = this.parseFunctionExpression();\n\t\t\t\tbreak;\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorAfterNext()) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tbody = this.parseAsyncFunctionLiteral();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tif (body) {\n\t\t\treturn this.factory.createPipelineExpression(lhs, body, undefined, this.createRange(lhs));\n\t\t}\n\t\tif (token.isType(Token.LPAREN)) {\n\t\t\t// parse arrow function\n\t\t\t// x |> ( y => y+1 )\n\t\t\tbody = this.parsePrimaryExpression();\n\t\t\treturn this.factory.createPipelineExpression(lhs, body, undefined, this.createRange(lhs));\n\t\t}\n\n\t\t// parse angular-like and f# and partial operator syntax\n\t\tconst func = this.parseMemberExpression(); //this.parseLogicalExpression();\n\t\tlet args: (ExpressionNode | '?' | '...?')[] = [];\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.COLON:\n\t\t\t\t// support angular pipeline syntax\n\t\t\t\tdo {\n\t\t\t\t\tthis.consume(Token.COLON);\n\t\t\t\t\tconst peek = this.peek();\n\t\t\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\t\t\tif (this.peek().isType(Token.CONDITIONAL)) {\n\t\t\t\t\t\tthis.consume(Token.CONDITIONAL);\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push('...?');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push('?');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst arg = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push(this.factory.createSpreadElement(arg, this.createRange(peek)));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} while (this.peek().isType(Token.COLON));\n\t\t\t\tbreak;\n\t\t\tcase Token.LPAREN:\n\t\t\t\t// es2022 syntax, F# & partial operator\n\t\t\t\tthis.consume(Token.LPAREN);\n\t\t\t\tlet indexed = false;\n\t\t\t\twhile (this.peek().isNotType(Token.RPAREN)) {\n\t\t\t\t\tconst peek = this.peek();\n\t\t\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\t\t\tif (this.peek().isType(Token.CONDITIONAL)) {\n\t\t\t\t\t\tthis.consume(Token.CONDITIONAL);\n\t\t\t\t\t\tindexed = true;\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push('...?');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push('?');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst arg = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push(this.factory.createSpreadElement(arg, this.createRange(peek)));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.check(Token.COMMA);\n\t\t\t\t}\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\t// should be indexed, has partial operator\n\t\t\t\tif (!indexed) {\n\t\t\t\t\t// z |> method(x, y) === method(x, y)(z)\n\t\t\t\t\tbody = this.factory.createCallExpression(func, args as ExpressionNode[], false, this.createRange(func));\n\t\t\t\t\treturn this.factory.createPipelineExpression(lhs, body, undefined, this.createRange(lhs));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn this.factory.createPipelineExpression(lhs, func, args, this.createRange(lhs));\n\t}\n\tprotected parseConditionalExpression(): ExpressionNode {\n\t\t// ConditionalExpression ::\n\t\t// LogicalExpression\n\t\t// LogicalExpression '?' AssignmentExpression ':' AssignmentExpression\n\t\t//\n\n\t\tlet expression: ExpressionNode = this.parseLogicalExpression();\n\t\texpression = this.parsePipelineExpression(expression);\n\t\treturn this.peek().isType(Token.CONDITIONAL) ? this.parseConditionalContinuation(expression) : expression;\n\t}\n\tprotected parseLogicalExpression(): ExpressionNode {\n\t\t// LogicalExpression ::\n\t\t// LogicalORExpression\n\t\t// CoalesceExpression\n\n\t\t// Both LogicalORExpression and CoalesceExpression start with BitwiseOR.\n\t\t// Parse for binary expressions >= 6 (BitwiseOR);\n\n\t\tlet expression: ExpressionNode = this.parseBinaryExpression(6);\n\t\tconst peek = this.peek();\n\t\tif (peek.isType(Token.AND) || peek.isType(Token.OR)) {\n\t\t\t// LogicalORExpression, pickup parsing where we left off.\n\t\t\tconst precedence = Token.precedence(peek.token, this.acceptIN);\n\t\t\texpression = this.parseBinaryContinuation(expression, 4, precedence);\n\t\t} else if (peek.isType(Token.NULLISH)) {\n\t\t\texpression = this.parseNullishExpression(expression);\n\t\t}\n\t\treturn expression;\n\t}\n\tprotected parseBinaryContinuation(x: ExpressionNode, prec: number, prec1: number): ExpressionNode {\n\t\tdo {\n\t\t\t// prec1 >= 4\n\t\t\twhile (Token.precedence(this.peek().token, this.acceptIN) === prec1) {\n\t\t\t\tlet y: ExpressionNode;\n\t\t\t\tlet op = this.next();\n\n\t\t\t\tconst isRightAssociative = op.isType(Token.EXP);\n\t\t\t\tconst nextPrecedence = isRightAssociative ? prec1 : prec1 + 1;\n\t\t\t\ty = this.parseBinaryExpression(nextPrecedence);\n\n\n\t\t\t\t// For now we distinguish between comparisons and other binary\n\t\t\t\t// operations. (We could combine the two and get rid of this\n\t\t\t\t// code and AST node eventually.)\n\n\t\t\t\tif (Token.isCompare(op.token)) {\n\t\t\t\t\t// We have a comparison.\n\t\t\t\t\tlet cmp = op.token;\n\t\t\t\t\tswitch (op.token) {\n\t\t\t\t\t\tcase Token.NE: cmp = Token.EQ; break;\n\t\t\t\t\t\tcase Token.NE_STRICT: cmp = Token.EQ_STRICT; break;\n\t\t\t\t\t\tdefault: break;\n\t\t\t\t\t}\n\t\t\t\t\tx = this.factory.createInfixExpression(cmp.getName() as AssignmentOperator | LogicalOperator | BinaryOperator, x, y, this.createRange(x));\n\t\t\t\t\tif (op.isNotType(cmp)) {\n\t\t\t\t\t\t// The comparison was negated - add a NOT.\n\t\t\t\t\t\tx = this.factory.createUnaryExpression(Token.NOT.getName() as UnaryOperator, x, this.createRange(x));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tx = this.factory.createInfixExpression(op.token.getName() as AssignmentOperator | LogicalOperator | BinaryOperator, x, y, this.createRange(x));\n\t\t\t\t}\n\t\t\t}\n\t\t\t--prec1;\n\t\t} while (prec1 >= prec);\n\n\t\treturn x;\n\t}\n\t// Precedence >= 4\n\tprotected parseBinaryExpression(precedence: number): ExpressionNode {\n\t\t// \"#foo in ShiftExpression\" needs to be parsed separately, since private\n\t\t// identifiers are not valid PrimaryExpressions.\n\t\tif (this.peek().isType(Token.PRIVATE_NAME)) {\n\t\t\tconst x = this.parsePropertyOrPrivatePropertyName();\n\t\t\tconst precedence1 = Token.precedence(this.peek().token, this.acceptIN);\n\t\t\tif (this.peek().isNotType(Token.IN) || precedence1 < precedence) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token Token.PRIVATE_NAME \"#name\"'));\n\t\t\t}\n\t\t\treturn this.parseBinaryContinuation(x, precedence, precedence1);\n\t\t}\n\t\tconst x: ExpressionNode = this.parseUnaryExpression();\n\t\tconst precedence1 = Token.precedence(this.peek().token, this.acceptIN);\n\t\tif (precedence1 >= precedence) {\n\t\t\treturn this.parseBinaryContinuation(x, precedence, precedence1);\n\t\t}\n\t\treturn x;\n\t}\n\tprotected parseUnaryExpression(): ExpressionNode {\n\t\t// UnaryExpression ::\n\t\t// PostfixExpression\n\t\t// 'delete' UnaryExpression\n\t\t// 'void' UnaryExpression\n\t\t// 'typeof' UnaryExpression\n\t\t// '++' UnaryExpression\n\t\t// '--' UnaryExpression\n\t\t// '+' UnaryExpression\n\t\t// '-' UnaryExpression\n\t\t// '~' UnaryExpression\n\t\t// '!' UnaryExpression\n\t\t// [+Await] AwaitExpression[?Yield]\n\n\t\tconst op = this.peek();\n\t\tif (Token.isUnaryOrCount(op.token)) {\n\t\t\treturn this.parseUnaryOrPrefixExpression();\n\t\t}\n\t\tif (op.isType(Token.AWAIT) && this.isAwaitAllowed()) {\n\t\t\treturn this.parseAwaitExpression();\n\t\t}\n\t\treturn this.parsePostfixExpression();\n\t}\n\tprotected parseUnaryOrPrefixExpression(): ExpressionNode {\n\t\tconst op = this.next();\n\t\tconst expression = this.parseUnaryExpression();\n\t\tif (Token.isUnary(op.token)) {\n\t\t\tif (op.isType(Token.DELETE)) {\n\t\t\t\tif (this.factory.isIdentifier(expression) && isStrict(this.languageMode)) {\n\t\t\t\t\t// \"delete identifier\" is a syntax error in strict mode.\n\t\t\t\t\tthrow new Error(this.errorMessage(`\"delete identifier\" is a syntax error in strict mode`));\n\t\t\t\t}\n\t\t\t\tif (this.factory.isMemberExpression(expression) && expression.getProperty().toString().startsWith('#')) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`\"Delete Private Field\" is a syntax error`));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.peek().isType(Token.EXP)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token Unary Exponentiation`));\n\t\t\t}\n\t\t}\n\n\t\tif (Token.isCount(op.token) || Token.isUnary(op.token)) {\n\t\t\t// Allow the parser to rewrite the expression.\n\t\t\treturn this.factory.createUnaryExpression(op.token.getName() as UpdateOperator | UnaryOperator, expression, op.range);\n\t\t}\n\t\tthrow new Error(this.errorMessage(`while rewrite unary operation`));\n\t}\n\tprotected parsePostfixExpression(): ExpressionNode {\n\t\t// PostfixExpression ::\n\t\t// LeftHandSideExpression ('++' | '--')?\n\n\t\tconst expression: ExpressionNode = this.parseLeftHandSideExpression();\n\t\tif (!Token.isCount(this.peek().token) || this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\treturn expression;\n\t\t}\n\t\treturn this.parsePostfixContinuation(expression);\n\t}\n\tprotected parsePostfixContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tif (!this.isValidReferenceExpression(expression)) {\n\t\t\tthrow new Error(this.errorMessage(`Invalid LHS In Postfix Op.`));\n\t\t}\n\t\tconst op = this.next();\n\t\treturn this.factory.createUpdateExpression(op.token.getName() as UpdateOperator, expression, false, this.createRange(expression));\n\t}\n\tprotected parseLeftHandSideExpression(): ExpressionNode {\n\t\t// LeftHandSideExpression ::\n\t\t// (NewExpression | MemberExpression) ...\n\t\tconst result = this.parseMemberExpression();\n\t\tif (!Token.isPropertyOrCall(this.peek().token)) return result;\n\t\treturn this.parseLeftHandSideContinuation(result);\n\t}\n\tprotected parseLeftHandSideContinuation(result: ExpressionNode): ExpressionNode {\n\t\tif (this.peek().isType(Token.LPAREN)\n\t\t\t&& this.factory.isIdentifier(result)\n\t\t\t&& this.scanner.currentToken().isType(Token.ASYNC)\n\t\t\t&& !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tconst args = this.parseArguments(ParsingArrowHeadFlag.AsyncArrowFunction);\n\t\t\tif (this.peek().isType(Token.ARROW)) {\n\t\t\t\t// async () => ...\n\t\t\t\tif (!args.length) return new EmptyStatement;\n\t\t\t\t// async ( Arguments ) => ...\n\t\t\t\treturn this.expressionListToExpression(args);\n\t\t\t}\n\t\t\tresult = this.factory.createCallExpression(result, args, false, this.createRange(result));\n\t\t\tif (!Token.isPropertyOrCall(this.peek().token)) return result;\n\t\t}\n\n\t\tlet optionalChaining = false;\n\t\tlet isOptional = false;\n\t\tdo {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\t// chain\n\t\t\t\tcase Token.QUESTION_PERIOD: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Failure Expression`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.QUESTION_PERIOD);\n\t\t\t\t\tisOptional = true;\n\t\t\t\t\toptionalChaining = true;\n\t\t\t\t\tif (Token.isPropertyOrCall(this.peek().token)) continue;\n\t\t\t\t\tconst key = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\tresult = this.factory.createPropertyAssignment(result, key, false, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* Property */\n\t\t\t\tcase Token.LBRACK: {\n\t\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tconst index = this.parseExpressionCoverGrammar();\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\tresult = this.factory.createPropertyAssignment(result, index, true, isOptional, this.createRange(result));\n\t\t\t\t\tthis.expect(Token.RBRACK);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* Property */\n\t\t\t\tcase Token.PERIOD: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token:${this.position()}`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\t\tconst key = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\tresult = this.factory.createPropertyAssignment(result, key, false, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* Call */\n\t\t\t\tcase Token.LPAREN: {\n\t\t\t\t\tconst args = this.parseArguments();\n\t\t\t\t\tresult = this.factory.createCallExpression(result, args, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* bind call */\n\t\t\t\tcase Token.BIND: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token:${this.position()}`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.BIND);\n\t\t\t\t\tconst key = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\tresult = this.factory.createBindExpression(result, key, false, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* chain bind call */\n\t\t\t\tcase Token.QUESTION_BIND: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Failure Expression`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.QUESTION_BIND);\n\t\t\t\t\tisOptional = true;\n\t\t\t\t\toptionalChaining = true;\n\t\t\t\t\tconst key = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\tresult = this.factory.createBindExpression(result, key, true, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\t// Template literals in/after an Optional Chain not supported:\n\t\t\t\t\tif (optionalChaining) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Optional Chaining No Template support`));\n\t\t\t\t\t}\n\t\t\t\t\t/* Tagged Template */\n\t\t\t\t\tresult = this.parseTemplateLiteral(result);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (isOptional) {\n\t\t\t\tisOptional = false;\n\t\t\t}\n\t\t} while (Token.isPropertyOrCall(this.peek().token));\n\t\tif (optionalChaining) {\n\t\t\tresult = this.factory.createChainExpression(result, this.createRange(result));\n\t\t}\n\t\treturn result;\n\t}\n\tprotected parseAwaitExpression(): ExpressionNode {\n\t\tconst start = this.consume(Token.AWAIT);\n\t\tconst value = this.parseUnaryExpression();\n\t\tif (this.peek().isType(Token.EXP)) {\n\t\t\tthrow new Error(this.scanner.createError(`Unexpected Token Unary Exponentiation`));\n\t\t}\n\t\treturn this.factory.createAwaitExpression(value, this.createRange(start));\n\t}\n\tprotected parseNullishExpression(expression: ExpressionNode): ExpressionNode {\n\t\t// CoalesceExpression ::\n\t\t// CoalesceExpressionHead ?? BitwiseORExpression\n\t\t//\n\t\t// CoalesceExpressionHead ::\n\t\t// CoalesceExpression\n\t\t// BitwiseORExpression\n\n\t\t// We create a binary operation for the first nullish, otherwise collapse\n\t\t// into an nary expression.\n\n\t\tconst list: ExpressionNode[] = [];\n\t\tlist.push(expression);\n\t\twhile (this.peek().isType(Token.NULLISH)) {\n\t\t\tthis.consume(Token.NULLISH);\n\t\t\t// Parse BitwiseOR or higher.\n\t\t\texpression = this.parseBinaryExpression(6);\n\t\t\tlist.push(expression);\n\t\t}\n\t\texpression = list.pop()!;\n\t\texpression = list.reverse()\n\t\t\t.reduce((previous, current) => this.factory.createLogicalExpression(Token.NULLISH.getName() as LogicalOperator, current, previous), expression);\n\t\treturn expression;\n\t}\n\tprotected parseConditionalContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tthis.consume(Token.CONDITIONAL);\n\t\tthis.setAcceptIN(true);\n\t\tconst left: ExpressionNode = this.parseAssignmentExpression();\n\t\tthis.restoreAcceptIN();\n\t\tthis.expect(Token.COLON);\n\t\tconst right = this.parseAssignmentExpression();\n\t\treturn this.factory.createConditionalExpression(expression, left, right);\n\t}\n\tprotected parseYieldExpression(): ExpressionNode {\n\t\t// YieldExpression ::\n\t\t// 'yield' ([no line terminator] '*'? AssignmentExpression)?\n\t\tthis.consume(Token.YIELD);\n\t\tlet delegating = false; // yield*\n\t\tlet expression: ExpressionNode | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tif (this.check(Token.MUL)) {\n\t\t\t\tdelegating = true;\n\t\t\t}\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.EOS:\n\t\t\t\tcase Token.SEMICOLON:\n\t\t\t\tcase Token.RBRACE:\n\t\t\t\tcase Token.RBRACK:\n\t\t\t\tcase Token.RPAREN:\n\t\t\t\tcase Token.COLON:\n\t\t\t\tcase Token.COMMA:\n\t\t\t\tcase Token.IN:\n\t\t\t\t\t// The above set of tokens is the complete set of tokens that can appear\n\t\t\t\t\t// after an AssignmentExpression, and none of them can start an\n\t\t\t\t\t// AssignmentExpression. This allows us to avoid looking for an RHS for\n\t\t\t\t\t// a regular yield, given only one look-ahead token.\n\t\t\t\t\tif (!delegating) break;\n\t\t\t\t\t// Delegating yields require an RHS; fall through.\n\t\t\t\t\t// V8_FALLTHROUGH;\n\t\t\t\t\tthrow new Error(this.errorMessage(`Delegating yields require an RHS`));\n\t\t\t\tdefault:\n\t\t\t\t\texpression = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn this.factory.createYieldExpression(delegating, expression);\n\t}\n\tprotected parseNewTargetExpression(start?: PositionMark): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (new.target) not supported.'));\n\t}\n\tprotected parseClassExpression(): ClassExpression {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseClassDeclaration(names: string[] | undefined, defaultExport: boolean, start: PositionMark): ClassDeclaration {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseClassLiteral(name: ExpressionNode | undefined, isStrictReserved: boolean): ExpressionNode {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseSuperExpression(): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (supper) not supported.'));\n\t}\n\tprotected parseImportExpressions(): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (import) not supported.'));\n\t}\n\tprotected parseWithStatement(): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (with) not supported.'));\n\t}\n}\n"]}
1
+ {"version":3,"file":"inline.js","sourceRoot":"","sources":["../../../src/expressions/v8/inline.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAMnE,OAAO,EACN,8BAA8B,EAC9B,gBAAgB,EAAgB,YAAY,EAC5C,mBAAmB,EAAE,kBAAkB,EACvC,eAAe,EAAE,wBAAwB,EACzC,6BAA6B,EAAE,iCAAiC,EAChE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,iBAAiB,EACrE,oBAAoB,EAAE,YAAY,EAAE,gBAAgB,EACpD,gBAAgB,EAAE,eAAe,EAAE,0BAA0B,EAC7D,MAAM,YAAY,CAAC;AACpB,OAAO,EAAyB,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAC;AAKpD,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAgBjE,MAAM,OAAgB,cAAc;IAOnC,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,YAAY,CAAC,IAAkB;QAClC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,YAAsB,OAAoB,EAAY,OAAoB,EAAE,QAAkB;QAAxE,YAAO,GAAP,OAAO,CAAa;QAAY,YAAO,GAAP,OAAO,CAAa;QAZhE,qBAAgB,GAAc,EAAE,CAAC;QAGjC,yBAAoB,GAAmB,EAAE,CAAC;QAUnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;IACjF,CAAC;IAES,QAAQ;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IACS,WAAW,CAAC,QAAiB;QACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IACS,eAAe;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;IACtD,CAAC;IACS,mBAAmB;QAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,cAAc,CAAC;IACxE,CAAC;IACS,eAAe,CAAC,YAA0B;QACnD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,CAAC;IACS,mBAAmB;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,YAAY,CAAC,cAAc,CAAC;IACpF,CAAC;IACS,SAAS,CAAC,QAAiB,EAAE,YAA0B;QAChE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IACS,aAAa;QACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;IACxB,CAAC;IACS,OAAO;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IACS,IAAI;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IACS,IAAI;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IACS,SAAS;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IACS,iBAAiB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IACzC,CAAC;IACS,YAAY;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAIS,WAAW,CAAC,KAAoB;QACzC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;YACpC,OAAO;SACP;QACD,OAAO,CAAC,KAAM,CAAC,KAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IACS,kBAAkB,CAAC,KAA6B;QACzD,OAAO,CAAC,KAAM,CAAC,KAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IACS,mBAAmB;QAC5B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACS,cAAc,CAAC,KAAY;QACpC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IACS,OAAO,CAAC,KAAY;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;SACvE;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACS,KAAK,CAAC,KAAY;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;SACZ;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACS,gBAAgB,CAAC,KAAY;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,KAAK,CAAC;SAClB;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IACS,UAAU,CAAC,KAAqB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;SACZ;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACS,MAAM,CAAC,KAAY;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;SACxH;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IACS,iBAAiB,CAAC,KAAY;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;SACxH;QACD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IACS,WAAW;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,MAAM,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACpB;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACS,UAAU;QACnB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC;SACZ;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClF,OAAO,IAAI,CAAC;SACZ;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACS,WAAW,CAAC,IAAoB;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,WAAW,CAAC;IAC1E,CAAC;IACS,MAAM,CAAC,IAAoB;QAEpC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC;IACrE,CAAC;IACS,iBAAiB,CAAC,IAAoB;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,WAAW,CAAC,CAAC;IACzG,CAAC;IACS,gBAAgB;QACzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACrC,OAAO,KAAK,CAAC;SACb;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;QAC7C,QAAQ,aAAa,EAAE;YACtB,KAAK,KAAK,CAAC,MAAM,CAAC;YAClB,KAAK,KAAK,CAAC,MAAM,CAAC;YAClB,KAAK,KAAK,CAAC,UAAU,CAAC;YACtB,KAAK,KAAK,CAAC,MAAM,CAAC;YAClB,KAAK,KAAK,CAAC,GAAG,CAAC,CAAE,wDAAwD;YACzE,wDAAwD;YACxD,yDAAyD;YACzD,kDAAkD;YAClD,UAAU;YACV,KAAK,KAAK,CAAC,KAAK,CAAC;YACjB,KAAK,KAAK,CAAC,KAAK,CAAC;YACjB,KAAK,KAAK,CAAC,GAAG,CAAC;YACf,KAAK,KAAK,CAAC,GAAG,CAAC;YACf,KAAK,KAAK,CAAC,KAAK;gBACf,OAAO,IAAI,CAAC;YACb;gBACC,OAAO,KAAK,CAAC;SACd;IACF,CAAC;IACS,iBAAiB,CAAC,UAA0B;QACrD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IACS,kBAAkB,CAAC,UAA0B;QACtD,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IACrD,CAAC;IACS,eAAe,CAAC,UAA0B;QACnD,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,KAAK,IAAI,CAAC;IAC1D,CAAC;IACS,sBAAsB,CAAC,UAA0B;QAC1D,+CAA+C;QAC/C,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE;YAC7C,OAAO,KAAK,CAAC;SACb;QACD,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;YACtE,OAAO,KAAK,CAAC;SACb;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACS,0BAA0B,CAAC,UAA0B;QAC9D,OAAO,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACzG,CAAC;IACS,eAAe;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO;SACP;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACnF,OAAO;SACP;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC3F,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qCAAqC,CAAC,CAAC,CAAC;SAC1E;IACF,CAAC;IACS,iBAAiB;QAC1B,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IACS,uBAAuB,CAAC,OAAe;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YACpG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,sCAAsC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;SACpG;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACS,sBAAsB,CAAC,OAAe;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;YAChG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;SACZ;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACS,qBAAqB,CAAC,OAAe;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpG,CAAC;IACS,aAAa,CAAC,QAAiB,EAAE,IAAuB;QACjE,OAAO,mBAAmB,CACzB,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,EACzE,IAAI,CACJ,CAAC;IACH,CAAC;IACS,WAAW;QACpB,OAAO,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IACS,eAAe;QACxB,OAAO,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IACS,iBAAiB;QAC1B,OAAO,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IACS,kBAAkB;QAC3B,OAAO,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IACS,YAAY;QACrB,OAAO,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IACS,cAAc;QACvB,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC;IACS,6BAA6B;QACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;YACjC,6BAA6B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IACS,kBAAkB;QAC3B,OAAO,iCAAiC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7D,CAAC;IACS,YAAY,CAAC,OAAe;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAES,kBAAkB,CAAC,OAAe;QAC3C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;CACD;AAED,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACzD,MAAM,CAAC,KAAK,CAAC,MAAgD,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,KAA0B,EAAE;QAChI,IAAI,KAAJ,IAAI,GAAK,YAAY,CAAC,MAAM,EAAC;QAC7B,MAAM,MAAM,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC;YAC1C,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;YAC1C,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvE,QAAQ,KAAR,QAAQ,GAAK,KAAK,EAAC;QACnB,IAAI,OAAO,IAAI,SAAS,EAAE;YACzB,MAAM,qBAAqB,GAAG,WAAW,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/H,OAAO,GAAG,IAAI,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;SAC3D;QACD,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IACD,YAAY,OAAoB,EAAE,OAAoB,EAAE,QAAkB;QACzE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,IAAI;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,GAAqB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;SACf;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACO,cAAc,CACvB,gBAAgD,8BAA8B,CAAC,iCAAiC;QAEhH,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;YAC1B,KAAK,KAAK,CAAC,MAAM;gBAChB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1B,KAAK,KAAK,CAAC,SAAS;gBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC3D,KAAK,KAAK,CAAC,EAAE;gBACZ,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAChC,KAAK,KAAK,CAAC,EAAE;gBACZ,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACrC,KAAK,KAAK,CAAC,KAAK;gBACf,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACnC,KAAK,KAAK,CAAC,GAAG;gBACb,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBAClE,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;iBACrC;gBACD,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACjC,KAAK,KAAK,CAAC,QAAQ;gBAClB,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACtC,KAAK,KAAK,CAAC,KAAK;gBACf,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACnC,KAAK,KAAK,CAAC,MAAM;gBAChB,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACpC,KAAK,KAAK,CAAC,KAAK;gBACf,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACnC,KAAK,KAAK,CAAC,GAAG;gBACb,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACjC,KAAK,KAAK,CAAC,MAAM;gBAChB,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACpC,KAAK,KAAK,CAAC,IAAI;gBACd,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAClC,KAAK,KAAK,CAAC,QAAQ;gBAClB,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,iGAAiG,CAAC,CAAC,CAAC;YAC7I,KAAK,KAAK,CAAC,QAAQ;gBAClB,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACtC,KAAK,KAAK,CAAC,GAAG;gBACb,OAAO,IAAI,CAAC,yBAAyB,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;YAC7E,KAAK,KAAK,CAAC,KAAK;gBACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;oBAC1F,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,6CAA6C,CAAC,CAAC,CAAC;iBACxF;YACF;gBACC,OAAO,IAAI,CAAC,kCAAkC,CAAC,aAAa,CAAC,CAAC;SAC/D;IACF,CAAC;IACS,sBAAsB;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IACS,iBAAiB;QAC1B,kBAAkB;QAClB,sBAAsB;QACtB,wBAAwB;QACxB,8BAA8B;QAC9B,EAAE;QACF,WAAW;QACX,qCAAqC;QACrC,EAAE;QACF,aAAa;QACb,oBAAoB;QAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,KAAkB,CAAC;QACvB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACjE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,0DAA0D,CAAC,CAAC,CAAC;SAC/F;QACD,IAAI,UAAsC,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC5B,IAAI,UAAsC,CAAC;YAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,UAAU,EAAE;gBACf,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;oBAC7B,UAAU,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;iBACjD;qBAAM;oBACN,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;iBAC5C;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aAC1B;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YACvF,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SACnC;QACD,IAAI,YAAwC,CAAC;QAC7C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YAC9B,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SACnC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;IACS,4BAA4B;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;YAClE,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC;SACnE;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACS,UAAU;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE;gBACV,OAAO,KAAK,CAAC;aACb;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC/C,SAAS;aACT;YACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACd,CAAC;IACD;;;;;;;;;;;;;;;;;OAiBG;IACO,sBAAsB;QAC/B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;YAC1B,KAAK,KAAK,CAAC,QAAQ;gBAClB,OAAO,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACtE,KAAK,KAAK,CAAC,KAAK;gBACf,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC7C,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YACjE,KAAK,KAAK,CAAC,GAAG,CAAC;YACf,KAAK,KAAK,CAAC,KAAK;gBACf,OAAO,IAAI,CAAC,yBAAyB,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;YACrF,KAAK,KAAK,CAAC,GAAG;gBACb,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;oBAC5B,OAAO,IAAI,CAAC,yBAAyB,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;iBACpF;gBACD,MAAM;YACP,KAAK,KAAK,CAAC,KAAK;gBACf,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE;oBAC1F,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACxC,OAAO,IAAI,CAAC,6BAA6B,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;iBACnE;gBACD,MAAM;YACP;gBACC,MAAM;SACP;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,8BAA8B,CAAC,8BAA8B,CAAC,CAAC;IAC3F,CAAC;IACS,uBAAuB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC;QAC1G,IAAI,IAA4B,CAAC;QACjC,IAAI,kBAAkB,GAAG,kBAAkB,CAAC,mBAAmB,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACjC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACxD,kBAAkB,GAAG,kBAAkB,CAAC,eAAe,CAAC;SACxD;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACjF,CAAC;IACS,6BAA6B,CAAC,KAA2B,EAAE,aAAsB,EAAE,KAAmB;QAC/G,8BAA8B;QAC9B,qEAAqE;QACrE,0DAA0D;QAC1D,IAAI,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE;YAC/C,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,6DAA6D,CAAC,CAAC,CAAC;SACxG;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,CAAwB,CAAC;IAEzH,CAAC;IACS,gBAAgB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,IAAI,KAAkB,CAAC;QACvB,IAAI,aAAyC,CAAC;QAC9C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC5C;QACD,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IACvF,CAAC;IACS,oBAAoB;QAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACzE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;SAC7B;aAAM;YACN,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACvC;IACF,CAAC;IACS,qBAAqB;QAC9B,iBAAiB;QACjB,kDAAkD;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,CAAC;IACS,mBAAmB;QAC5B,oBAAoB;QACpB,yCAAyC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACpF,CAAC;IACS,mBAAmB;QAC5B,oBAAoB;QACpB,2BAA2B;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;SAClE;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IACS,oBAAoB;QAC7B,qBAAqB;QACrB,oDAAoD;QACpD,gBAAgB;QAChB,wCAAwC;QACxC,gCAAgC;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE1B,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAE9E,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC3C,MAAM,UAAU,GAAqB,EAAE,CAAC;YACxC,IAAI,IAAoB,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC3B,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;aAC9B;iBAAM;gBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3B,IAAI,WAAW,EAAE;oBAChB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC,CAAC;iBAClE;gBACD,WAAW,GAAG,IAAI,CAAC;aACnB;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;mBACpC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;mBACpC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBACxC,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAChD,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;oBAC3D,SAAS;iBACT;gBACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC3B;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,WAAW;gBACzB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACnB;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,eAAe,CAAC;IACxB,CAAC;IACS,iBAAiB;QAE1B,6BAA6B;QAC7B,yCAAyC;QACzC,qBAAqB;QACrB,0CAA0C;QAC1C,EAAE;QACF,8EAA8E;QAC9E,wEAAwE;QACxE,mEAAmE;QAEnE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE;YAE7E,iDAAiD;YACjD,iCAAiC;YAEjC,gEAAgE;YAChE,oEAAoE;YACpE,qBAAqB;YACrB,yFAAyF;YACzF,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;YAE5F,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,OAAO,EAAE;gBACZ,OAAO,IAAI,CAAC,qCAAqC,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;aAC/E;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAE7B,0EAA0E;YAC1E,2EAA2E;YAC3E,sCAAsC;YACtC,OAAO,IAAI,CAAC,2CAA2C,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;SAC5E;QAED,IAAI,WAA2B,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC3B,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;YACtF,8FAA8F;YAC9F,2EAA2E;YAC3E,uDAAuD;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,OAAO,EAAE;gBACZ,OAAO,IAAI,CAAC,qCAAqC,CAAC,WAAsC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;aAC1G;YACD,wEAAwE;SACxE;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAClD,iDAAiD;YACjD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxB,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACjD,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,kDAAkD;YAClD,sCAAsC;YACtC,qEAAqE;YACrE,4DAA4D;YAC5D,8CAA8C;YAC9C,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,OAAO,EAAE;gBACZ,IAAI,OAAO,KAAK,IAAI,IAAI,eAAe,IAAI,mBAAmB,EAAE;oBAC/D,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;iBAC1F;gBACD,OAAO,IAAI,CAAC,wCAAwC,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;aAClF;SACD;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAY,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IACS,2CAA2C,CAAC,WAAoC,EAAE,KAAmB;QAC9G,sEAAsE;QACtE,kBAAkB;QAClB,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IACS,qCAAqC,CAAC,WAAoC,EAAE,OAAoB,EAAE,KAAmB;QAC9H,0CAA0C;QAC1C,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE;YAC9C,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC,CAAC;SAC1E;QACD,OAAO,IAAI,CAAC,wCAAwC,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;IACS,wCAAwC,CAAC,WAA2B,EAAE,OAAoB,EAAE,KAAmB;QACxH,IAAI,UAA0B,CAAC;QAC/B,IAAI,OAAO,IAAI,IAAI,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,UAAU,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;SACvB;aAAM;YACN,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SACpC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO,KAAK,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,WAA6B,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;SACjG;aAAM,IAAI,OAAO,KAAK,IAAI,EAAE;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,WAA6B,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;SACjG;QACD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IACS,oBAAoB,CAAC,WAA2B,EAAE,KAAmB;QAC9E,wBAAwB;QACxB,iEAAiE;QACjE,kFAAkF;QAElF,IAAI,IAAI,GAAmB,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAC3C,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SAC9B;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE7B,IAAI,IAAI,GAAmB,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACxC,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SAC9B;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAChG,CAAC;IACS,sBAAsB;QAC/B,2DAA2D;QAE3D,gEAAgE;QAChE,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC3B,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC;SACnE;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,qDAAqD;QACrD,IAAI,YAA4B,CAAC;QAEjC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;eAClD,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE;YAC/C,wCAAwC;YACxC,iEAAiE;YACjE,gBAAgB;YAChB,mEAAmE;YACnE,gBAAgB;YAChB,eAAe,GAAG,IAAI,CAAC;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;YAC5F,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC9C,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,8CAA8C,CAAC,CAAC,CAAC;aACzF;YACD,YAAY,GAAG,WAAW,CAAC;SAC3B;aAAM;YACN,iDAAiD;YACjD,yEAAyE;YACzE,gBAAgB;YAChB,IAAI,aAAa,EAAE;gBAClB,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,2EAA2E,CAAC,CAAC,CAAC;aACtH;YACD,YAAY,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;SAClD;QAED,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAClD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,YAA8B,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACtG,CAAC;IACS,yBAAyB,CAAC,UAAsC;QACzE,0BAA0B;QAC1B,6EAA6E;QAC7E,yCAAyC;QAEzC,IAAI,IAA6B,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,QAAQ,KAAK,EAAE;YACd,KAAK,KAAK,CAAC,KAAK;gBACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,GAAG,OAAO,CAAC;gBACf,MAAM;YACP,KAAK,KAAK,CAAC,GAAG;gBACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,GAAG,KAAK,CAAC;gBACb,MAAM;YACP,KAAK,KAAK,CAAC,GAAG,CAAC;YACf;gBACC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,GAAG,KAAK,CAAC;gBACb,MAAM;SACP;QACD,MAAM,SAAS,GAAyB,EAAE,CAAC;QAC3C,GAAG;YAEF,IAAI,IAAoB,CAAC;YACzB,IAAI,KAAiC,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzC,2EAA2E;YAC3E,uEAAuE;YACvE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;gBAC7C,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpD,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;oBAChE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC;iBAC5D;gBACD,2BAA2B;gBAC3B,8EAA8E;gBAC9E,qEAAqE;gBACrE,IAAI;aACJ;iBAAM;gBACN,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;aACtC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC7B,IAAI,CAAC,WAAW,CAAC,UAAU,KAAK,0BAA0B,CAAC,YAAY,CAAC,CAAA;gBACxE,KAAK,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACzC,IAAI,CAAC,eAAe,EAAE,CAAC;aACvB;iBAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;gBAC9B,yDAAyD;gBACzD,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE;oBACpE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC,CAAC;iBACtE;gBACD,qBAAqB;aACrB;YACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAA6B,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;SACpG,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IACS,mBAAmB,CAAC,SAAkB;QAC/C,aAAa;QACb,eAAe;QACf,iBAAiB;QACjB,kBAAkB;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAChC,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBAChE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC;aAC5D;YACD,OAAO,IAAI,CAAC;SACZ;QACD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YAC1B,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;SACzC;aAAM,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;SAC1C;QACD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IACS,0BAA0B,CAAC,IAAqB;QACzD,qEAAqE;QACrE,IAAI,KAAK,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAc,CAAC;YACzC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBACxD,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,sDAAsD,CAAC,CAAC,CAAC;aACjG;YACD,OAAO,IAAI,CAAC;SACZ;QAED,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,6BAA6B,EAAE,CAAC,EAAE;YACtH,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;SAC/D;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,QAAQ,EAAc,CAAC;SACnC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAc,CAAC;IACpC,CAAC;IACS,sBAAsB;QAC/B,uBAAuB;QACvB,mBAAmB;QACnB,+BAA+B;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,KAA6B,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE;YAC9C,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;YAC3C,mEAAmE;YACnE,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SAC/B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE3D,CAAC;IACS,mBAAmB;QAC5B,oBAAoB;QACpB,gBAAgB;QAChB,+BAA+B;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,KAA6B,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE;YAC9C,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;YAC3C,mEAAmE;YACnE,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SAC/B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IACS,oBAAoB;QAC7B,qBAAqB;QACrB,kDAAkD;QAElD,8DAA8D;QAC9D,4DAA4D;QAC5D,0BAA0B;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,WAAuC,CAAC;QAC5C,yDAAyD;QACzD,IAAI,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACxF,mFAAmF;YACnF,sDAAsD;YACtD,2BAA2B;YAC3B,IAAI;SACJ;aAAM;YACN,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SACrC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IACS,kCAAkC,CAAC,aAA6C;QACzF,6CAA6C;QAC7C,mBAAmB;QACnB,6BAA6B;QAC7B,EAAE;QACF,+BAA+B;QAC/B,2EAA2E;QAE3E,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;YAC1B,KAAK,KAAK,CAAC,QAAQ,CAAC;YACpB,KAAK,KAAK,CAAC,MAAM;gBAChB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACzD,KAAK,KAAK,CAAC,KAAK;gBACf,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7F,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClC,qEAAqE;gBACrE,6CAA6C;gBAC7C,wEAAwE;gBACxE,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;oBACnC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBAC9E,MAAM;iBACN;gBACD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,kCAAkC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;aACxF;YACD;gBACC,MAAM;SACP;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzC,MAAM,oBAAoB,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,UAAU,GAAmB,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACtE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,oBAAoB,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;YACrG,+DAA+D;YAC/D,uEAAuE;YAEvE,yEAAyE;YACzE,+DAA+D;YAC/D,cAAc;YAEd,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,uEAAuE;YACvE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;mBAClC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;mBAC3B,aAAa,IAAI,8BAA8B,CAAC,8BAA8B,EAAE;gBACnF,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;aACtE;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAClD,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;SACtE;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,sDAAsD;QACtD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACnB,CAAC;IACS,eAAe;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAClD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IACf,CAAC;IACS,wBAAwB;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,6CAA6C,CAAC,CAAC,CAAC;SAClF;QACD,OAAO,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAwB,CAAC;IACtH,CAAC;IAES,yBAAyB;QAClC,0BAA0B;QAC1B,wEAAwE;QACxE,8BAA8B;QAC9B,EAAE;QACF,qEAAqE;QACrE,0DAA0D;QAC1D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC1C,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;SAC1D;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,IAA4B,CAAC;QACjC,IAAI,UAAU,GAAG,kBAAkB,CAAC,mBAAmB,CAAC;QACxD,IAAI,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC1B,KAAK,GAAG,YAAY,CAAC,sBAAsB,CAAC;SAC5C;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC7B,UAAU,GAAG,kBAAkB,CAAC,eAAe,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;SACxD;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;IACS,yBAAyB,CAAC,KAA2B,EAAE,aAAsB,EAAE,KAAmB;QAC3G,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,YAAY,CAAC,cAAc,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC1B,KAAK,GAAG,YAAY,CAAC,iBAAiB,CAAC;SACvC;QACD,OAAO,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;IAES,2BAA2B,CAAC,IAAkB,EAAE,KAA2B,EAAE,aAAsB,EAAE,KAAmB;QACjI,yBAAyB;QACzB,wEAAwE;QACxE,6DAA6D;QAC7D,0BAA0B;QAC1B,4EAA4E;QAC5E,iEAAiE;QACjE,EAAE;QACF,gEAAgE;QAChE,EAAE;QACF,oEAAoE;QAEpE,oEAAoE;QAEpE,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACrE,kBAAkB;YAClB,IAAI,IAAI,iBAAiB,CAAC,WAAW,CAAC;SACtC;QAED,IAAI,IAA4B,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,aAAa,EAAE;gBAClB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;aACzE;iBAAM;gBACN,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC;aAClE;SACD;aAAM;YACN,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;SACxD;QACD,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACrF,CAAC;IACS,eAAe,CAAC,IAAmB;QAC5C,IAAI,KAAJ,IAAI,GAAK,IAAI,CAAC,YAAY,EAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,6BAA6B,CAAC,IAAI,CAAC,CAAC,EAAE;YAC5H,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;SAC3E;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC,QAAQ,EAAc,CAAC;SACnC;QACD,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IACS,aAAa;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,QAAQ,OAAO,CAAC,KAAK,EAAE;YACtB,KAAK,KAAK,CAAC,KAAK;gBACf,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9D,KAAK,KAAK,CAAC,KAAK;gBACf,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9D,KAAK,KAAK,CAAC,UAAU,CAAC;YACtB,KAAK,KAAK,CAAC,YAAY;gBACtB,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC3B;gBACC,MAAM;SACP;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,IAAI,IAAI,aAAa,EAAE;YAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;SACnE;QACD,IAAI,IAAI,IAAI,MAAM,EAAE;YACnB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;SAC5D;QACD,IAAI,IAAI,IAAI,MAAM,EAAE;YACnB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;SAC5D;aACI,IAAI,IAAI,IAAI,WAAW,EAAE;YAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;SACjE;QACD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IACS,oBAAoB,CAAC,IAAkB,EAAE,kBAAsC,EAAE,IAA4B,EAAE,KAAmB;QAC3I,cAAc;QACd,sDAAsD;QAEtD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,YAAY,GAAiB,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACtF,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,IAAI,EAAE;YACT,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SACrI;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/H,CAAC;IASS,iBAAiB,CAC1B,IAAkB,EAClB,QAA0B,EAC1B,kBAAsC;QACtC,uEAAuE;QACvE,yDAAyD;QAEzD,IAAI,SAA4C,CAAC;QACjD,IAAI,QAAQ,IAAI,gBAAgB,CAAC,UAAU,EAAE;YAC5C,SAAS,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;SAC7C;aAAM;YACN,sBAAsB;YACtB,mDAAmD;YACnD,sEAAsE;YACtE,uCAAuC;YACvC,MAAM,aAAa,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;YAElG,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE;gBACnC,SAAS,GAAG,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,CAAC;aACjE;iBAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;gBACrC,SAAS,GAAG,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,CAAC;aAC5D;iBAAM,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;gBACjC,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;aAC1C;iBAAM;gBACN,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;aACnD;YACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;SAC3B;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IACS,yCAAyC,CAAC,IAAkB;QACrE,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IACS,oCAAoC,CAAC,IAAkB;QAChE,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IACS,sBAAsB;QAC/B,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IACS,kBAAkB,CAAC,QAAe;QAC3C,mBAAmB;QACnB,qCAAqC;QACrC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,YAAY,KAAM,KAAyB,CAAC,QAAQ,EAAE,CAAC,EAAE;YACzH,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;SACxC;QACD,MAAM,IAAI,GAAqB,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE;gBACV,MAAM;aACN;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBACxC,SAAS;aACT;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACS,wBAAwB,CAAC,YAA0B;QAC5D,4BAA4B;QAC5B,YAAY;QACZ,kCAAkC;QAClC,gCAAgC;QAChC,kCAAkC;QAClC,gEAAgE;QAChE,EAAE;QACF,+BAA+B;QAC/B,4BAA4B;QAC5B,0DAA0D;QAE1D,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACxC,OAAO,IAAI,EAAE;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;gBACtD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvB,IAAI,YAAY,CAAC,IAAI,EAAE;oBACtB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBACpC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC;qBACvD;oBACD,MAAM;iBACN;gBACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;oBAAE,MAAM;gBACpC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBACrC,2BAA2B;oBAC3B,MAAM;iBACN;aACD;SACD;QACD,OAAO,UAAU,CAAC;IACnB,CAAC;IACS,oBAAoB,CAAC,YAA0B;QACxD,8CAA8C;QAC9C,gDAAgD;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,WAAkC,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC7B,IAAI,YAAY,CAAC,IAAI,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAC;aAC/D;YACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAgC,CAAC,CAAC;YACnE,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SACvE;aAAM;YACN,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAgC,CAAC,CAAC;YACpE,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SAC3H;QACD,OAAO,WAAW,CAAC;IACpB,CAAC;IACS,2BAA2B;QACpC,gBAAgB;QAChB,yBAAyB;QACzB,wCAAwC;QAExC,MAAM,IAAI,GAAqB,EAAE,CAAC;QAClC,IAAI,UAA0B,CAAC;QAC/B,OAAO,IAAI,EAAE;YACZ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBACvC,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;aAC/C;YACD,UAAU,GAAG,IAAI,CAAC,qCAAqC,EAAE,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,MAAM;YAEpC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC7E,oEAAoE;gBACpE,MAAM;aACN;SACD;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,UAAU,CAAC;QACxC,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IACS,4BAA4B,CAAC,IAAsB;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAmB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC,CAAC;SACxF;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,yEAAyE,CAAC,CAAC,CAAC;SAC9G;QACD,yEAAyE;QACzE,wEAAwE;QACxE,oBAAoB;QACpB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACnF,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,6BAA6B,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;SACnF;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IACS,0BAA0B,CAAC,IAAsB;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;SAAE;QACxC,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;YAC7C,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC;SACb;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IACS,qBAAqB;QAC9B,sBAAsB;QACtB,yDAAyD;QACzD,2EAA2E;QAC3E,EAAE;QACF,oBAAoB;QACpB,6BAA6B;QAC7B,2EAA2E;QAC3E,EAAE;QACF,gEAAgE;QAChE,4EAA4E;QAC5E,+BAA+B;QAE/B,oDAAoD;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IACS,sBAAsB;QAC/B,uBAAuB;QACvB,WAAW;QACX,WAAW;QACX,WAAW;QACX,YAAY;QACZ,eAAe;QACf,WAAW;QACX,WAAW;QACX,iBAAiB;QACjB,kBAAkB;QAClB,kBAAkB;QAClB,uBAAuB;QACvB,aAAa;QACb,yBAAyB;QAEzB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE;gBAC7E,qBAAqB;gBACrB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACvC,OAAO,IAAI,CAAC,yBAAyB,EAAE,CAAC;iBACxC;gBAAA,CAAC;gBACF,0BAA0B;gBAC1B,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACrF,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBACpB,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC;iBAClC;aACD;YACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxF,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAiC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/G,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC;aACb;YACD,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;SAC9C;QAED,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;SAC9B;QAED,QAAQ,KAAK,CAAC,KAAK,EAAE;YACpB,KAAK,KAAK,CAAC,GAAG;gBACb,OAAO,IAAI,CAAC,2CAA2C,EAAE,CAAC;YAC3D,KAAK,KAAK,CAAC,IAAI;gBACd,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7C,KAAK,KAAK,CAAC,GAAG,CAAC;YACf,KAAK,KAAK,CAAC,UAAU;gBACpB,6BAA6B;gBAC7B,sCAAsC;gBACtC,uBAAuB;gBACvB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAClC,KAAK,KAAK,CAAC,QAAQ;gBAClB,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACvC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;aACnC;YACD,KAAK,KAAK,CAAC,MAAM;gBAChB,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAEtC,KAAK,KAAK,CAAC,MAAM;gBAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAEtC,KAAK,KAAK,CAAC,MAAM;gBAChB,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAEvC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBAC7B,sDAAsD;oBACtD,yCAAyC;oBAEzC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBACrC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;qBAClF;oBACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;oBACnF,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;oBAC/B,OAAO,MAAM,CAAC;iBACd;gBACD,kEAAkE;gBAClE,+BAA+B;gBAE/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvB,MAAM,UAAU,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACtD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO,UAAU,CAAC;aAClB;YACD,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;aACnC;YACD,KAAK,KAAK,CAAC,aAAa,CAAC;YACzB,KAAK,KAAK,CAAC,aAAa;gBACvB,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACpC;gBACC,MAAM;SACP;QACD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IACS,oBAAoB,CAAC,GAAoB;QAClD,0EAA0E;QAC1E,qEAAqE;QACrE,iBAAiB;QACjB,EAAE;QACF,8EAA8E;QAC9E,6EAA6E;QAC7E,0BAA0B;QAC1B,EAAE;QACF,yEAAyE;QACzE,qCAAqC;QACrC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAClC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7F;QACD,8EAA8E;QAC9E,2EAA2E;QAC3E,2CAA2C;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAyB,CAAC;YACxD,OAAO,IAAI,CAAC,mCAAmC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC5F;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,WAAW,GAAqB,EAAE,CAAC;QACzC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAyB,CAAC,MAAM,CAAC,CAAC;QAC5D,2EAA2E;QAC3E,wEAAwE;QACxE,wCAAwC;QACxC,GAAG;YACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACtD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7B,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBACjC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAC;aACvE;YACD,uEAAuE;YACvE,kCAAkC;YAClC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAyB,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,eAAe,EAAE,CAAC;SACvB,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;QAC3C,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;YACxC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;SACtF;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,wEAAwE;QACxE,OAAO,IAAI,CAAC,mCAAmC,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;IACS,mCAAmC,CAAC,OAAiB,EAAE,WAA6B,EAAE,GAAoB,EAAE,KAAmB;QACxI,IAAI,GAAG,EAAE;YACR,OAAO,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;SACrF;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IACS,2CAA2C;QACpD,mBAAmB;QACnB,8BAA8B;QAC9B,EAAE;QACF,eAAe;QACf,uBAAuB;QAEvB,8EAA8E;QAC9E,8EAA8E;QAC9E,8EAA8E;QAC9E,2EAA2E;QAC3E,oCAAoC;QAEpC,8BAA8B;QAC9B,gDAAgD;QAChD,kCAAkC;QAClC,4CAA4C;QAC5C,kCAAkC;QAClC,sCAAsC;QACtC,4DAA4D;QAC5D,kCAAkC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,MAAsB,CAAC;QAE3B,wBAAwB;QAExB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC9E,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAC,CAAC;SAC3E;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC5C,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;SACtD;aAAM;YACN,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACjC,+BAA+B;gBAC/B,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,gDAAgD,CAAC,CAAC,CAAC;aAC3F;SACD;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACrC,gCAAgC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACjF,qEAAqE;YACrE,OAAO,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;SACtD;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;YAC9C,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,qDAAqD,CAAC,CAAC,CAAC;SAChG;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC;IACS,cAAc,CAAC,UAAiC;QACzD,eAAe;QACf,yCAAyC;QAEzC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAqB,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,QAAQ,GAAmB,IAAI,CAAC,qCAAqC,EAAE,CAAC;YAC5E,IAAI,oBAAoB,CAAC,cAAc,KAAK,UAAU,EAAE;gBACvD,IAAI,QAAQ,EAAE;oBACb,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE;wBAClD,IAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qDAAqD,CAAC,CAAC,CAAC;qBAC1F;oBACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBACpC,IAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAC;qBACjE;iBACD;aACD;YACD,IAAI,QAAQ,EAAE;gBACb,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3B,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;aAC7D;YACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,MAAM;SACpC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,uCAAuC,CAAC,CAAC,CAAC;SAC5E;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACS,qCAAqC;QAC9C,0BAA0B;QAC1B,0BAA0B;QAC1B,kBAAkB;QAClB,oBAAoB;QACpB,mEAAmE;QAEnE,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC9E,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;SACnC;QACD,IAAI,UAAU,GAAmB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACnE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE;YACrC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACpC,OAAO,UAAU,CAAC;SAClB;QAAA,CAAC;QACF,mBAAmB;QACnB,IAAI,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE;gBAChF,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAC,CAAC;aACrE;YACD,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,KAAqB,CAAC;YAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE;gBAClD,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,cAAc,EAA6B,EAAE,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;aACnI;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE;gBACzD,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,UAAU,CAAC,OAAO,EAA2B,CAAC,EAAE,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;aAC5H;iBAAM;gBACN,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBACpC,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,UAAmC,CAAC,EAAE,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;aAClH;YACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;SACb;QACD,IAAI,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE;SAC5C;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,UAAU,CAAC,EAAE;SACjE;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;YAC3E,4BAA4B;YAC5B,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC;gBACvD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC;gBACvF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,WAAW,EAA6B,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;SACjH;aAAM;YACN,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,EAAE;gBACjD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;aACnE;YACD,IAAI,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE;gBACpC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC,CAAC;aAChE;SACD;QAED,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,sCAAsC;QACtC,MAAM,KAAK,GAAmB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/D,qEAAqE;QAErE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;SACnE;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAwB,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpG,CAAC;IACS,yBAAyB;QAClC,OAAO,IAAI,CAAC,qCAAqC,EAAE,CAAC;IACrD,CAAC;IACO,cAAc,CAAC,IAA2B;QACjD,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YACzC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAA6B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACzG;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACjD,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACjF;aACI,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;YAC5C,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,EAA2B,CAAC;YACtD,mBAAmB;YACnB,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;gBACxC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,WAAW,EAA6B,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;aACtG;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE;gBAChD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;aAC9E;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACvD;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACS,yBAAyB,CAAC,UAAmC,EAAE,IAAkB,EAAE,KAAY;QACxG,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,mCAAmC,CAAC,CAAC,CAAC;SAC9E;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE;YAC/C,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,4DAA4D,CAAC,CAAC,CAAC;SACvG;QACD,IAAI,IAAuC,CAAC;QAC5C,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3B,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;YACpG,IAAI,CAAC,aAAa,EAAE,CAAC;SACrB;aAAM;YACN,UAAU,GAAG,KAAK,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;SACzG;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACtG,CAAC;IACS,kBAAkB;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SACvC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IACS,iBAAiB,CAAC,SAAkB;QAE7C,kBAAkB;QAClB,2CAA2C;QAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,kBAAkB,GAAG,CAAC,CAAC,CAAC;QAC5B,MAAM,MAAM,GAA8B,EAAE,CAAC;QAE7C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACjC,IAAI,IAA2B,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC7B,IAAI,GAAG,IAAI,CAAC;aACZ;iBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,oCAAoC,EAAE,CAAC;gBAC7D,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1E,IAAI,kBAAkB,GAAG,CAAC,EAAE;oBAC3B,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;iBACnC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE;oBAC/D,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;iBACzE;gBACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACpC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;iBAC/D;aACD;iBAAM;gBACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,GAAG,IAAI,CAAC,oCAAoC,EAAE,CAAC;gBACnD,IAAI,CAAC,eAAe,EAAE,CAAC;aACvB;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACzB;SACD;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,SAAS,EAAE;YACd,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,MAAiC,EAAE,KAAK,CAAC,CAAC;SACxF;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IACS,oCAAoC;QAC7C,OAAO,IAAI,CAAC,qCAAqC,EAAE,CAAC;IACrD,CAAC;IACS,kBAAkB,CAAC,SAAkB;QAC9C,mBAAmB;QACnB,gEAAgE;QAEhE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACjC,MAAM,QAAQ,GAAmB,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC;YAC/E,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACzB;SACD;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACrC,IAAI,SAAS,EAAE;YACd,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,UAAwC,EAAE,KAAK,CAAC,CAAC;SAChG;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,UAAwB,EAAE,KAAK,CAAC,CAAC;IACpF,CAAC;IACS,6BAA6B,CAAC,SAAkB;QACzD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAEpD,QAAQ,QAAQ,CAAC,IAAI,EAAE;YACtB,KAAK,YAAY,CAAC,MAAM;gBACvB,IAAI,KAAK,GAAgC,cAA+B,CAAC;gBACzE,IAAI,SAAS,EAAE;oBACd,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAA2B,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;iBAClG;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAC5C,KAAK,CAAC,WAAW,EAAE,EACnB,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,CAAC,cAAc,EACvB,KAAK,CACL,CAAC;YAEH,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,oCAAoC,EAAE,CAAC;gBAC1D,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAC5C,cAAc,EACd,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,CAAC,cAAc,EACvB,KAAK,CACL,CAAC;aACF;YAED,KAAK,YAAY,CAAC,MAAM,CAAC;YACzB,KAAK,YAAY,CAAC,qBAAqB,CAAC;YACxC,KAAK,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC5B,qBAAqB;gBACrB,yBAAyB;gBACzB,0BAA0B;gBAC1B,EAAE;gBACF,uBAAuB;gBACvB,sCAAsC;gBAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;gBAChG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE;oBACtC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC;iBAC5D;gBACD,IAAI,KAAqB,CAAC;gBAC1B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBACrC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;oBAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CACpC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAwB,EAC5C,GAAG,EACH,GAAG,EACH,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrC,CAAC;iBACF;qBAAM;oBACN,KAAK,GAAG,GAAG,CAAC;iBACZ;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAC5C,cAAc,EACd,KAAK,EACL,MAAM,EACN,KAAK,EACL,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,EACrC,QAAQ,CAAC,cAAc,EACvB,KAAK,CACL,CAAC;aACF;YAED,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;gBACzB,mBAAmB;gBACnB,sEAAsE;gBACtE,0EAA0E;gBAE1E,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACtE,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CACtC,IAAI,EACJ,kBAAkB,CAAC,gBAAgB,EACnC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,SAAS,EACzE,QAAQ,CAAC,UAAU,CACnB,CAAC;gBACF,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAC5C,cAAc,EACd,KAAK,EACL,MAAM,EACN,IAAI,EACJ,KAAK,EACL,QAAQ,CAAC,cAAc,EACvB,KAAK,CACL,CAAC;aACF;YAED,KAAK,YAAY,CAAC,cAAc,CAAC;YACjC,KAAK,YAAY,CAAC,cAAc,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC;gBAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACtE,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CACtC,IAAI,EACJ,kBAAkB,CAAC,gBAAgB,EACnC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAC/G,QAAQ,CAAC,UAAU,CACnB,CAAC;gBACF,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAC5C,cAAc,EACd,KAAK,EACL,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EACrB,KAAK,EACL,KAAK,EACL,QAAQ,CAAC,cAAc,EACvB,KAAK,CACL,CAAC;aACF;YAED,KAAK,YAAY,CAAC,UAAU,CAAC;YAC7B,KAAK,YAAY,CAAC,MAAM;gBACvB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;SACvE;IACF,CAAC;IACS,aAAa,CAAC,QAA0B;QACjD,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC5B,QAAQ;YACR,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;mBAC9B,QAAQ,CAAC,0BAA0B,CAAC,SAAS,CAAC,KAAK,CAAC;mBACpD,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE;gBAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;aACrF;YACD,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;YACpC,QAAQ,CAAC,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC;SAC9C;QAED,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC1B,SAAS;YACT,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;YACpC,QAAQ,CAAC,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC;SAClD;QAED,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,IAAI,IAAI,YAAY,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACvG,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,QAAQ,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;gBAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;aACzH;YACD,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC5B,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC;aAC5C;iBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACnC,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC;aAC5C;YACD,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;SACxB;QACD,IAAI,YAA4B,CAAC;QACjC,QAAQ,SAAS,CAAC,KAAK,EAAE;YACxB,KAAK,KAAK,CAAC,YAAY;gBACtB,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACjC,IAAI,QAAQ,CAAC,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE;oBACzC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;iBACvD;gBACD,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,GAAI,YAAkC,CAAC,OAAO,EAAY,CAAC;gBACxE,IAAI,QAAQ,CAAC,QAAQ,IAAI,gBAAgB,CAAC,aAAa,EAAE;oBACxD,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;iBACvE;gBACD,MAAM;YACP,KAAK,KAAK,CAAC,MAAM,CAAC;YAClB,KAAK,KAAK,CAAC,MAAM,CAAC;YAClB,KAAK,KAAK,CAAC,MAAM;gBAChB,eAAe;gBACf,mBAAmB;gBACnB,oBAAoB;gBACpB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC9B,YAAY,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,GAAI,YAAgC,CAAC,QAAQ,EAAE,CAAC;gBAC7D,MAAM;YACP,KAAK,KAAK,CAAC,MAAM;gBAChB,oBAAoB;gBACpB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvB,YAAY,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1B,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,EAAE;oBAC1C,QAAQ,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;iBACvD;gBACD,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO,YAAY,CAAC;YACrB,KAAK,KAAK,CAAC,QAAQ;gBAClB,IAAI,QAAQ,CAAC,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE;oBACzC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvB,YAAY,GAAG,IAAI,CAAC,oCAAoC,EAAE,CAAC;oBAC3D,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;oBAEpC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,EAAE;wBACnD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,yCAAyC,CAAC,CAAC,CAAC;qBAC9E;oBACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;wBACxC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;qBACzD;oBACD,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;oBACxC,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;iBACnF;YACF;gBACC,YAAY,GAAG,IAAI,CAAC,kCAAkC,EAAE,CAAC;gBACzD,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;gBACxC,MAAM;SACP;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,EAAE;YAC1C,QAAQ,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;SACvD;QACD,OAAO,YAAY,CAAC;IACrB,CAAC;IACS,iCAAiC,CAAC,UAA0B;QACrE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QAC1D,OAAO,IAAI,CAAC,mCAAmC,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IACS,mCAAmC,CAAC,UAA0B;QACvE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC,CAAC;SAChE;QACD,wCAAwC;QACxC,2DAA2D;QAC3D,GAAG;YACF,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;gBAC1B,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;oBAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;oBACjD,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;oBACjH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,MAAM;iBACN;gBACD,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;oBAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC3B,MAAM,GAAG,GAAmB,IAAI,CAAC,kCAAkC,EAAE,CAAC;oBACtE,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;oBAChH,MAAM;iBACN;gBACD,KAAK,KAAK,CAAC,aAAa,CAAC;gBACzB,KAAK,KAAK,CAAC,aAAa,CAAC,CAAC;oBACzB,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;oBACnD,MAAM;iBACN;gBACD;oBACC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC;aACpE;SACD,QAAQ,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;QAC5C,OAAO,UAAU,CAAC;IACnB,CAAC;IACS,kCAAkC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;YACrE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;SACvB;QACD,8BAA8B;QAC9B,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAClE,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACvE;QACD,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,+CAA+C,CAAC,CAAC,CAAC;IAC3F,CAAC;IACS,uBAAuB,CAAC,UAA0B;QAC3D,2BAA2B;QAC3B,sBAAsB;QACtB,mEAAmE;QACnE,uDAAuD;QACvD,EAAE;QACF,qEAAqE;QACrE,wEAAwE;QACxE,EAAE;QACF,8FAA8F;QAC9F,2HAA2H;QAE3H,IAAI,KAAY,CAAC;QACjB,OAAO,KAAK,CAAC,kBAAkB,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;YAC3D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpB,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;SAChD;QACD,OAAO,UAAU,CAAC;IACnB,CAAC;IACS,iBAAiB,CAAC,GAAmB;QAC9C,IAAI,IAAgC,CAAC;QACrC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,iBAAiB;QACjB,QAAQ,KAAK,CAAC,KAAK,EAAE;YACpB,KAAK,KAAK,CAAC,QAAQ;gBAClB,IAAI,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBACtC,MAAM;YACP,KAAK,KAAK,CAAC,KAAK;gBACf,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE;oBAC1F,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;iBACxC;gBACD,MAAM;YACP;gBACC,MAAM;SACP;QACD,IAAI,IAAI,EAAE;YACT,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1F;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC/B,uBAAuB;YACvB,oBAAoB;YACpB,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1F;QAED,wDAAwD;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,gCAAgC;QAC3E,IAAI,IAAI,GAAsC,EAAE,CAAC;QACjD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;YAC1B,KAAK,KAAK,CAAC,KAAK;gBACf,kCAAkC;gBAClC,GAAG;oBACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;wBAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;wBAChC,IAAI,QAAQ,EAAE;4BACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;yBAClB;6BAAM;4BACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBACf;qBACD;yBAAM;wBACN,MAAM,GAAG,GAAG,IAAI,CAAC,qCAAqC,EAAE,CAAC;wBACzD,IAAI,QAAQ,EAAE;4BACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACzE;6BAAM;4BACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBACf;qBACD;iBACD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC1C,MAAM;YACP,KAAK,KAAK,CAAC,MAAM;gBAChB,uCAAuC;gBACvC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;wBAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;wBAChC,OAAO,GAAG,IAAI,CAAC;wBACf,IAAI,QAAQ,EAAE;4BACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;yBAClB;6BAAM;4BACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBACf;qBACD;yBAAM;wBACN,MAAM,GAAG,GAAG,IAAI,CAAC,qCAAqC,EAAE,CAAC;wBACzD,IAAI,QAAQ,EAAE;4BACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACzE;6BAAM;4BACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBACf;qBACD;oBACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBACxB;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1B,0CAA0C;gBAC1C,IAAI,CAAC,OAAO,EAAE;oBACb,wCAAwC;oBACxC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAwB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxG,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC1F;gBACD,MAAM;YACP;gBACC,MAAM;SACP;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACtF,CAAC;IACS,0BAA0B;QACnC,2BAA2B;QAC3B,sBAAsB;QACtB,wEAAwE;QACxE,EAAE;QAEF,IAAI,UAAU,GAAmB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC/D,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC3G,CAAC;IACS,sBAAsB;QAC/B,uBAAuB;QACvB,wBAAwB;QACxB,uBAAuB;QAEvB,wEAAwE;QACxE,iDAAiD;QAEjD,IAAI,UAAU,GAAmB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACpD,yDAAyD;YACzD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/D,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;SACrE;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACtC,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;SACrD;QACD,OAAO,UAAU,CAAC;IACnB,CAAC;IACS,uBAAuB,CAAC,CAAiB,EAAE,IAAY,EAAE,KAAa;QAC/E,GAAG;YACF,aAAa;YACb,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;gBACpE,IAAI,CAAiB,CAAC;gBACtB,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAErB,MAAM,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChD,MAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC9D,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;gBAG/C,8DAA8D;gBAC9D,6DAA6D;gBAC7D,iCAAiC;gBAEjC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;oBAC9B,wBAAwB;oBACxB,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;oBACnB,QAAQ,EAAE,CAAC,KAAK,EAAE;wBACjB,KAAK,KAAK,CAAC,EAAE;4BAAE,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;4BAAC,MAAM;wBACrC,KAAK,KAAK,CAAC,SAAS;4BAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;4BAAC,MAAM;wBACnD,OAAO,CAAC,CAAC,MAAM;qBACf;oBACD,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAA2D,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1I,IAAI,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;wBACtB,0CAA0C;wBAC1C,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAmB,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;qBACtG;iBACD;qBAAM;oBACN,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAA2D,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/I;aACD;YACD,EAAE,KAAK,CAAC;SACR,QAAQ,KAAK,IAAI,IAAI,EAAE;QAExB,OAAO,CAAC,CAAC;IACV,CAAC;IACD,kBAAkB;IACR,qBAAqB,CAAC,UAAkB;QACjD,yEAAyE;QACzE,gDAAgD;QAChD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,kCAAkC,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,WAAW,GAAG,UAAU,EAAE;gBAChE,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,6CAA6C,CAAC,CAAC,CAAC;aACxF;YACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;SAChE;QACD,MAAM,CAAC,GAAmB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,WAAW,IAAI,UAAU,EAAE;YAC9B,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;SAChE;QACD,OAAO,CAAC,CAAC;IACV,CAAC;IACS,oBAAoB;QAC7B,qBAAqB;QACrB,sBAAsB;QACtB,6BAA6B;QAC7B,2BAA2B;QAC3B,6BAA6B;QAC7B,yBAAyB;QACzB,yBAAyB;QACzB,wBAAwB;QACxB,wBAAwB;QACxB,wBAAwB;QACxB,wBAAwB;QACxB,qCAAqC;QAErC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;YACnC,OAAO,IAAI,CAAC,4BAA4B,EAAE,CAAC;SAC3C;QACD,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACpD,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;SACnC;QACD,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;IACtC,CAAC;IACS,4BAA4B;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;YAC5B,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBACzE,wDAAwD;oBACxD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,sDAAsD,CAAC,CAAC,CAAC;iBAC3F;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBACvG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC,CAAC;iBAC/E;aACD;YAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAClC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,uCAAuC,CAAC,CAAC,CAAC;aAC5E;SACD;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;YACvD,8CAA8C;YAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAoC,EAAE,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;SACtH;QACD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACrE,CAAC;IACS,sBAAsB;QAC/B,uBAAuB;QACvB,0CAA0C;QAE1C,MAAM,UAAU,GAAmB,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE;YACpF,OAAO,UAAU,CAAC;SAClB;QACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IACS,wBAAwB,CAAC,UAA0B;QAC5D,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,EAAE;YACjD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAC;SACjE;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAoB,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;IACnI,CAAC;IACS,2BAA2B;QACpC,4BAA4B;QAC5B,2CAA2C;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAC9D,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IACS,6BAA6B,CAAC,MAAsB;QAC7D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;eAChC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;eACjC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;eAC/C,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACpC,kBAAkB;gBAClB,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,cAAc,CAAC;gBAC5C,6BAA6B;gBAC7B,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;aAC7C;YACD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1F,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC;SAC9D;QAED,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,GAAG;YACF,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;gBAC1B,QAAQ;gBACR,KAAK,KAAK,CAAC,eAAe,CAAC,CAAC;oBAC3B,IAAI,UAAU,EAAE;wBACf,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;qBACzD;oBACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;oBACpC,UAAU,GAAG,IAAI,CAAC;oBAClB,gBAAgB,GAAG,IAAI,CAAC;oBACxB,IAAI,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;wBAAE,SAAS;oBACxD,MAAM,GAAG,GAAG,IAAI,CAAC,kCAAkC,EAAE,CAAC;oBACtD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;oBACzG,MAAM;iBACN;gBAED,cAAc;gBACd,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;oBAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;oBACjD,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC1G,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,MAAM;iBACN;gBAED,cAAc;gBACd,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;oBAClB,IAAI,UAAU,EAAE;wBACf,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;qBAC1E;oBACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,kCAAkC,EAAE,CAAC;oBACtD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;oBACzG,MAAM;iBACN;gBAED,UAAU;gBACV,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;oBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;oBACnC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC/F,MAAM;iBACN;gBAED,eAAe;gBACf,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;oBAChB,IAAI,UAAU,EAAE;wBACf,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;qBAC1E;oBACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,kCAAkC,EAAE,CAAC;oBACtD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;oBACrG,MAAM;iBACN;gBAED,qBAAqB;gBACrB,KAAK,KAAK,CAAC,aAAa,CAAC,CAAC;oBACzB,IAAI,UAAU,EAAE;wBACf,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC;qBACzD;oBACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAClC,UAAU,GAAG,IAAI,CAAC;oBAClB,gBAAgB,GAAG,IAAI,CAAC;oBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,kCAAkC,EAAE,CAAC;oBACtD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;oBACpG,MAAM;iBACN;gBAED;oBACC,8DAA8D;oBAC9D,IAAI,gBAAgB,EAAE;wBACrB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,uCAAuC,CAAC,CAAC,CAAC;qBAC5E;oBACD,qBAAqB;oBACrB,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;oBAC3C,MAAM;aACP;YACD,IAAI,UAAU,EAAE;gBACf,UAAU,GAAG,KAAK,CAAC;aACnB;SACD,QAAQ,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;QACpD,IAAI,gBAAgB,EAAE;YACrB,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;SAC9E;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACS,oBAAoB;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC,CAAC;SACnF;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IACS,sBAAsB,CAAC,UAA0B;QAC1D,wBAAwB;QACxB,kDAAkD;QAClD,EAAE;QACF,8BAA8B;QAC9B,yBAAyB;QACzB,0BAA0B;QAE1B,yEAAyE;QACzE,2BAA2B;QAE3B,MAAM,IAAI,GAAqB,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACzC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,6BAA6B;YAC7B,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACtB;QACD,UAAU,GAAG,IAAI,CAAC,GAAG,EAAG,CAAC;QACzB,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE;aACzB,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAqB,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;QACjJ,OAAO,UAAU,CAAC;IACnB,CAAC;IACS,4BAA4B,CAAC,UAA0B;QAChE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,IAAI,GAAmB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC9D,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IACS,oBAAoB;QAC7B,qBAAqB;QACrB,8DAA8D;QAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,UAAU,GAAG,KAAK,CAAC,CAAE,SAAS;QAClC,IAAI,UAAsC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC1B,UAAU,GAAG,IAAI,CAAC;aAClB;YACD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;gBAC1B,KAAK,KAAK,CAAC,GAAG,CAAC;gBACf,KAAK,KAAK,CAAC,SAAS,CAAC;gBACrB,KAAK,KAAK,CAAC,MAAM,CAAC;gBAClB,KAAK,KAAK,CAAC,MAAM,CAAC;gBAClB,KAAK,KAAK,CAAC,MAAM,CAAC;gBAClB,KAAK,KAAK,CAAC,KAAK,CAAC;gBACjB,KAAK,KAAK,CAAC,KAAK,CAAC;gBACjB,KAAK,KAAK,CAAC,EAAE;oBACZ,wEAAwE;oBACxE,+DAA+D;oBAC/D,wEAAwE;oBACxE,oDAAoD;oBACpD,IAAI,CAAC,UAAU;wBAAE,MAAM;oBACvB,kDAAkD;oBAClD,kBAAkB;oBAClB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBACxE;oBACC,UAAU,GAAG,IAAI,CAAC,qCAAqC,EAAE,CAAC;oBAC1D,MAAM;aACP;SACD;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IACS,wBAAwB,CAAC,KAAoB;QACtD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAC9E,CAAC;IACS,oBAAoB;QAC7B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACzE,CAAC;IACS,qBAAqB,CAAC,KAA2B,EAAE,aAAsB,EAAE,KAAmB;QACvG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACzE,CAAC;IACS,iBAAiB,CAAC,IAAgC,EAAE,gBAAyB;QACtF,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACzE,CAAC;IACS,oBAAoB;QAC7B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC1E,CAAC;IACS,sBAAsB;QAC/B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC1E,CAAC;IACS,kBAAkB;QAC3B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAC,CAAC;IACxE,CAAC;CACD","sourcesContent":["import type { DeclarationExpression, ExpressionNode } from '../api/expression.js';\nimport type { NodeFactory } from './node.js';\nimport {\n\tClassDeclaration, ClassExpression, PrivateIdentifier\n} from '../api/class/class.js';\nimport { RestElement } from '../api/computing/rest.js';\nimport { SpreadElement } from '../api/computing/spread.js';\nimport { FunctionDeclaration, FunctionExpression } from '../api/definition/function.js';\nimport { Property } from '../api/definition/object.js';\nimport {\n\tIdentifier, Literal, TaggedTemplateExpression, TemplateLiteral\n} from '../api/definition/values.js';\nimport {\n\tAssignmentOperator\n} from '../api/operators/assignment.js';\nimport { LogicalOperator } from '../api/operators/logical.js';\nimport { BlockStatement } from '../api/statement/control/block.js';\nimport { EmptyStatement } from '../api/statement/control/empty.js';\nimport { SwitchCase } from '../api/statement/control/switch.js';\nimport {\n\tVariableDeclarationNode, VariableDeclarator\n} from '../api/statement/declarations/declares.js';\nimport { ForDeclaration } from '../api/statement/iterations/for.js';\nimport {\n\tAllowLabelledFunctionStatement,\n\tFunctionBodyType, FunctionInfo, FunctionKind,\n\tfunctionKindForImpl, FunctionSyntaxKind,\n\tisAsyncFunction, isAsyncGeneratorFunction,\n\tisAwaitAsIdentifierDisallowed, isClassMembersInitializerFunction,\n\tisGeneratorFunction, isModule, isResumableFunction, ParseFunctionFlag,\n\tParsingArrowHeadFlag, PropertyKind, PropertyKindInfo,\n\tPropertyPosition, SubFunctionKind, VariableDeclarationContext\n} from './enums.js';\nimport { TemplateStringLiteral, TokenStream } from './stream.js';\nimport { Token, TokenExpression } from './token.js';\n\nimport { BinaryOperator } from '../api/operators/binary.js';\nimport { UnaryOperator } from '../api/operators/unary.js';\nimport { UpdateOperator } from '../api/operators/update.js';\nimport { ExpressionNodeFactory, ExpressionNodeSourcePosition } from './factory.js';\nimport { isSloppy, isStrict, LanguageMode } from './language.js';\n\n\n\nexport type InlineParserOptions = {\n\tmode?: LanguageMode,\n\tacceptIN?: boolean,\n\tfactory?: NodeFactory,\n\taddLocation?: boolean\n};\n\nexport type Range = [number, number];\nexport type RangeOrVoid = Range | undefined;\n\nexport type PositionMark = { range?: Range };\n\nexport abstract class AbstractParser {\n\n\tprotected acceptIN: boolean;\n\tprotected previousAcceptIN: boolean[] = [];\n\n\tprotected functionKind: FunctionKind;\n\tprotected previousFunctionKind: FunctionKind[] = [];\n\tget languageMode() {\n\t\treturn this.scanner.getLanguageMode();\n\t}\n\n\tset languageMode(mode: LanguageMode) {\n\t\tthis.scanner.setLanguageMode(mode);\n\t}\n\n\tconstructor(protected scanner: TokenStream, protected factory: NodeFactory, acceptIN?: boolean) {\n\t\tthis.previousAcceptIN.push(this.acceptIN = acceptIN ?? false);\n\t\tthis.previousFunctionKind.push(this.functionKind = FunctionKind.NormalFunction);\n\t}\n\tabstract scan(): ExpressionNode;\n\tprotected position() {\n\t\treturn this.scanner.getPos();\n\t}\n\tprotected setAcceptIN(acceptIN: boolean) {\n\t\tthis.previousAcceptIN.push(this.acceptIN);\n\t\tthis.acceptIN = acceptIN;\n\t}\n\tprotected restoreAcceptIN() {\n\t\tthis.acceptIN = this.previousAcceptIN.pop() ?? false;\n\t}\n\tprotected getLastFunctionKind() {\n\t\treturn this.previousFunctionKind.at(-2) ?? FunctionKind.NormalFunction;\n\t}\n\tprotected setFunctionKind(functionKind: FunctionKind) {\n\t\tthis.previousFunctionKind.push(this.functionKind);\n\t\tthis.functionKind = functionKind;\n\t}\n\tprotected restoreFunctionKind() {\n\t\tthis.functionKind = this.previousFunctionKind.pop() ?? FunctionKind.NormalFunction;\n\t}\n\tprotected setStatue(acceptIN: boolean, functionKind: FunctionKind) {\n\t\tthis.setFunctionKind(functionKind);\n\t\tthis.setAcceptIN(acceptIN);\n\t}\n\tprotected restoreStatue() {\n\t\tthis.restoreFunctionKind();\n\t\tthis.restoreAcceptIN();\n\t}\n\tprotected current() {\n\t\treturn this.scanner.currentToken();\n\t}\n\tprotected next() {\n\t\treturn this.scanner.next();\n\t}\n\tprotected peek(): TokenExpression {\n\t\treturn this.scanner.peek();\n\t}\n\tprotected peekAhead(): TokenExpression {\n\t\treturn this.scanner.peekAhead();\n\t}\n\tprotected peekAheadPosition() {\n\t\treturn this.scanner.peekAheadPosition();\n\t}\n\tprotected peekPosition() {\n\t\treturn this.scanner.peekPosition();\n\t}\n\tprotected createRange(): undefined;\n\tprotected createRange(start: Required<PositionMark>): Range;\n\tprotected createRange(start?: PositionMark): RangeOrVoid;\n\tprotected createRange(start?: PositionMark): RangeOrVoid {\n\t\tif (Number.isNaN(start?.range?.[0])) {\n\t\t\treturn;\n\t\t}\n\t\treturn [start!.range![0], this.scanner.getPos()];\n\t}\n\tprotected createRangeByStart(start: Required<PositionMark>): Range {\n\t\treturn [start!.range![0], this.scanner.getPos()];\n\t}\n\tprotected createStartPosition(): Range {\n\t\treturn [this.scanner.getPos(), -1];\n\t}\n\tprotected updateRangeEnd(range: Range): void {\n\t\trange[1] = this.scanner.getPos();\n\t}\n\tprotected consume(token: Token) {\n\t\tconst next = this.scanner.next();\n\t\tif (next.isNotType(token)) {\n\t\t\tthrow new Error(this.errorMessage(`Parsing ${JSON.stringify(token)}`));\n\t\t}\n\t\treturn next;\n\t}\n\tprotected check(token: Token): boolean {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.isType(token)) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected checkAndGetValue(token: Token): ExpressionNode | undefined {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.isType(token)) {\n\t\t\tthis.scanner.next();\n\t\t\treturn next.value;\n\t\t}\n\t\treturn undefined;\n\t}\n\tprotected checkValue(value: ExpressionNode): boolean {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.value == value) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected expect(token: Token) {\n\t\tconst current = this.scanner.next();\n\t\tif (current.isNotType(token)) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${JSON.stringify(token)}, current is ${JSON.stringify(current)}`));\n\t\t}\n\t\treturn current;\n\t}\n\tprotected expectAndGetValue(token: Token) {\n\t\tconst current = this.scanner.next();\n\t\tif (current.isNotType(token)) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${JSON.stringify(token)}, current is ${JSON.stringify(current)}`));\n\t\t}\n\t\treturn current.getValue();\n\t}\n\tprotected checkInOrOf(): 'IN' | 'OF' | false {\n\t\tconst result = this.peekInOrOf();\n\t\tif (result) {\n\t\t\tthis.scanner.next();\n\t\t}\n\t\treturn result;\n\t}\n\tprotected peekInOrOf(): 'IN' | 'OF' | false {\n\t\tvar next = this.peek();\n\t\tif (next.isType(Token.IN)) {\n\t\t\treturn 'IN';\n\t\t} else if (this.factory.isIdentifier(next.value) && next.value.getName() === 'of') {\n\t\t\treturn 'OF';\n\t\t}\n\t\treturn false;\n\t}\n\tprotected isArguments(node: ExpressionNode): boolean {\n\t\treturn this.factory.isIdentifier(node) && node.getName() === 'arguments';\n\t}\n\tprotected isEval(node: ExpressionNode): boolean {\n\n\t\treturn this.factory.isIdentifier(node) && node.getName() === 'eval';\n\t}\n\tprotected isEvalOrArguments(node: ExpressionNode): boolean {\n\t\treturn this.factory.isIdentifier(node) && (node.getName() === 'eval' || node.getName() === 'arguments');\n\t}\n\tprotected isNextLetKeyword() {\n\t\tif (this.peek().isNotType(Token.LET)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst nextNextToken = this.peekAhead().token;\n\t\tswitch (nextNextToken) {\n\t\t\tcase Token.LBRACE:\n\t\t\tcase Token.LBRACK:\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.STATIC:\n\t\t\tcase Token.LET: // `let let;` is disallowed by static semantics, but the\n\t\t\t// token must be first interpreted as a keyword in order\n\t\t\t// for those semantics to apply. This ensures that ASI is\n\t\t\t// not honored when a LineTerminator separates the\n\t\t\t// tokens.\n\t\t\tcase Token.YIELD:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tprotected markParenthesized(expression: ExpressionNode) {\n\t\tReflect.set(expression, 'parenthesized', true);\n\t}\n\tprotected clearParenthesized(expression: ExpressionNode) {\n\t\tReflect.deleteProperty(expression, 'parenthesized');\n\t}\n\tprotected isParenthesized(expression: ExpressionNode): boolean {\n\t\treturn Reflect.get(expression, 'parenthesized') === true;\n\t}\n\tprotected isAssignableIdentifier(expression: ExpressionNode): boolean {\n\t\t// return expression instanceof AssignmentNode;\n\t\tif (!(this.factory.isIdentifier(expression))) {\n\t\t\treturn false;\n\t\t}\n\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(expression)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\tprotected isValidReferenceExpression(expression: ExpressionNode): boolean {\n\t\treturn this.isAssignableIdentifier(expression) || this.factory.isPropertyOrMemberExpression(expression);\n\t}\n\tprotected expectSemicolon() {\n\t\tconst tok = this.peek();\n\t\tif (tok.isType(Token.SEMICOLON)) {\n\t\t\tthis.next();\n\t\t\treturn;\n\t\t}\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || Token.isAutoSemicolon(tok.token)) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.scanner.currentToken().isType(Token.AWAIT) && !isAsyncFunction(this.functionKind)) {\n\t\t\tthrow new Error(this.errorMessage(`Await Not In Async Context/Function`));\n\t\t}\n\t}\n\tprotected peekAnyIdentifier() {\n\t\treturn Token.isAnyIdentifier(this.peek().token);\n\t}\n\tprotected expectContextualKeyword(keyword: string) {\n\t\tconst current = this.scanner.next();\n\t\tif (!current.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString())) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: current Token is ${JSON.stringify(current)}`));\n\t\t}\n\t\treturn true;\n\t}\n\tprotected checkContextualKeyword(keyword: string) {\n\t\tconst next = this.scanner.peek();\n\t\tif (next.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString())) {\n\t\t\tthis.scanner.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected peekContextualKeyword(keyword: string) {\n\t\tconst next = this.scanner.peek();\n\t\treturn next.test((token, value) => Token.IDENTIFIER.equal(token) && keyword === value?.toString());\n\t}\n\tprotected methodKindFor(isStatic: boolean, flag: ParseFunctionFlag): FunctionKind {\n\t\treturn functionKindForImpl(\n\t\t\tisStatic ? SubFunctionKind.StaticMethod : SubFunctionKind.NonStaticMethod,\n\t\t\tflag\n\t\t);\n\t}\n\tprotected isGenerator() {\n\t\treturn isGeneratorFunction(this.functionKind);\n\t}\n\tprotected isAsyncFunction() {\n\t\treturn isAsyncFunction(this.functionKind);\n\t}\n\tprotected is_async_function() {\n\t\treturn isAsyncFunction(this.functionKind);\n\t}\n\tprotected is_async_generator() {\n\t\treturn isAsyncGeneratorFunction(this.functionKind);\n\t}\n\tprotected is_resumable() {\n\t\treturn isResumableFunction(this.functionKind);\n\t}\n\tprotected isAwaitAllowed() {\n\t\treturn this.isAsyncFunction() || isModule(this.functionKind);\n\t}\n\tprotected isAwaitAsIdentifierDisallowed() {\n\t\treturn isStrict(this.languageMode) ||\n\t\t\tisAwaitAsIdentifierDisallowed(this.functionKind);\n\t}\n\tprotected shouldBanArguments() {\n\t\treturn isClassMembersInitializerFunction(this.functionKind);\n\t}\n\tprotected errorMessage(message: string): string {\n\t\treturn this.scanner.createError(message);\n\t}\n\n\tprotected reportErrorMessage(message: string): void {\n\t\tconsole.error(this.scanner.createError(message));\n\t}\n}\n\nexport class JavaScriptInlineParser extends AbstractParser {\n\tstatic parse(source: string | TokenExpression[] | TokenStream, { mode, acceptIN, factory, addLocation }: InlineParserOptions = {}) {\n\t\tmode ??= LanguageMode.Strict;\n\t\tconst stream = (typeof source === 'string')\n\t\t\t? TokenStream.getTokenStream(source, mode)\n\t\t\t: Array.isArray(source) ? TokenStream.getTokenStream(source) : source;\n\t\tacceptIN ??= false;\n\t\tif (factory == undefined) {\n\t\t\tconst sourcePositionFactory = addLocation && typeof source === 'string' ? new ExpressionNodeSourcePosition(source) : undefined;\n\t\t\tfactory = new ExpressionNodeFactory(sourcePositionFactory);\n\t\t}\n\t\tconst parser = new JavaScriptInlineParser(stream, factory, acceptIN);\n\t\treturn parser.scan();\n\t}\n\tconstructor(scanner: TokenStream, factory: NodeFactory, acceptIN?: boolean) {\n\t\tsuper(scanner, factory, acceptIN);\n\t}\n\tscan(): ExpressionNode {\n\t\tconst start = this.scanner.getPos();\n\t\tconst list: ExpressionNode[] = this.parseStatementList(Token.EOS);\n\t\tif (list.length === 1) {\n\t\t\treturn list[0];\n\t\t}\n\t\treturn this.factory.createExpressionStatement(list, [start, this.scanner.getPos()]);\n\t}\n\n\t/**\n\t * Statement ::\n\t * Block\n\t * VariableStatement\n\t * EmptyStatement\n\t * ExpressionStatement\n\t * IfStatement\n\t * IterationStatement\n\t * ContinueStatement\n\t * BreakStatement\n\t * ReturnStatement\n\t * WithStatement\n\t * LabelledStatement\n\t * SwitchStatement\n\t * ThrowStatement\n\t * TryStatement\n\t * DebuggerStatement\n\t */\n\tprotected parseStatement(\n\t\tallowFunction: AllowLabelledFunctionStatement = AllowLabelledFunctionStatement.DisallowLabelledFunctionStatement\n\t): ExpressionNode {\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.LBRACE:\n\t\t\t\treturn this.parseBlock();\n\t\t\tcase Token.SEMICOLON:\n\t\t\t\tconst semicolon = this.consume(Token.SEMICOLON);\n\t\t\t\treturn this.factory.createEmptyStatement(semicolon.range);\n\t\t\tcase Token.IF:\n\t\t\t\treturn this.parseIfStatement();\n\t\t\tcase Token.DO:\n\t\t\t\treturn this.parseDoWhileStatement();\n\t\t\tcase Token.WHILE:\n\t\t\t\treturn this.parseWhileStatement();\n\t\t\tcase Token.FOR:\n\t\t\t\tif (this.isAwaitAllowed() && this.peekAhead().isType(Token.AWAIT)) {\n\t\t\t\t\treturn this.parseForAwaitStatement();\n\t\t\t\t}\n\t\t\t\treturn this.parseForStatement();\n\t\t\tcase Token.CONTINUE:\n\t\t\t\treturn this.parseContinueStatement();\n\t\t\tcase Token.BREAK:\n\t\t\t\treturn this.parseBreakStatement();\n\t\t\tcase Token.RETURN:\n\t\t\t\treturn this.parseReturnStatement();\n\t\t\tcase Token.THROW:\n\t\t\t\treturn this.parseThrowStatement();\n\t\t\tcase Token.TRY:\n\t\t\t\treturn this.parseTryStatement();\n\t\t\tcase Token.SWITCH:\n\t\t\t\treturn this.parseSwitchStatement();\n\t\t\tcase Token.WITH:\n\t\t\t\treturn this.parseWithStatement();\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tthrow new SyntaxError(this.errorMessage(`FunctionDeclaration only allowed as a StatementListItem not in an arbitrary Statement position.`));\n\t\t\tcase Token.DEBUGGER:\n\t\t\t\treturn this.parseDebuggerStatement();\n\t\t\tcase Token.VAR:\n\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.Statement);\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (!this.scanner.hasLineTerminatorAfterNext() && this.peekAhead().isType(Token.FUNCTION)) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage(`async function in single statement context.`));\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn this.parseExpressionOrLabelledStatement(allowFunction);\n\t\t}\n\t}\n\tprotected parseDebuggerStatement() {\n\t\tconst token = this.consume(Token.DEBUGGER);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createDebuggerStatement(token.range);\n\t}\n\tprotected parseTryStatement(): ExpressionNode {\n\t\t// TryStatement ::\n\t\t// 'try' Block Catch\n\t\t// 'try' Block Finally\n\t\t// 'try' Block Catch Finally\n\t\t//\n\t\t// Catch ::\n\t\t// 'catch' '(' Identifier ')' Block\n\t\t//\n\t\t// Finally ::\n\t\t// 'finally' Block\n\n\t\tconst tryToken = this.consume(Token.TRY);\n\t\tconst tryBlock = this.parseBlock();\n\t\tlet range: RangeOrVoid;\n\t\tlet peek = this.peek();\n\t\tif (peek.isNotType(Token.CATCH) && peek.isNotType(Token.FINALLY)) {\n\t\t\tthrow new Error(this.errorMessage(`Uncaught SyntaxError: Missing catch or finally after try`));\n\t\t}\n\t\tlet catchBlock: ExpressionNode | undefined;\n\t\tif (this.check(Token.CATCH)) {\n\t\t\tlet identifier: ExpressionNode | undefined;\n\t\t\tconst hasBinding = this.check(Token.LPAREN);\n\t\t\tif (hasBinding) {\n\t\t\t\tif (this.peekAnyIdentifier()) {\n\t\t\t\t\tidentifier = this.parseNonRestrictedIdentifier();\n\t\t\t\t} else {\n\t\t\t\t\tidentifier = this.parseBindingPattern(true);\n\t\t\t\t}\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t}\n\t\t\tconst block = this.parseBlock();\n\t\t\tcatchBlock = this.factory.createCatchClause(block, identifier, this.createRange(peek));\n\t\t\trange = this.createRange(tryToken);\n\t\t}\n\t\tlet finallyBlock: ExpressionNode | undefined;\n\t\tif (this.check(Token.FINALLY)) {\n\t\t\tfinallyBlock = this.parseBlock();\n\t\t\trange = this.createRange(tryToken);\n\t\t}\n\t\treturn this.factory.createTryStatement(tryBlock, catchBlock, finallyBlock, range);\n\t}\n\tprotected parseNonRestrictedIdentifier() {\n\t\tconst result = this.parseIdentifier();\n\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(result)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Strict Eval/Arguments '));\n\t\t}\n\t\treturn result;\n\t}\n\tprotected parseBlock(): BlockStatement {\n\t\tconst start = this.expect(Token.LBRACE);\n\t\tconst statements: ExpressionNode[] = [];\n\t\tconst range = this.createRangeByStart(start);\n\t\tconst block = this.factory.createBlock(statements, range);\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tconst stat = this.parseStatementListItem();\n\t\t\tif (!stat) {\n\t\t\t\treturn block;\n\t\t\t} else if (this.factory.isEmptyStatement(stat)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstatements.push(stat);\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\tthis.updateRangeEnd(range);\n\t\treturn block;\n\t}\n\t/**\n\t * ECMA 262 6th Edition\n\t * \tStatementListItem[Yield, Return] :\n\t * \tStatement[?Yield, ?Return]\n\t * \tDeclaration[?Yield]\n\t * //\n\t * Declaration[Yield] :\n\t * \tHoistableDeclaration[?Yield]\n\t * \tClassDeclaration[?Yield]\n\t * \tLexicalDeclaration[In, ?Yield]\n\t * //\n\t * HoistableDeclaration[Yield, Default] :\n\t * \tFunctionDeclaration[?Yield, ?Default]\n\t * \tGeneratorDeclaration[?Yield, ?Default]\n\t * //\n\t * LexicalDeclaration[In, Yield] :\n\t * \tLetOrConst BindingList[?In, ?Yield] ;\n\t */\n\tprotected parseStatementListItem(): ExpressionNode | undefined {\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\treturn this.parseHoistableDeclaration(undefined, false, this.peek());\n\t\t\tcase Token.CLASS:\n\t\t\t\tconst classToken = this.consume(Token.CLASS);\n\t\t\t\treturn this.parseClassDeclaration(undefined, false, classToken);\n\t\t\tcase Token.VAR:\n\t\t\tcase Token.CONST:\n\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.StatementListItem);\n\t\t\tcase Token.LET:\n\t\t\t\tif (this.isNextLetKeyword()) {\n\t\t\t\t\treturn this.parseVariableDeclarations(VariableDeclarationContext.StatementListItem);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorAfterNext()) {\n\t\t\t\t\tconst start = this.consume(Token.ASYNC);\n\t\t\t\t\treturn this.parseAsyncFunctionDeclaration(undefined, false, start);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn this.parseStatement(AllowLabelledFunctionStatement.AllowLabelledFunctionStatement);\n\t}\n\tprotected parseFunctionExpression() {\n\t\tconst start = this.consume(Token.FUNCTION);\n\t\tconst functionKind = this.check(Token.MUL) ? FunctionKind.GeneratorFunction : FunctionKind.NormalFunction;\n\t\tlet name: Identifier | undefined;\n\t\tlet functionSyntaxKind = FunctionSyntaxKind.AnonymousExpression;\n\t\tconst peek = this.peek();\n\t\tif (peek.isNotType(Token.LPAREN)) {\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t\tfunctionSyntaxKind = FunctionSyntaxKind.NamedExpression;\n\t\t}\n\t\treturn this.parseFunctionLiteral(functionKind, functionSyntaxKind, name, start);\n\t}\n\tprotected parseAsyncFunctionDeclaration(names: string[] | undefined, defaultExport: boolean, start: PositionMark): FunctionDeclaration {\n\t\t// AsyncFunctionDeclaration ::\n\t\t// async [no LineTerminator here] function BindingIdentifier[Await]\n\t\t// ( FormalParameters[Await] ) { AsyncFunctionBody }\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Line Terminator Before `function` parsing `async function`.'));\n\t\t}\n\t\tthis.consume(Token.FUNCTION);\n\t\treturn this.parseHoistableDeclaration01(FunctionKind.AsyncFunction, names, defaultExport, start) as FunctionDeclaration;\n\n\t}\n\tprotected parseIfStatement(): ExpressionNode {\n\t\tconst ifToken = this.consume(Token.IF);\n\t\tthis.consume(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.consume(Token.RPAREN);\n\t\tconst thenStatement = this.parseScopedStatement();\n\t\tlet range: RangeOrVoid;\n\t\tlet elseStatement: ExpressionNode | undefined;\n\t\tif (this.peek().isType(Token.ELSE)) {\n\t\t\tthis.consume(Token.ELSE);\n\t\t\telseStatement = this.parseScopedStatement();\n\t\t}\n\t\trange = this.createRange(ifToken);\n\t\treturn this.factory.createIfStatement(condition, thenStatement, elseStatement, range);\n\t}\n\tprotected parseScopedStatement(): ExpressionNode {\n\t\tif (isStrict(this.languageMode) || this.peek().isNotType(Token.FUNCTION)) {\n\t\t\treturn this.parseStatement();\n\t\t} else {\n\t\t\treturn this.parseFunctionDeclaration();\n\t\t}\n\t}\n\tprotected parseDoWhileStatement(): ExpressionNode {\n\t\t// DoStatement ::\n\t\t// 'do' Statement 'while' '(' Expression ')' ';'\n\t\tconst start = this.consume(Token.DO);\n\t\tconst body = this.parseStatement();\n\t\tthis.expect(Token.WHILE);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\n\t\tthis.check(Token.SEMICOLON);\n\t\treturn this.factory.createDoStatement(condition, body, this.createRange(start));\n\t}\n\tprotected parseWhileStatement() {\n\t\t// WhileStatement ::\n\t\t// 'while' '(' Expression ')' Statement\n\t\tconst start = this.consume(Token.WHILE);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst condition = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\treturn this.factory.createWhileStatement(condition, body, this.createRange(start));\n\t}\n\tprotected parseThrowStatement(): ExpressionNode {\n\t\t// ThrowStatement ::\n\t\t// 'throw' Expression ';'\n\t\tconst throwToken = this.consume(Token.THROW);\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new Error(this.scanner.createError(`New line After Throw`));\n\t\t}\n\t\tconst exception = this.parseExpression();\n\t\tconst range = this.createRange(throwToken);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createThrowStatement(exception, range);\n\t}\n\tprotected parseSwitchStatement(): ExpressionNode {\n\t\t// SwitchStatement ::\n\t\t// 'switch' '(' Expression ')' '{' CaseClause* '}'\n\t\t// CaseClause ::\n\t\t// 'case' Expression ':' StatementList\n\t\t// 'default' ':' StatementList\n\n\t\tconst start = this.consume(Token.SWITCH);\n\t\tconst range = this.createRangeByStart(start);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst tag = this.parseExpression();\n\t\tthis.expect(Token.RPAREN);\n\n\t\tconst cases: SwitchCase[] = [];\n\t\tconst switchStatement = this.factory.createSwitchStatement(tag, cases, range);\n\n\t\tlet defaultSeen = false;\n\t\tthis.expect(Token.LBRACE);\n\t\twhile (this.peek().isNotType(Token.RBRACE)) {\n\t\t\tconst statements: ExpressionNode[] = [];\n\t\t\tlet test: ExpressionNode;\n\t\t\tconst caseStart = this.scanner.peek();\n\t\t\tif (this.check(Token.CASE)) {\n\t\t\t\ttest = this.parseExpression();\n\t\t\t} else {\n\t\t\t\tthis.expect(Token.DEFAULT);\n\t\t\t\tif (defaultSeen) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Multiple Defaults In Switch`));\n\t\t\t\t}\n\t\t\t\tdefaultSeen = true;\n\t\t\t}\n\t\t\tconst blockStart = this.expect(Token.COLON);\n\t\t\twhile (this.peek().isNotType(Token.CASE)\n\t\t\t\t&& this.peek().isNotType(Token.DEFAULT)\n\t\t\t\t&& this.peek().isNotType(Token.RBRACE)) {\n\t\t\t\tconst statement = this.parseStatementListItem();\n\t\t\t\tif (!statement || this.factory.isEmptyStatement(statement)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstatements.push(statement);\n\t\t\t}\n\t\t\tconst block = this.factory.createBlock(statements, this.createRange(blockStart));\n\t\t\tconst caseRange = this.createRange(caseStart);\n\t\t\tconst clause = defaultSeen\n\t\t\t\t? this.factory.createDefaultClause(block, caseRange)\n\t\t\t\t: this.factory.createCaseBlock(test!, block, caseRange);\n\t\t\tcases.push(clause);\n\t\t}\n\t\tthis.expect(Token.RBRACE);\n\t\tthis.updateRangeEnd(range);\n\t\treturn switchStatement;\n\t}\n\tprotected parseForStatement() {\n\n\t\t// Either a standard for loop\n\t\t// for (<init>; <cond>; <next>) { ... }\n\t\t// or a for-each loop\n\t\t// for (<each> of|in <iterable>) { ... }\n\t\t//\n\t\t// We parse a declaration/expression after the 'for (' and then read the first\n\t\t// expression/declaration before we know if this is a for or a for-each.\n\t\t// typename FunctionState::LoopScope loop_scope(function_state_);\n\n\t\tconst start = this.consume(Token.FOR);\n\t\tthis.expect(Token.LPAREN);\n\t\tconst peek = this.peek();\n\t\tconst starts_with_let = peek.isType(Token.LET);\n\t\tif (peek.isType(Token.CONST) || (starts_with_let && this.isNextLetKeyword())) {\n\n\t\t\t// The initializer contains lexical declarations,\n\t\t\t// so create an in-between scope.\n\n\t\t\t// Also record whether inner functions or evals are found inside\n\t\t\t// this loop, as this information is used to simplify the desugaring\n\t\t\t// if none are found.\n\t\t\t// typename FunctionState::FunctionOrEvalRecordingScope recording_scope(function_state_);\n\t\t\tconst initializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\treturn this.parseForEachStatementWithDeclarations(initializer, forMode, start);\n\t\t\t}\n\n\t\t\tthis.expect(Token.SEMICOLON);\n\n\t\t\t// Parse the remaining code in the inner block scope since the declaration\n\t\t\t// above was parsed there. We'll finalize the unnecessary outer block scope\n\t\t\t// after parsing the rest of the loop.\n\t\t\treturn this.parseStandardForLoopWithLexicalDeclarations(initializer, start);\n\t\t}\n\n\t\tlet initializer: ExpressionNode;\n\t\tif (peek.isType(Token.VAR)) {\n\t\t\tinitializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\t\t\t// ParseVariableDeclarations(kForStatement, & for_info.parsing_result,& for_info.bound_names);\n\t\t\t// DCHECK_EQ(for_info.parsing_result.descriptor.mode, VariableMode:: kVar);\n\t\t\t// for_info.position = scanner() -> location().beg_pos;\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\treturn this.parseForEachStatementWithDeclarations(initializer as VariableDeclarationNode, forMode, start);\n\t\t\t}\n\t\t\t// init = impl() -> BuildInitializationBlock(& for_info.parsing_result);\n\t\t} else if (this.peek().isNotType(Token.SEMICOLON)) {\n\t\t\t// The initializer does not contain declarations.\n\t\t\tthis.setAcceptIN(false);\n\t\t\tinitializer = this.parseExpressionCoverGrammar();\n\t\t\tthis.restoreAcceptIN();\n\t\t\t// ExpressionParsingScope parsing_scope(impl());\n\t\t\t// AcceptINScope scope(this, false);\n\t\t\t// `for (async of` is disallowed but `for (async.x of` is allowed, so\n\t\t\t// check if the token is ASYNC after parsing the expression.\n\t\t\t// Initializer is reference followed by in/of.\n\t\t\tconst expression_is_async = this.current().isType(Token.ASYNC);\n\t\t\tconst forMode = this.checkInOrOf();\n\t\t\tif (forMode) {\n\t\t\t\tif (forMode === 'OF' && starts_with_let || expression_is_async) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage(starts_with_let ? 'For Of Let' : 'For Of Async'));\n\t\t\t\t}\n\t\t\t\treturn this.parseForEachStatementWithoutDeclarations(initializer, forMode, start);\n\t\t\t}\n\t\t}\n\n\t\tthis.expect(Token.SEMICOLON);\n\t\treturn this.parseStandardForLoop(initializer!, start);\n\t}\n\tprotected parseStandardForLoopWithLexicalDeclarations(initializer: VariableDeclarationNode, start: PositionMark) {\n\t\t// The condition and the next statement of the for loop must be parsed\n\t\t// in a new scope.\n\t\treturn this.parseStandardForLoop(initializer, start);\n\t}\n\tprotected parseForEachStatementWithDeclarations(initializer: VariableDeclarationNode, forMode: 'IN' | 'OF', start: PositionMark) {\n\t\t// Just one declaration followed by in/of.\n\t\tif (initializer.getDeclarations().length != 1) {\n\t\t\tthrow new SyntaxError(this.errorMessage('For In/Of loop Multi Bindings'));\n\t\t}\n\t\treturn this.parseForEachStatementWithoutDeclarations(initializer, forMode, start);\n\t}\n\tprotected parseForEachStatementWithoutDeclarations(initializer: ExpressionNode, forMode: 'IN' | 'OF', start: PositionMark) {\n\t\tlet enumerable: ExpressionNode;\n\t\tif (forMode == 'OF') {\n\t\t\tthis.setAcceptIN(true);\n\t\t\tenumerable = this.parseAssignmentExpression();\n\t\t\tthis.restoreAcceptIN();\n\t\t} else {\n\t\t\tenumerable = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\tconst range = this.createRange(start);\n\t\tif (forMode === 'OF') {\n\t\t\treturn this.factory.createForOfStatement(initializer as ForDeclaration, enumerable, body, range);\n\t\t} else if (forMode === 'IN') {\n\t\t\treturn this.factory.createForInStatement(initializer as ForDeclaration, enumerable, body, range);\n\t\t}\n\t\tthrow new Error(this.errorMessage(`parsing for loop: ${this.position()}`));\n\t}\n\tprotected parseStandardForLoop(initializer: ExpressionNode, start: PositionMark) {\n\t\t// CheckStackOverflow();\n\t\t// ForStatementT loop = factory() -> NewForStatement(stmt_pos);\n\t\t// Target target(this, loop, labels, own_labels, Target:: TARGET_FOR_ANONYMOUS);\n\n\t\tlet cond: ExpressionNode = this.factory.createEmptyStatement();\n\t\tif (this.peek().isNotType(Token.SEMICOLON)) {\n\t\t\tcond = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.SEMICOLON);\n\n\t\tlet next: ExpressionNode = this.factory.createEmptyStatement();\n\t\tif (this.peek().isNotType(Token.RPAREN)) {\n\t\t\tnext = this.parseExpression();\n\t\t}\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\treturn this.factory.createForStatement(body, initializer, cond, next, this.createRange(start));\n\t}\n\tprotected parseForAwaitStatement() {\n\t\t// for await '(' ForDeclaration of AssignmentExpression ')'\n\n\t\t// Create an in-between scope for let-bound iteration variables.\n\t\t// BlockState for_state(zone(), & scope_);\n\t\tif (!this.isAwaitAllowed()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('\"await\" is not allowed'));\n\t\t}\n\t\tconst start = this.expect(Token.FOR);\n\t\tthis.expect(Token.AWAIT);\n\t\tthis.expect(Token.LPAREN);\n\n\t\tlet hasDeclarations = false;\n\t\t// Scope * inner_block_scope = NewScope(BLOCK_SCOPE);\n\t\tlet eachVariable: ExpressionNode;\n\n\t\tlet peek = this.peek();\n\t\tlet startsWithLet = peek.isType(Token.LET);\n\t\tif (peek.isType(Token.VAR) || peek.isType(Token.CONST)\n\t\t\t|| (startsWithLet && this.isNextLetKeyword())) {\n\t\t\t// The initializer contains declarations\n\t\t\t// 'for' 'await' '(' ForDeclaration 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\t// 'for' 'await' '(' 'var' ForBinding 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\thasDeclarations = true;\n\t\t\tconst initializer = this.parseVariableDeclarations(VariableDeclarationContext.ForStatement);\n\t\t\tif (initializer.getDeclarations().length != 1) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('For In/Of Loop MultiBindings, \"for-await-of\"'));\n\t\t\t}\n\t\t\teachVariable = initializer;\n\t\t} else {\n\t\t\t// The initializer does not contain declarations.\n\t\t\t// 'for' 'await' '(' LeftHandSideExpression 'of' AssignmentExpression ')'\n\t\t\t// Statement\n\t\t\tif (startsWithLet) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('The initializer does not contain declarations, For Of Let, \"for-await-of\"'));\n\t\t\t}\n\t\t\teachVariable = this.parseLeftHandSideExpression();\n\t\t}\n\n\t\tthis.expectContextualKeyword('of');\n\t\tthis.setAcceptIN(true);\n\t\tconst iterable = this.parseAssignmentExpression();\n\t\tthis.restoreAcceptIN();\n\t\tthis.expect(Token.RPAREN);\n\t\tconst body = this.parseStatement();\n\t\tconst range = this.createRange(start);\n\t\treturn this.factory.createForAwaitOfStatement(eachVariable as ForDeclaration, iterable, body, range);\n\t}\n\tprotected parseVariableDeclarations(varContext: VariableDeclarationContext): VariableDeclarationNode {\n\t\t// VariableDeclarations ::\n\t\t// ('var' | 'const' | 'let') (Identifier ('=' AssignmentExpression)?)+[',']\n\t\t// var converted into ==> 'let' by parser\n\n\t\tlet mode: 'const' | 'let' | 'var';\n\t\tconst start = this.peek();\n\t\tconst token = start.token;\n\t\tswitch (token) {\n\t\t\tcase Token.CONST:\n\t\t\t\tthis.consume(token);\n\t\t\t\tmode = 'const';\n\t\t\t\tbreak;\n\t\t\tcase Token.VAR:\n\t\t\t\tthis.consume(token);\n\t\t\t\tmode = 'var';\n\t\t\t\tbreak;\n\t\t\tcase Token.LET:\n\t\t\tdefault:\n\t\t\t\tthis.consume(token);\n\t\t\t\tmode = 'let';\n\t\t\t\tbreak;\n\t\t}\n\t\tconst variables: VariableDeclarator[] = [];\n\t\tdo {\n\n\t\t\tlet name: ExpressionNode;\n\t\t\tlet value: ExpressionNode | undefined;\n\t\t\tconst range = this.createStartPosition();\n\t\t\t// Check for an identifier first, so that we can elide the pattern in cases\n\t\t\t// where there is no initializer (and so no proxy needs to be created).\n\t\t\tif (Token.isAnyIdentifier(this.peek().token)) {\n\t\t\t\tname = this.parseAndClassifyIdentifier(this.next());\n\t\t\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(name)) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments`));\n\t\t\t\t}\n\t\t\t\t// if (this.peekInOrOf()) {\n\t\t\t\t// \t// // Assignments need the variable expression for the assignment LHS, and\n\t\t\t\t// \t// // for of/in will need it later, so create the expression now.\n\t\t\t\t// }\n\t\t\t} else {\n\t\t\t\tname = this.parseBindingPattern(true);\n\t\t\t}\n\n\t\t\tif (this.check(Token.ASSIGN)) {\n\t\t\t\tthis.setAcceptIN(varContext !== VariableDeclarationContext.ForStatement)\n\t\t\t\tvalue = this.parseAssignmentExpression();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t} else if (!this.peekInOrOf()) {\n\t\t\t\t// ES6 'const' and binding patterns require initializers.\n\t\t\t\tif (mode === 'const' && (name === undefined || value === undefined)) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`Declaration Missing Initializer`));\n\t\t\t\t}\n\t\t\t\t// value = undefined;\n\t\t\t}\n\t\t\tthis.updateRangeEnd(range);\n\t\t\tvariables.push(this.factory.createVariableDeclaration(name as DeclarationExpression, value, range));\n\t\t} while (this.check(Token.COMMA));\n\t\tconst range = this.createRange(start);\n\t\treturn this.factory.createVariableStatement(variables, mode, range);\n\t}\n\tprotected parseBindingPattern(isPattern: boolean): ExpressionNode {\n\t\t// Pattern ::\n\t\t// Identifier\n\t\t// ArrayLiteral\n\t\t// ObjectLiteral\n\n\t\tconst token = this.peek().token;\n\t\tif (Token.isAnyIdentifier(token)) {\n\t\t\tconst name = this.parseAndClassifyIdentifier(this.next());\n\t\t\tif (isStrict(this.languageMode) && this.isEvalOrArguments(name)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments`));\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t\tif (token == Token.LBRACK) {\n\t\t\treturn this.parseArrayLiteral(isPattern);\n\t\t} else if (token == Token.LBRACE) {\n\t\t\treturn this.parseObjectLiteral(isPattern);\n\t\t}\n\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${this.next().getValue()}`));\n\t}\n\tprotected parseAndClassifyIdentifier(next: TokenExpression): ExpressionNode {\n\t\t// Updates made here must be reflected on ClassifyPropertyIdentifier.\n\t\tif (Token.isInRangeIdentifierAndAsync(next.token)) {\n\t\t\tconst name = next.getValue<Identifier>();\n\t\t\tif (this.isArguments(name) && this.shouldBanArguments()) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Arguments Disallowed In Initializer And Static Block'));\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\n\t\tif (!Token.isValidIdentifier(next.token, this.languageMode, this.isGenerator(), this.isAwaitAsIdentifierDisallowed())) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Invalid Identifier'));\n\t\t}\n\n\t\tif (next.isType(Token.AWAIT)) {\n\t\t\treturn next.getValue<Identifier>();\n\t\t}\n\n\t\treturn next.getValue<Identifier>();\n\t}\n\tprotected parseContinueStatement(): ExpressionNode {\n\t\t// ContinueStatement ::\n\t\t// 'continue' ';'\n\t\t// Identifier? is not supported\n\n\t\tconst start = this.consume(Token.CONTINUE);\n\t\tlet label: Identifier | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext() &&\n\t\t\t!Token.isAutoSemicolon(this.peek().token)) {\n\t\t\t// ECMA allows \"eval\" or \"arguments\" as labels even in strict mode.\n\t\t\tlabel = this.parseIdentifier();\n\t\t}\n\t\tconst range = this.createRange(start);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createContinueStatement(label, range);\n\n\t}\n\tprotected parseBreakStatement(): ExpressionNode {\n\t\t// BreakStatement ::\n\t\t// 'break' ';'\n\t\t// Identifier? is not supported\n\n\t\tconst start = this.consume(Token.BREAK);\n\t\tlet label: Identifier | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext() &&\n\t\t\t!Token.isAutoSemicolon(this.peek().token)) {\n\t\t\t// ECMA allows \"eval\" or \"arguments\" as labels even in strict mode.\n\t\t\tlabel = this.parseIdentifier();\n\t\t}\n\t\tconst range = this.createRange(start);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createBreakStatement(label, range);\n\t}\n\tprotected parseReturnStatement(): ExpressionNode {\n\t\t// ReturnStatement ::\n\t\t// 'return' [no line terminator] Expression? ';'\n\n\t\t// Consume the return token. It is necessary to do that before\n\t\t// reporting any errors on it, because of the way errors are\n\t\t// reported (underlining).\n\t\tconst start = this.consume(Token.RETURN);\n\t\tconst tokenExp = this.peek();\n\t\tlet returnValue: ExpressionNode | undefined;\n\t\t// ExpressionT return_value = impl() -> NullExpression();\n\t\tif (this.scanner.hasLineTerminatorBeforeNext() || Token.isAutoSemicolon(tokenExp.token)) {\n\t\t\t// check if this scope is belong to 'constructor' method to return this at the end;\n\t\t\t// if (this.isDerivedConstructor(this.functionKind)) {\n\t\t\t// \treturnValue = ThisNode;\n\t\t\t// }\n\t\t} else {\n\t\t\treturnValue = this.parseExpression();\n\t\t}\n\t\tconst range = this.createRange(start);\n\t\tthis.expectSemicolon();\n\t\treturn this.factory.createReturnStatement(returnValue, range);\n\t}\n\tprotected parseExpressionOrLabelledStatement(allowFunction: AllowLabelledFunctionStatement): ExpressionNode {\n\t\t// ExpressionStatement | LabelledStatement ::\n\t\t// Expression ';'\n\t\t// Identifier ':' Statement\n\t\t//\n\t\t// ExpressionStatement[Yield] :\n\t\t// [lookahead notin {{, function, class, let [}] Expression[In, ?Yield] ;\n\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\tcase Token.LBRACE:\n\t\t\t\tthrow new Error(this.errorMessage(`Unreachable state`));\n\t\t\tcase Token.CLASS:\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token ${this.next().getValue().toString()}`));\n\t\t\tcase Token.LET: {\n\t\t\t\tconst nextNext = this.peekAhead();\n\t\t\t\t// \"let\" followed by either \"[\", \"{\" or an identifier means a lexical\n\t\t\t\t// declaration, which should not appear here.\n\t\t\t\t// However, ASI may insert a line break before an identifier or a brace.\n\t\t\t\tif (nextNext.isNotType(Token.LBRACK) &&\n\t\t\t\t\t((nextNext.isNotType(Token.LBRACE) && nextNext.isNotType(Token.IDENTIFIER)))) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Lexical Declaration ${this.position()}`));\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tconst range = this.createStartPosition();\n\t\tconst startsWithIdentifier = Token.isAnyIdentifier(this.peek().token);\n\t\tthis.setAcceptIN(true);\n\t\tconst expression: ExpressionNode = this.parseExpressionCoverGrammar();\n\t\tif (this.peek().isType(Token.COLON) && startsWithIdentifier && this.factory.isIdentifier(expression)) {\n\t\t\t// The whole expression was a single identifier, and not, e.g.,\n\t\t\t// something starting with an identifier or a parenthesized identifier.\n\n\t\t\t// Remove the \"ghost\" variable that turned out to be a label from the top\n\t\t\t// scope. This way, we don't try to resolve it during the scope\n\t\t\t// processing.\n\n\t\t\tthis.consume(Token.COLON);\n\t\t\t// ES#sec-labelled-function-declarations Labelled Function Declarations\n\t\t\tif (this.peek().isType(Token.FUNCTION)\n\t\t\t\t&& isSloppy(this.languageMode)\n\t\t\t\t&& allowFunction == AllowLabelledFunctionStatement.AllowLabelledFunctionStatement) {\n\t\t\t\tconst result = this.parseFunctionDeclaration();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tthis.updateRangeEnd(range);\n\t\t\t\treturn this.factory.createLabeledStatement(expression, result, range);\n\t\t\t}\n\t\t\tconst result = this.parseStatement(allowFunction);\n\t\t\tthis.restoreAcceptIN();\n\t\t\tthis.updateRangeEnd(range);\n\t\t\treturn this.factory.createLabeledStatement(expression, result, range);\n\t\t}\n\t\tthis.restoreAcceptIN();\n\t\t// Parsed expression statement, followed by semicolon.\n\t\tthis.expectSemicolon();\n\t\treturn expression;\n\t}\n\tprotected parseExpression(): ExpressionNode {\n\t\tthis.setAcceptIN(true);\n\t\tconst result = this.parseExpressionCoverGrammar();\n\t\tthis.restoreAcceptIN();\n\t\treturn result;\n\t}\n\tprotected parseFunctionDeclaration(): FunctionDeclaration {\n\t\tconst start = this.consume(Token.FUNCTION);\n\t\tif (this.check(Token.MUL)) {\n\t\t\tthrow new Error(this.errorMessage(`Error Generator In Single Statement Context`));\n\t\t}\n\t\treturn this.parseHoistableDeclaration01(FunctionKind.NormalFunction, undefined, false, start) as FunctionDeclaration;\n\t}\n\n\tprotected parseAsyncFunctionLiteral() {\n\t\t// AsyncFunctionLiteral ::\n\t\t// async [no LineTerminator here] function ( FormalParameters[Await] )\n\t\t// { AsyncFunctionBody }\n\t\t//\n\t\t// async [no LineTerminator here] function BindingIdentifier[Await]\n\t\t// ( FormalParameters[Await] ) { AsyncFunctionBody }\n\t\tif (this.current().isNotType(Token.ASYNC)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('invalid token'));\n\t\t}\n\t\tconst start = this.consume(Token.FUNCTION);\n\t\tlet name: Identifier | undefined;\n\t\tlet syntaxKind = FunctionSyntaxKind.AnonymousExpression;\n\t\tlet flags = FunctionKind.AsyncFunction;\n\t\tif (this.check(Token.MUL)) {\n\t\t\tflags = FunctionKind.AsyncGeneratorFunction;\n\t\t}\n\t\tif (this.peekAnyIdentifier()) {\n\t\t\tsyntaxKind = FunctionSyntaxKind.NamedExpression;\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t}\n\t\treturn this.parseFunctionLiteral(flags, syntaxKind, name, start);\n\t}\n\tprotected parseHoistableDeclaration(names: string[] | undefined, defaultExport: boolean, start: PositionMark) {\n\t\tthis.consume(Token.FUNCTION);\n\t\tlet flags = FunctionKind.NormalFunction;\n\t\tif (this.check(Token.MUL)) {\n\t\t\tflags = FunctionKind.GeneratorFunction;\n\t\t}\n\t\treturn this.parseHoistableDeclaration01(flags, names, defaultExport, start);\n\t}\n\n\tprotected parseHoistableDeclaration01(flag: FunctionKind, names: string[] | undefined, defaultExport: boolean, start: PositionMark) {\n\t\t// FunctionDeclaration ::\n\t\t// 'function' Identifier '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t// 'function' '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t// GeneratorDeclaration ::\n\t\t// 'function' '*' Identifier '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t// 'function' '*' '(' FormalParameters ')' '{' FunctionBody '}'\n\t\t//\n\t\t// The anonymous forms are allowed iff [default_export] is true.\n\t\t//\n\t\t// 'function' and '*' (if present) have been consumed by the caller.\n\n\t\t// (FunctionType.ASYNC === flag || FunctionType.GENERATOR === flag);\n\n\t\tif ((flag & ParseFunctionFlag.IsAsync) != 0 && this.check(Token.MUL)) {\n\t\t\t// Async generator\n\t\t\tflag |= ParseFunctionFlag.IsGenerator;\n\t\t}\n\n\t\tlet name: Identifier | undefined;\n\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\tif (defaultExport) {\n\t\t\t\tname = this.factory.createIdentifier('default', this.createRange(start));\n\t\t\t} else {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Missing Function Name'));\n\t\t\t}\n\t\t} else {\n\t\t\tname = this.parseIdentifier(this.getLastFunctionKind());\n\t\t}\n\t\tnames?.push(name.toString());\n\t\treturn this.parseFunctionLiteral(flag, FunctionSyntaxKind.Declaration, name, start);\n\t}\n\tprotected parseIdentifier(kind?: FunctionKind): Identifier {\n\t\tkind ??= this.functionKind;\n\t\tconst next = this.next();\n\t\tif (!Token.isValidIdentifier(next.token, this.languageMode, isGeneratorFunction(kind), isAwaitAsIdentifierDisallowed(kind))) {\n\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${next.getValue()}`));\n\t\t}\n\t\tif (next.isType(Token.IDENTIFIER)) {\n\t\t\treturn next.getValue<Identifier>();\n\t\t}\n\t\treturn this.getIdentifier();\n\t}\n\tprotected getIdentifier(): Identifier {\n\t\tconst current = this.current();\n\t\tswitch (current.token) {\n\t\t\tcase Token.AWAIT:\n\t\t\t\treturn this.factory.createIdentifier('await', current.range);\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn this.factory.createIdentifier('async', current.range);\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\treturn current.getValue();\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tconst name = current.getValue().toString();\n\t\tif (name == 'constructor') {\n\t\t\treturn this.factory.createIdentifier('constructor', current.range);\n\t\t}\n\t\tif (name == 'name') {\n\t\t\treturn this.factory.createIdentifier('name', current.range);\n\t\t}\n\t\tif (name == 'eval') {\n\t\t\treturn this.factory.createIdentifier('eval', current.range);\n\t\t}\n\t\telse if (name == 'arguments') {\n\t\t\treturn this.factory.createIdentifier('arguments', current.range);\n\t\t}\n\t\treturn current.getValue();\n\t}\n\tprotected parseFunctionLiteral(flag: FunctionKind, functionSyntaxKind: FunctionSyntaxKind, name: Identifier | undefined, start: PositionMark): FunctionDeclaration | FunctionExpression {\n\t\t// Function ::\n\t\t// '(' FormalParameterList? ')' '{' FunctionBody '}'\n\n\t\tthis.setFunctionKind(flag);\n\t\tconst functionInfo: FunctionInfo = {};\n\t\tthis.expect(Token.LPAREN);\n\t\tconst formals = this.parseFormalParameterList(functionInfo);\n\t\tthis.expect(Token.RPAREN);\n\t\tconst bodyStart = this.expect(Token.LBRACE);\n\t\tthis.setAcceptIN(true);\n\t\tconst body = this.parseFunctionBody(flag, FunctionBodyType.BLOCK, functionSyntaxKind);\n\t\tthis.restoreAcceptIN();\n\t\tthis.restoreFunctionKind();\n\t\tconst bodyRange = this.createRange(bodyStart);\n\t\tconst funcRange = this.createRange(start);\n\t\tconst bodyBlock = this.factory.createBlock(body, bodyRange);\n\t\tif (name) {\n\t\t\treturn this.factory.createFunctionDeclaration(formals, bodyBlock, isAsyncFunction(flag), isGeneratorFunction(flag), name, funcRange);\n\t\t}\n\t\treturn this.factory.createFunctionExpression(formals, bodyBlock, isAsyncFunction(flag), isGeneratorFunction(flag), funcRange);\n\t}\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType.BLOCK,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode[];\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType.EXPRESSION,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode\n\tprotected parseFunctionBody(\n\t\tkind: FunctionKind,\n\t\tbodyType: FunctionBodyType,\n\t\tfunctionSyntaxKind: FunctionSyntaxKind): ExpressionNode[] | ExpressionNode {\n\t\t// Building the parameter initialization block declares the parameters.\n\t\t// TODO(verwaest): Rely on ArrowHeadParsingScope instead.\n\n\t\tlet innerBody: ExpressionNode[] | ExpressionNode;\n\t\tif (bodyType == FunctionBodyType.EXPRESSION) {\n\t\t\tinnerBody = this.parseAssignmentExpression();\n\t\t} else {\n\t\t\t// DCHECK(accept_IN_);\n\t\t\t// DCHECK_EQ(FunctionBodyType:: kBlock, body_type);\n\t\t\t// If we are parsing the source as if it is wrapped in a function, the\n\t\t\t// source ends without a closing brace.\n\t\t\tconst closing_token = functionSyntaxKind == FunctionSyntaxKind.Wrapped ? Token.EOS : Token.RBRACE;\n\n\t\t\tif (isAsyncGeneratorFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAndRewriteAsyncGeneratorFunctionBody(kind);\n\t\t\t} else if (isGeneratorFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAndRewriteGeneratorFunctionBody(kind);\n\t\t\t} else if (isAsyncFunction(kind)) {\n\t\t\t\tinnerBody = this.parseAsyncFunctionBody();\n\t\t\t} else {\n\t\t\t\tinnerBody = this.parseStatementList(closing_token);\n\t\t\t}\n\t\t\tthis.expect(closing_token);\n\t\t}\n\t\treturn innerBody;\n\t}\n\tprotected parseAndRewriteAsyncGeneratorFunctionBody(kind: FunctionKind): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseAndRewriteGeneratorFunctionBody(kind: FunctionKind): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseAsyncFunctionBody(): ExpressionNode[] {\n\t\treturn this.parseStatementList(Token.RBRACE);\n\t}\n\tprotected parseStatementList(endToken: Token): ExpressionNode[] {\n\t\t// StatementList ::\n\t\t// (StatementListItem)* <end_token>\n\t\tif (this.peek().test((token, value) => Token.STRING === token && 'use strict' === (value as Literal<string>).getValue())) {\n\t\t\tthis.languageMode = LanguageMode.Strict;\n\t\t}\n\t\tconst list: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(endToken)) {\n\t\t\tconst stat = this.parseStatementListItem();\n\t\t\tif (!stat) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (this.factory.isEmptyStatement(stat)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlist.push(stat);\n\t\t}\n\t\treturn list;\n\t}\n\tprotected parseFormalParameterList(functionInfo: FunctionInfo): DeclarationExpression[] {\n\t\t// FormalParameters[Yield] :\n\t\t// [empty]\n\t\t// FunctionRestParameter[?Yield]\n\t\t// FormalParameterList[?Yield]\n\t\t// FormalParameterList[?Yield] ,\n\t\t// FormalParameterList[?Yield] , FunctionRestParameter[?Yield]\n\t\t//\n\t\t// FormalParameterList[Yield] :\n\t\t// FormalParameter[?Yield]\n\t\t// FormalParameterList[?Yield] , FormalParameter[?Yield]\n\n\t\tconst parameters: DeclarationExpression[] = [];\n\t\tif (this.peek().isNotType(Token.RPAREN)) {\n\t\t\twhile (true) {\n\t\t\t\tconst param = this.parseFormalParameter(functionInfo);\n\t\t\t\tparameters.push(param);\n\t\t\t\tif (functionInfo.rest) {\n\t\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Param After Rest`));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!this.check(Token.COMMA)) break;\n\t\t\t\tif (this.peek().isType(Token.RPAREN)) {\n\t\t\t\t\t// allow the trailing comma\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn parameters;\n\t}\n\tprotected parseFormalParameter(functionInfo: FunctionInfo): DeclarationExpression {\n\t\t// FormalParameter[Yield,GeneratorParameter] :\n\t\t// BindingElement[?Yield, ?GeneratorParameter]\n\t\tconst range = this.createStartPosition();\n\t\tfunctionInfo.rest = this.check(Token.ELLIPSIS);\n\t\tconst pattern = this.parseBindingPattern(true);\n\t\tlet initializer: DeclarationExpression;\n\t\tif (this.check(Token.ASSIGN)) {\n\t\t\tif (functionInfo.rest) {\n\t\t\t\tthrow new Error(this.errorMessage(`Rest Default Initializer`));\n\t\t\t}\n\t\t\tthis.setAcceptIN(true);\n\t\t\tconst right = this.parseAssignmentExpression();\n\t\t\tthis.restoreAcceptIN();\n\t\t\tthis.updateRangeEnd(range);\n\t\t\tconst left = this.checkParamType(pattern as DeclarationExpression);\n\t\t\tinitializer = this.factory.createAssignmentPattern(left, right, range);\n\t\t} else {\n\t\t\tthis.updateRangeEnd(range);\n\t\t\tconst param = this.checkParamType(pattern as DeclarationExpression);\n\t\t\tinitializer = functionInfo.rest ? this.factory.createRestElement(param, param.range && [range[0], param.range[1]]) : param;\n\t\t}\n\t\treturn initializer;\n\t}\n\tprotected parseExpressionCoverGrammar(): ExpressionNode {\n\t\t// Expression ::\n\t\t// AssignmentExpression\n\t\t// Expression ',' AssignmentExpression\n\n\t\tconst list: ExpressionNode[] = [];\n\t\tlet expression: ExpressionNode;\n\t\twhile (true) {\n\t\t\tif (this.peek().isType(Token.ELLIPSIS)) {\n\t\t\t\treturn this.parseArrowParametersWithRest(list);\n\t\t\t}\n\t\t\texpression = this.parseAssignmentExpressionCoverGrammar();\n\t\t\tlist.push(expression);\n\n\t\t\tif (!this.check(Token.COMMA)) break;\n\n\t\t\tif (this.peek().isType(Token.RPAREN) && this.peekAhead().isType(Token.ARROW)) {\n\t\t\t\t// a trailing comma is allowed at the end of an arrow parameter list\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (list.length == 1) return expression;\n\t\treturn this.expressionListToExpression(list);\n\t}\n\tprotected parseArrowParametersWithRest(list: ExpressionNode[]): ExpressionNode {\n\t\tconst start = this.consume(Token.ELLIPSIS);\n\t\tconst pattern: ExpressionNode = this.parseBindingPattern(true);\n\t\tconst range = this.createRange(start);\n\t\tif (this.peek().isType(Token.ASSIGN)) {\n\t\t\tthrow new Error(this.errorMessage(`Error A rest parameter cannot have an initializer`));\n\t\t}\n\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\tthrow new Error(this.errorMessage(`Error A rest parameter or binding pattern may not have a trailing comma`));\n\t\t}\n\t\t// 'x, y, ...z' in CoverParenthesizedExpressionAndArrowParameterList only\n\t\t// as the formal parameters of'(x, y, ...z) => foo', and is not itself a\n\t\t// valid expression.\n\t\tif (this.peek().isNotType(Token.RPAREN) || this.peekAhead().isNotType(Token.ARROW)) {\n\t\t\tthrow new Error(this.errorMessage(`Error Unexpected Token At ${this.position()}`));\n\t\t}\n\t\tlist.push(this.factory.createSpreadElement(pattern, range));\n\t\treturn this.expressionListToExpression(list);\n\t}\n\tprotected expressionListToExpression(list: ExpressionNode[]): ExpressionNode {\n\t\tconst first = list[0];\n\t\tif (list.length === 1) { return first; }\n\t\tif (this.factory.isSequenceExpression(first)) {\n\t\t\tfirst.getExpressions().push(...list.slice(1));\n\t\t\treturn first;\n\t\t}\n\t\tconst range = this.createRange(list.at(0));\n\t\trange && this.updateRangeEnd(range);\n\t\treturn this.factory.createCommaListExpression(list, range);\n\t}\n\tprotected parseMemberExpression(): ExpressionNode {\n\t\t// MemberExpression ::\n\t\t// (PrimaryExpression | FunctionLiteral | ClassLiteral)\n\t\t// ('[' Expression ']' | '.' Identifier | Arguments | TemplateLiteral)*\n\t\t//\n\t\t// CallExpression ::\n\t\t// (SuperCall | ImportCall)\n\t\t// ('[' Expression ']' | '.' Identifier | Arguments | TemplateLiteral)*\n\t\t//\n\t\t// The '[' Expression ']' and '.' Identifier parts are parsed by\n\t\t// ParseMemberExpressionContinuation, and everything preceeding it is merged\n\t\t// into ParsePrimaryExpression.\n\n\t\t// Parse the initial primary or function expression.\n\t\tconst result = this.parsePrimaryExpression();\n\t\treturn this.parseMemberExpressionContinuation(result);\n\t}\n\tprotected parsePrimaryExpression(): ExpressionNode {\n\t\t// PrimaryExpression ::\n\t\t// 'this'\n\t\t// 'null'\n\t\t// 'true'\n\t\t// 'false'\n\t\t// Identifier\n\t\t// Number\n\t\t// String\n\t\t// ArrayLiteral\n\t\t// ObjectLiteral\n\t\t// RegExpLiteral\n\t\t// '(' Expression ')'\n\t\t// do Block\n\t\t// AsyncFunctionLiteral\n\n\t\tlet token = this.peek();\n\t\tif (Token.isAnyIdentifier(token.token)) {\n\t\t\tthis.consume(token.token);\n\t\t\tlet kind = FunctionKind.NormalFunction;\n\t\t\tif (token.isType(Token.ASYNC) && !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\t// async function ...\n\t\t\t\tif (this.peek().isType(Token.FUNCTION)) {\n\t\t\t\t\treturn this.parseAsyncFunctionLiteral();\n\t\t\t\t};\n\t\t\t\t// async Identifier => ...\n\t\t\t\tif (Token.isAnyIdentifier(this.peek().token) && this.peekAhead().isType(Token.ARROW)) {\n\t\t\t\t\ttoken = this.next();\n\t\t\t\t\tkind = FunctionKind.AsyncFunction;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.peek().isType(Token.ARROW)) {\n\t\t\t\tthis.setFunctionKind(kind);\n\t\t\t\tconst name = this.parseAndClassifyIdentifier(token);\n\t\t\t\tconst params = this.factory.isSequenceExpression(name) ? name.getExpressions() : [name];\n\t\t\t\tconst arrow = this.parseArrowFunctionLiteral(params as DeclarationExpression[], kind, this.createRange(token));\n\t\t\t\tthis.restoreFunctionKind();\n\t\t\t\treturn arrow;\n\t\t\t}\n\t\t\treturn this.parseAndClassifyIdentifier(token);\n\t\t}\n\n\t\tif (Token.isLiteral(token.token)) {\n\t\t\treturn this.next().getValue();\n\t\t}\n\n\t\tswitch (token.token) {\n\t\t\tcase Token.NEW:\n\t\t\t\treturn this.parseMemberWithPresentNewPrefixesExpression();\n\t\t\tcase Token.THIS:\n\t\t\t\tthis.consume(Token.THIS);\n\t\t\t\treturn this.factory.createThis(token.range);\n\t\t\tcase Token.DIV:\n\t\t\tcase Token.DIV_ASSIGN:\n\t\t\t\t// case Token.REGEXP_LITERAL:\n\t\t\t\t// this.consume(Token.REGEXP_LITERAL);\n\t\t\t\t// return token.value!;\n\t\t\t\treturn this.parseRegExpLiteral();\n\t\t\tcase Token.FUNCTION:\n\t\t\t\treturn this.parseFunctionExpression();\n\t\t\tcase Token.SUPER: {\n\t\t\t\treturn this.parseSuperExpression();\n\t\t\t}\n\t\t\tcase Token.IMPORT:\n\t\t\t\treturn this.parseImportExpressions();\n\n\t\t\tcase Token.LBRACK:\n\t\t\t\treturn this.parseArrayLiteral(false);\n\n\t\t\tcase Token.LBRACE:\n\t\t\t\treturn this.parseObjectLiteral(false);\n\n\t\t\tcase Token.LPAREN: {\n\t\t\t\tthis.consume(Token.LPAREN);\n\t\t\t\tif (this.check(Token.RPAREN)) {\n\t\t\t\t\t// ()=>x. The continuation that consumes the => is in\n\t\t\t\t\t// ParseAssignmentExpressionCoverGrammar.\n\n\t\t\t\t\tif (!this.peek().isType(Token.ARROW)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${Token.RPAREN.getName()}`));\n\t\t\t\t\t}\n\t\t\t\t\tconst result = this.factory.createCommaListExpression([], this.createRange(token));\n\t\t\t\t\tthis.markParenthesized(result);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\t// Heuristically try to detect immediately called functions before\n\t\t\t\t// seeing the call parentheses.\n\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst expression = this.parseExpressionCoverGrammar();\n\t\t\t\tthis.markParenthesized(expression);\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn expression;\n\t\t\t}\n\t\t\tcase Token.CLASS: {\n\t\t\t\treturn this.parseClassExpression();\n\t\t\t}\n\t\t\tcase Token.TEMPLATE_SPAN:\n\t\t\tcase Token.TEMPLATE_TAIL:\n\t\t\t\treturn this.parseTemplateLiteral();\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tthrow new Error(this.errorMessage(`Unexpected Token: ${JSON.stringify(this.next())}`));\n\t}\n\tprotected parseTemplateLiteral(tag?: ExpressionNode): ExpressionNode {\n\t\t// A TemplateLiteral is made up of 0 or more TEMPLATE_SPAN tokens (literal\n\t\t// text followed by a substitution expression), finalized by a single\n\t\t// TEMPLATE_TAIL.\n\t\t//\n\t\t// In terms of draft language, TEMPLATE_SPAN may be either the TemplateHead or\n\t\t// TemplateMiddle productions, while TEMPLATE_TAIL is either TemplateTail, or\n\t\t// NoSubstitutionTemplate.\n\t\t//\n\t\t// When parsing a TemplateLiteral, we must have scanned either an initial\n\t\t// TEMPLATE_SPAN, or a TEMPLATE_TAIL.\n\t\tlet next = this.peek();\n\t\tif (!Token.isTemplate(next.token)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Token: ${JSON.stringify(this.next())}`));\n\t\t}\n\t\t// If we reach a TEMPLATE_TAIL first, we are parsing a NoSubstitutionTemplate.\n\t\t// In this case we may simply consume the token and build a template with a\n\t\t// single TEMPLATE_SPAN and no expressions.\n\t\tif (next.isType(Token.TEMPLATE_TAIL)) {\n\t\t\tthis.consume(Token.TEMPLATE_TAIL);\n\t\t\tconst template = next.getValue<TemplateStringLiteral>();\n\t\t\treturn this.createTemplateLiteralExpressionNode([template.string], [], tag, template.range);\n\t\t}\n\t\tconst start = this.consume(Token.TEMPLATE_SPAN);\n\t\tconst expressions: ExpressionNode[] = [];\n\t\tconst strings: string[] = [];\n\t\tstrings.push(next.getValue<TemplateStringLiteral>().string);\n\t\t// If we open with a TEMPLATE_SPAN, we must scan the subsequent expression,\n\t\t// and repeat if the following token is a TEMPLATE_SPAN as well (in this\n\t\t// case, representing a TemplateMiddle).\n\t\tdo {\n\t\t\tthis.setAcceptIN(true);\n\t\t\tconst expression = this.parseExpressionCoverGrammar();\n\t\t\texpressions.push(expression);\n\t\t\tnext = this.next();\n\t\t\tif (next.isNotType(Token.RBRACE)) {\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unterminated Template Expr'));\n\t\t\t}\n\t\t\t// If we didn't die parsing that expression, our next token should be a\n\t\t\t// TEMPLATE_SPAN or TEMPLATE_TAIL.\n\t\t\tnext = this.scanner.scanTemplateContinuation();\n\t\t\tstrings.push(next.getValue<TemplateStringLiteral>().string);\n\t\t\tthis.restoreAcceptIN();\n\t\t} while (next.isType(Token.TEMPLATE_SPAN));\n\t\tif (next.isNotType(Token.TEMPLATE_TAIL)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Token: ${JSON.stringify(next)}`));\n\t\t}\n\t\tconst range = this.createRange(start);\n\t\t// Once we've reached a TEMPLATE_TAIL, we can close the TemplateLiteral.\n\t\treturn this.createTemplateLiteralExpressionNode(strings, expressions, tag, range);\n\t}\n\tprotected createTemplateLiteralExpressionNode(strings: string[], expressions: ExpressionNode[], tag?: ExpressionNode, range?: RangeOrVoid): TaggedTemplateExpression | TemplateLiteral {\n\t\tif (tag) {\n\t\t\treturn this.factory.createTaggedTemplateExpression(tag, strings, expressions, range);\n\t\t}\n\t\treturn this.factory.createTemplateExpression(strings, expressions, range);\n\t}\n\tprotected parseMemberWithPresentNewPrefixesExpression(): ExpressionNode {\n\t\t// NewExpression ::\n\t\t// ('new')+ MemberExpression\n\t\t//\n\t\t// NewTarget ::\n\t\t// 'new' '.' 'target'\n\n\t\t// The grammar for new expressions is pretty warped. We can have several 'new'\n\t\t// keywords following each other, and then a MemberExpression. When we see '('\n\t\t// after the MemberExpression, it's associated with the rightmost unassociated\n\t\t// 'new' to create a NewExpression with arguments. However, a NewExpression\n\t\t// can also occur without arguments.\n\n\t\t// Examples of new expression:\n\t\t// new foo.bar().baz means (new (foo.bar)()).baz\n\t\t// new foo()() means (new foo())()\n\t\t// new new foo()() means (new (new foo())())\n\t\t// new new foo means new (new foo)\n\t\t// new new foo() means new (new foo())\n\t\t// new new foo().bar().baz means (new (new foo()).bar()).baz\n\t\t// new super.x means new (super.x)\n\t\tconst start = this.consume(Token.NEW);\n\n\t\tlet result: ExpressionNode;\n\n\t\t// CheckStackOverflow();\n\n\t\tif (this.peek().isType(Token.IMPORT) && this.peekAhead().isType(Token.LPAREN)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Import Call Not New Expression`));\n\t\t} else if (this.peek().isType(Token.PERIOD)) {\n\t\t\tresult = this.parseNewTargetExpression(start);\n\t\t\treturn this.parseMemberExpressionContinuation(result);\n\t\t} else {\n\t\t\tresult = this.parseMemberExpression();\n\t\t\tif (this.factory.isSuper(result)) {\n\t\t\t\t// new super() is never allowed\n\t\t\t\tthrow new SyntaxError(this.errorMessage(`Unexpected Super, new super() is never allowed`));\n\t\t\t}\n\t\t}\n\t\tif (this.peek().isType(Token.LPAREN)) {\n\t\t\t// NewExpression with arguments.\n\t\t\tconst args = this.parseArguments();\n\t\t\tresult = this.factory.createNewExpression(result, args, this.createRange(start));\n\t\t\t// The expression can still continue with . or [ after the arguments.\n\t\t\treturn this.parseMemberExpressionContinuation(result);\n\t\t}\n\n\t\tif (this.peek().isType(Token.QUESTION_PERIOD)) {\n\t\t\tthrow new SyntaxError(this.errorMessage(`Optional Chaining with New not allowed, new x?.y()`));\n\t\t}\n\t\treturn this.factory.createNewExpression(result, undefined, this.createRange(start));\n\t}\n\tprotected parseArguments(maybeArrow?: ParsingArrowHeadFlag): ExpressionNode[] {\n\t\t// Arguments ::\n\t\t// '(' (AssignmentExpression)*[','] ')'\n\n\t\tthis.consume(Token.LPAREN);\n\t\tconst args: ExpressionNode[] = [];\n\t\twhile (this.peek().isNotType(Token.RPAREN)) {\n\t\t\tconst range = this.createStartPosition();\n\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\tthis.setAcceptIN(true);\n\t\t\tlet argument: ExpressionNode = this.parseAssignmentExpressionCoverGrammar();\n\t\t\tif (ParsingArrowHeadFlag.MaybeArrowHead === maybeArrow) {\n\t\t\t\tif (isSpread) {\n\t\t\t\t\tif (this.factory.isAssignmentExpression(argument)) {\n\t\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\t\tthrow new Error(this.errorMessage(` Rest parameter may not have a default initializer'`));\n\t\t\t\t\t}\n\t\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`parsing '...spread,arg =>'`));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isSpread) {\n\t\t\t\tthis.updateRangeEnd(range);\n\t\t\t\targument = this.factory.createSpreadElement(argument, range);\n\t\t\t}\n\t\t\targs.push(argument);\n\t\t\tthis.restoreAcceptIN();\n\t\t\tif (!this.check(Token.COMMA)) break;\n\t\t}\n\t\tif (!this.check(Token.RPAREN)) {\n\t\t\tthrow new Error(this.errorMessage(`parsing arguments call, expecting ')'`));\n\t\t}\n\t\treturn args;\n\t}\n\tprotected parseAssignmentExpressionCoverGrammar(): ExpressionNode {\n\t\t// AssignmentExpression ::\n\t\t// ConditionalExpression\n\t\t// ArrowFunction\n\t\t// YieldExpression\n\t\t// LeftHandSideExpression AssignmentOperator AssignmentExpression\n\n\t\tconst range = this.createStartPosition();\n\t\tif (this.peek().isType(Token.YIELD) && isGeneratorFunction(this.functionKind)) {\n\t\t\treturn this.parseYieldExpression();\n\t\t}\n\t\tlet expression: ExpressionNode = this.parseConditionalExpression();\n\t\tconst op = this.peek().token;\n\t\tif (!Token.isArrowOrAssignmentOp(op)) {\n\t\t\tthis.clearParenthesized(expression);\n\t\t\treturn expression;\n\t\t};\n\t\t// Arrow functions.\n\t\tif (op === Token.ARROW) {\n\t\t\tif (!this.factory.isIdentifier(expression) && !this.isParenthesized(expression)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Malformed Arrow Fun Param List`));\n\t\t\t}\n\t\t\tconst kind = FunctionKind.NormalFunction;\n\t\t\tthis.setFunctionKind(kind);\n\t\t\tlet arrow: ExpressionNode;\n\t\t\tif (this.factory.isSequenceExpression(expression)) {\n\t\t\t\tarrow = this.parseArrowFunctionLiteral(expression.getExpressions() as DeclarationExpression[], FunctionKind.NormalFunction, range);\n\t\t\t} else if (this.factory.isGroupingExpression(expression)) {\n\t\t\t\tarrow = this.parseArrowFunctionLiteral([expression.getNode() as DeclarationExpression], FunctionKind.NormalFunction, range);\n\t\t\t} else {\n\t\t\t\tthis.clearParenthesized(expression);\n\t\t\t\tarrow = this.parseArrowFunctionLiteral([expression as DeclarationExpression], FunctionKind.NormalFunction, range);\n\t\t\t}\n\t\t\tthis.restoreFunctionKind();\n\t\t\treturn arrow;\n\t\t}\n\t\tif (this.isAssignableIdentifier(expression)) {\n\t\t} else if (this.factory.isPropertyOrMemberExpression(expression)) {\n\t\t} else if (this.factory.canBePattern(expression) && Token.isAssignment(op)) {\n\t\t\t// Destructuring assignment.\n\t\t\texpression = this.factory.isObjectExpression(expression)\n\t\t\t\t? this.factory.createObjectBindingPattern(expression.getProperties(), expression.range)\n\t\t\t\t: this.factory.createArrayBindingPattern(expression.getElements() as DeclarationExpression[], expression.range);\n\t\t} else {\n\t\t\tif (!this.isValidReferenceExpression(expression)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Invalid Reference Expression`));\n\t\t\t}\n\t\t\tif (Token.isLogicalAssignmentOp(op)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Invalid Lhs In Assignment`));\n\t\t\t}\n\t\t}\n\n\t\tthis.consume(op);\n\t\t// const opPosition = this.position();\n\t\tconst right: ExpressionNode = this.parseAssignmentExpression();\n\t\t// Anonymous function name inference applies to =, ||=, &&=, and ??=.\n\n\t\tif (!Token.isAssignment(op)) {\n\t\t\tthrow new Error(this.errorMessage(`Invalid Destructuring Target`));\n\t\t}\n\t\tthis.updateRangeEnd(range)\n\t\treturn this.factory.createAssignment(op.getName() as AssignmentOperator, expression, right, range);\n\t}\n\tprotected parseAssignmentExpression(): ExpressionNode {\n\t\treturn this.parseAssignmentExpressionCoverGrammar();\n\t}\n\tprivate checkParamType(node: DeclarationExpression) {\n\t\tif (this.factory.isArrayExpression(node)) {\n\t\t\treturn this.factory.createArrayBindingPattern(node.getElements() as DeclarationExpression[], node.range);\n\t\t} else if (this.factory.isObjectExpression(node)) {\n\t\t\treturn this.factory.createObjectBindingPattern(node.getProperties(), node.range);\n\t\t}\n\t\telse if (this.factory.isSpreadElement(node)) {\n\t\t\tlet arg = node.getArgument() as DeclarationExpression;\n\t\t\t// let param = arg;\n\t\t\tif (this.factory.isArrayExpression(arg)) {\n\t\t\t\targ = this.factory.createArrayBindingPattern(arg.getElements() as DeclarationExpression[], arg.range);\n\t\t\t} else if (this.factory.isObjectExpression(arg)) {\n\t\t\t\targ = this.factory.createObjectBindingPattern(arg.getProperties(), arg.range);\n\t\t\t}\n\t\t\treturn this.factory.createRestElement(arg, node.range);\n\t\t}\n\t\treturn node;\n\t}\n\tprotected parseArrowFunctionLiteral(parameters: DeclarationExpression[], kind: FunctionKind, range: Range): ExpressionNode {\n\t\tparameters = parameters.map(node => this.checkParamType(node));\n\t\tif (this.peek().isNotType(Token.ARROW)) {\n\t\t\tthrow new SyntaxError(this.errorMessage('SyntaxError Expecting Arrow Token'));\n\t\t}\n\t\tif (this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token \"\\n\" a line terminator after arrow token\"'));\n\t\t}\n\t\tlet body: ExpressionNode[] | ExpressionNode;\n\t\tlet has_braces = true;\n\t\tthis.consume(Token.ARROW);\n\t\tif (this.peek().isType(Token.LBRACE)) {\n\t\t\tthis.consume(Token.LBRACE);\n\t\t\tthis.setStatue(true, kind);\n\t\t\tbody = this.parseFunctionBody(kind, FunctionBodyType.BLOCK, FunctionSyntaxKind.AnonymousExpression);\n\t\t\tthis.restoreStatue();\n\t\t} else {\n\t\t\thas_braces = false;\n\t\t\tbody = this.parseFunctionBody(kind, FunctionBodyType.EXPRESSION, FunctionSyntaxKind.AnonymousExpression);\n\t\t}\n\t\tthis.updateRangeEnd(range);\n\t\treturn this.factory.createArrowFunction(parameters, body, !has_braces, isAsyncFunction(kind), range);\n\t}\n\tprotected parseRegExpLiteral(): ExpressionNode {\n\t\tif (!this.scanner.scanRegExpPattern()) {\n\t\t\tthrow new Error('Unterminated RegExp');\n\t\t}\n\t\treturn this.scanner.currentToken().getValue();\n\t}\n\tprotected parseArrayLiteral(isPattern: boolean) {\n\n\t\t// ArrayLiteral ::\n\t\t// '[' Expression? (',' Expression?)* ']'\n\n\t\tconst start = this.consume(Token.LBRACK);\n\t\tlet first_spread_index = -1;\n\t\tconst values: (ExpressionNode | null)[] = [];\n\n\t\twhile (!this.check(Token.RBRACK)) {\n\t\t\tlet elem: ExpressionNode | null;\n\t\t\tconst peek = this.peek();\n\t\t\tif (peek.isType(Token.COMMA)) {\n\t\t\t\telem = null;\n\t\t\t} else if (this.check(Token.ELLIPSIS)) {\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst argument = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\telem = this.factory.createSpreadElement(argument, this.createRange(peek));\n\t\t\t\tif (first_spread_index < 0) {\n\t\t\t\t\tfirst_spread_index = values.length;\n\t\t\t\t}\n\t\t\t\tif (this.factory.isAssignmentExpression(argument) && isPattern) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Invalid Destructuring Target'));\n\t\t\t\t}\n\t\t\t\tif (this.peek().isType(Token.COMMA)) {\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('Element After Rest'));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\telem = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t}\n\t\t\tvalues.push(elem);\n\t\t\tif (this.peek().isNotType(Token.RBRACK)) {\n\t\t\t\tthis.expect(Token.COMMA);\n\t\t\t}\n\t\t}\n\t\tconst range = this.createRange(start);\n\t\tif (isPattern) {\n\t\t\treturn this.factory.createArrayBindingPattern(values as DeclarationExpression[], range);\n\t\t}\n\t\treturn this.factory.createArrayLiteralExpression(values, range);\n\t}\n\tprotected parsePossibleDestructuringSubPattern(): ExpressionNode {\n\t\treturn this.parseAssignmentExpressionCoverGrammar();\n\t}\n\tprotected parseObjectLiteral(isPattern: boolean): ExpressionNode {\n\t\t// ObjectLiteral ::\n\t\t// '{' (PropertyDefinition (',' PropertyDefinition)* ','? )? '}'\n\n\t\tconst start = this.consume(Token.LBRACE);\n\t\tconst properties: ExpressionNode[] = [];\n\t\twhile (!this.check(Token.RBRACE)) {\n\t\t\tconst property: ExpressionNode = this.parseObjectPropertyDefinition(isPattern);\n\t\t\tproperties.push(property);\n\t\t\tif (this.peek().isNotType(Token.RBRACE)) {\n\t\t\t\tthis.expect(Token.COMMA);\n\t\t\t}\n\t\t}\n\t\tconst range = this.createRange(start)\n\t\tif (isPattern) {\n\t\t\treturn this.factory.createObjectBindingPattern(properties as (Property | RestElement)[], range);\n\t\t}\n\t\treturn this.factory.createObjectLiteralExpression(properties as Property[], range);\n\t}\n\tprotected parseObjectPropertyDefinition(isPattern: boolean): ExpressionNode {\n\t\tconst propInfo = new PropertyKindInfo();\n\t\tconst nameExpression = this.parseProperty(propInfo);\n\n\t\tswitch (propInfo.kind) {\n\t\t\tcase PropertyKind.Spread:\n\t\t\t\tlet value: SpreadElement | RestElement = nameExpression as SpreadElement;\n\t\t\t\tif (isPattern) {\n\t\t\t\t\tvalue = this.factory.createRestElement(value.getArgument() as DeclarationExpression, value.range);\n\t\t\t\t}\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tvalue.getArgument(),\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\n\t\t\tcase PropertyKind.Value: {\n\t\t\t\tthis.consume(Token.COLON);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tconst value = this.parsePossibleDestructuringSubPattern();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase PropertyKind.Assign:\n\t\t\tcase PropertyKind.ShorthandOrClassField:\n\t\t\tcase PropertyKind.Shorthand: {\n\t\t\t\t// PropertyDefinition\n\t\t\t\t// IdentifierReference\n\t\t\t\t// CoverInitializedName\n\t\t\t\t//\n\t\t\t\t// CoverInitializedName\n\t\t\t\t// IdentifierReference Initializer?\n\n\t\t\t\tconst lhs = this.factory.createIdentifier(propInfo.name, this.createRange(propInfo.rangeStart));\n\t\t\t\tif (!this.isAssignableIdentifier(lhs)) {\n\t\t\t\t\tthrow new Error(this.errorMessage('Strict Eval Arguments'));\n\t\t\t\t}\n\t\t\t\tlet value: ExpressionNode;\n\t\t\t\tif (this.peek().isType(Token.ASSIGN)) {\n\t\t\t\t\tthis.consume(Token.ASSIGN);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tconst rhs = this.parseAssignmentExpression();\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\tvalue = this.factory.createAssignment(\n\t\t\t\t\t\tToken.ASSIGN.getName() as AssignmentOperator,\n\t\t\t\t\t\tlhs,\n\t\t\t\t\t\trhs,\n\t\t\t\t\t\tthis.createRange(propInfo.rangeStart)\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = lhs;\n\t\t\t\t}\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.kind !== PropertyKind.Assign,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase PropertyKind.Method: {\n\t\t\t\t// MethodDefinition\n\t\t\t\t// PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\t\t\t\t// '*' PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n\n\t\t\t\tconst kind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\t\t\t\tconst value = this.parseFunctionLiteral(\n\t\t\t\t\tkind,\n\t\t\t\t\tFunctionSyntaxKind.AccessorOrMethod,\n\t\t\t\t\tpropInfo.name ? this.factory.createIdentifier(propInfo.name,) : undefined,\n\t\t\t\t\tpropInfo.rangeStart\n\t\t\t\t);\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\t'init',\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase PropertyKind.AccessorGetter:\n\t\t\tcase PropertyKind.AccessorSetter: {\n\t\t\t\tconst isGet = propInfo.kind == PropertyKind.AccessorGetter;\n\t\t\t\tconst kind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\t\t\t\tconst value = this.parseFunctionLiteral(\n\t\t\t\t\tkind,\n\t\t\t\t\tFunctionSyntaxKind.AccessorOrMethod,\n\t\t\t\t\tpropInfo.name ? this.factory.createIdentifier(propInfo.name, this.createRange(propInfo.rangeStart)) : undefined,\n\t\t\t\t\tpropInfo.rangeStart\n\t\t\t\t);\n\t\t\t\tconst range = this.createRange(propInfo.rangeStart);\n\t\t\t\treturn this.factory.createPropertyDeclaration(\n\t\t\t\t\tnameExpression,\n\t\t\t\t\tvalue,\n\t\t\t\t\tisGet ? 'get' : 'set',\n\t\t\t\t\tfalse,\n\t\t\t\t\tfalse,\n\t\t\t\t\tpropInfo.isComputedName,\n\t\t\t\t\trange\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase PropertyKind.ClassField:\n\t\t\tcase PropertyKind.NotSet:\n\t\t\t\treturn this.factory.createNull(this.createRange(propInfo.rangeStart));\n\t\t}\n\t}\n\tprotected parseProperty(propInfo: PropertyKindInfo): ExpressionNode {\n\t\tlet nextToken = this.peek();\n\t\tpropInfo.rangeStart = nextToken;\n\t\tif (this.check(Token.ASYNC)) {\n\t\t\t// async\n\t\t\tnextToken = this.peek();\n\t\t\tif (nextToken.isNotType(Token.MUL)\n\t\t\t\t&& propInfo.parsePropertyKindFromToken(nextToken.token)\n\t\t\t\t|| this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\t\treturn this.factory.createIdentifier('async', this.createRange(propInfo.rangeStart));\n\t\t\t}\n\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\tpropInfo.funcFlag = ParseFunctionFlag.IsAsync;\n\t\t}\n\n\t\tnextToken = this.peek();\n\t\tif (this.check(Token.MUL)) {\n\t\t\t// async*\n\t\t\tpropInfo.kind = PropertyKind.Method;\n\t\t\tpropInfo.funcFlag = ParseFunctionFlag.IsGenerator;\n\t\t}\n\n\t\tnextToken = this.peek();\n\t\tif (propInfo.kind == PropertyKind.NotSet && nextToken.isType(Token.GET) || nextToken.isType(Token.SET)) {\n\t\t\tconst token = this.next();\n\t\t\tif (propInfo.parsePropertyKindFromToken(this.peek().token)) {\n\t\t\t\treturn this.factory.createIdentifier(nextToken.isType(Token.GET) ? 'get' : 'set', this.createRange(propInfo.rangeStart));\n\t\t\t}\n\t\t\tif (token.isType(Token.GET)) {\n\t\t\t\tpropInfo.kind = PropertyKind.AccessorGetter;\n\t\t\t} else if (token.isType(Token.SET)) {\n\t\t\t\tpropInfo.kind = PropertyKind.AccessorSetter;\n\t\t\t}\n\t\t\tnextToken = this.peek();\n\t\t}\n\t\tlet propertyName: ExpressionNode;\n\t\tswitch (nextToken.token) {\n\t\t\tcase Token.PRIVATE_NAME:\n\t\t\t\tpropInfo.isPrivate = true;\n\t\t\t\tthis.consume(Token.PRIVATE_NAME);\n\t\t\t\tif (propInfo.kind == PropertyKind.NotSet) {\n\t\t\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t\t\t}\n\t\t\t\tpropertyName = this.getIdentifier();\n\t\t\t\tpropInfo.name = (propertyName as PrivateIdentifier).getName() as string;\n\t\t\t\tif (propInfo.position == PropertyPosition.ObjectLiteral) {\n\t\t\t\t\tthrow new TypeError(this.errorMessage('UnexpectedToken PRIVATE_NAME'));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase Token.STRING:\n\t\t\tcase Token.NUMBER:\n\t\t\tcase Token.BIGINT:\n\t\t\t\t// \"12\" -> 12\n\t\t\t\t// 12.3 -> \"12.3\"\n\t\t\t\t// 12.30 -> \"12.3\"\n\t\t\t\tthis.consume(nextToken.token);\n\t\t\t\tpropertyName = nextToken.getValue();\n\t\t\t\tpropInfo.name = (propertyName as Literal<string>).getValue();\n\t\t\t\tbreak;\n\t\t\tcase Token.LBRACK:\n\t\t\t\t// [Symbol.iterator]\n\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\tpropertyName = this.parseAssignmentExpression();\n\t\t\t\tthis.expect(Token.RBRACK);\n\t\t\t\tif (propInfo.kind === PropertyKind.NotSet) {\n\t\t\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t\t\t}\n\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\treturn propertyName;\n\t\t\tcase Token.ELLIPSIS:\n\t\t\t\tif (propInfo.kind == PropertyKind.NotSet) {\n\t\t\t\t\tthis.consume(Token.ELLIPSIS);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tpropertyName = this.parsePossibleDestructuringSubPattern();\n\t\t\t\t\tpropInfo.kind = PropertyKind.Spread;\n\n\t\t\t\t\tif (!this.isValidReferenceExpression(propertyName)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage('Invalid Rest Binding/Assignment Pattern'));\n\t\t\t\t\t}\n\t\t\t\t\tif (this.peek().isNotType(Token.RBRACE)) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage('Element After Rest'));\n\t\t\t\t\t}\n\t\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\treturn this.factory.createSpreadElement(propertyName, this.createRange(nextToken));\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tpropertyName = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\tpropInfo.name = propertyName.toString();\n\t\t\t\tbreak;\n\t\t}\n\t\tif (propInfo.kind === PropertyKind.NotSet) {\n\t\t\tpropInfo.parsePropertyKindFromToken(this.peek().token);\n\t\t}\n\t\treturn propertyName;\n\t}\n\tprotected parseMemberExpressionContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tif (!Token.isMember(this.peek().token)) return expression;\n\t\treturn this.doParseMemberExpressionContinuation(expression);\n\t}\n\tprotected doParseMemberExpressionContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tif (!Token.isMember(this.peek().token)) {\n\t\t\tthrow new Error(this.errorMessage(`Parsing member expression`));\n\t\t}\n\t\t// Parses this part of MemberExpression:\n\t\t// ('[' Expression ']' | '.' Identifier | TemplateLiteral)*\n\t\tdo {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.LBRACK: {\n\t\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tconst index = this.parseExpressionCoverGrammar();\n\t\t\t\t\texpression = this.factory.createPropertyAssignment(expression, index, true, false, this.createRange(expression));\n\t\t\t\t\tthis.expect(Token.RBRACK);\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase Token.PERIOD: {\n\t\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\t\tconst key: ExpressionNode = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\texpression = this.factory.createPropertyAssignment(expression, key, false, false, this.createRange(expression));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase Token.TEMPLATE_SPAN:\n\t\t\t\tcase Token.TEMPLATE_TAIL: {\n\t\t\t\t\texpression = this.parseTemplateLiteral(expression);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new SyntaxError(this.errorMessage('unknown token position'));\n\t\t\t}\n\t\t} while (Token.isMember(this.peek().token));\n\t\treturn expression;\n\t}\n\tprotected parsePropertyOrPrivatePropertyName(): ExpressionNode {\n\t\tconst next = this.next();\n\t\tif (next.isType(Token.IDENTIFIER) || next.isType(Token.PRIVATE_NAME)) {\n\t\t\treturn next.getValue();\n\t\t}\n\t\t// check keyword as identifier\n\t\tif (Token.isPropertyName(next.token) && next.isNotType(Token.EOS)) {\n\t\t\treturn this.factory.createIdentifier(next.token.getName(), next.range);\n\t\t}\n\t\tthrow new SyntaxError(this.errorMessage(`Parsing property expression: Unexpected Token`));\n\t}\n\tprotected parsePipelineExpression(expression: ExpressionNode): ExpressionNode {\n\t\t// ConditionalExpression ::\n\t\t// LogicalExpression\n\t\t// expression '|>' function [':' expression [':'? expression] ] *\n\t\t// expression '|>' function '('[expression ','?]* ')'\n\t\t//\n\t\t// expression '|>' function ':' expression [':' expression | '?']*]\n\t\t// expression '|>' function '(' expression [',' expression | '?']* ')'\n\t\t//\n\t\t// [~Await]PipelineExpression[?In, ?Yield, ?Await] |> LogicalORExpression[?In, ?Yield, ?Await]\n\t\t// [+Await]PipelineExpression[? In, ? Yield, ? Await] |> [lookahead ∉ { await }]LogicalORExpression[? In, ? Yield, ? Await]\n\n\t\tlet token: Token;\n\t\twhile (Token.isPipelineOperator(token = this.peek().token)) {\n\t\t\tthis.consume(token);\n\t\t\texpression = this.parsePipelineBody(expression);\n\t\t}\n\t\treturn expression;\n\t}\n\tprotected parsePipelineBody(lhs: ExpressionNode): ExpressionNode {\n\t\tlet body: ExpressionNode | undefined;\n\t\tlet token = this.peek();\n\t\t// parse function\n\t\tswitch (token.token) {\n\t\t\tcase Token.FUNCTION:\n\t\t\t\tbody = this.parseFunctionExpression();\n\t\t\t\tbreak;\n\t\t\tcase Token.ASYNC:\n\t\t\t\tif (this.peekAhead().isType(Token.FUNCTION) && !this.scanner.hasLineTerminatorAfterNext()) {\n\t\t\t\t\tthis.consume(Token.ASYNC);\n\t\t\t\t\tbody = this.parseAsyncFunctionLiteral();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tif (body) {\n\t\t\treturn this.factory.createPipelineExpression(lhs, body, undefined, this.createRange(lhs));\n\t\t}\n\t\tif (token.isType(Token.LPAREN)) {\n\t\t\t// parse arrow function\n\t\t\t// x |> ( y => y+1 )\n\t\t\tbody = this.parsePrimaryExpression();\n\t\t\treturn this.factory.createPipelineExpression(lhs, body, undefined, this.createRange(lhs));\n\t\t}\n\n\t\t// parse angular-like and f# and partial operator syntax\n\t\tconst func = this.parseMemberExpression(); //this.parseLogicalExpression();\n\t\tlet args: (ExpressionNode | '?' | '...?')[] = [];\n\t\tswitch (this.peek().token) {\n\t\t\tcase Token.COLON:\n\t\t\t\t// support angular pipeline syntax\n\t\t\t\tdo {\n\t\t\t\t\tthis.consume(Token.COLON);\n\t\t\t\t\tconst peek = this.peek();\n\t\t\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\t\t\tif (this.peek().isType(Token.CONDITIONAL)) {\n\t\t\t\t\t\tthis.consume(Token.CONDITIONAL);\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push('...?');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push('?');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst arg = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push(this.factory.createSpreadElement(arg, this.createRange(peek)));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} while (this.peek().isType(Token.COLON));\n\t\t\t\tbreak;\n\t\t\tcase Token.LPAREN:\n\t\t\t\t// es2022 syntax, F# & partial operator\n\t\t\t\tthis.consume(Token.LPAREN);\n\t\t\t\tlet indexed = false;\n\t\t\t\twhile (this.peek().isNotType(Token.RPAREN)) {\n\t\t\t\t\tconst peek = this.peek();\n\t\t\t\t\tconst isSpread = this.check(Token.ELLIPSIS);\n\t\t\t\t\tif (this.peek().isType(Token.CONDITIONAL)) {\n\t\t\t\t\t\tthis.consume(Token.CONDITIONAL);\n\t\t\t\t\t\tindexed = true;\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push('...?');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push('?');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst arg = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\t\tif (isSpread) {\n\t\t\t\t\t\t\targs.push(this.factory.createSpreadElement(arg, this.createRange(peek)));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\targs.push(arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.check(Token.COMMA);\n\t\t\t\t}\n\t\t\t\tthis.expect(Token.RPAREN);\n\t\t\t\t// should be indexed, has partial operator\n\t\t\t\tif (!indexed) {\n\t\t\t\t\t// z |> method(x, y) === method(x, y)(z)\n\t\t\t\t\tbody = this.factory.createCallExpression(func, args as ExpressionNode[], false, this.createRange(func));\n\t\t\t\t\treturn this.factory.createPipelineExpression(lhs, body, undefined, this.createRange(lhs));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn this.factory.createPipelineExpression(lhs, func, args, this.createRange(lhs));\n\t}\n\tprotected parseConditionalExpression(): ExpressionNode {\n\t\t// ConditionalExpression ::\n\t\t// LogicalExpression\n\t\t// LogicalExpression '?' AssignmentExpression ':' AssignmentExpression\n\t\t//\n\n\t\tlet expression: ExpressionNode = this.parseLogicalExpression();\n\t\texpression = this.parsePipelineExpression(expression);\n\t\treturn this.peek().isType(Token.CONDITIONAL) ? this.parseConditionalContinuation(expression) : expression;\n\t}\n\tprotected parseLogicalExpression(): ExpressionNode {\n\t\t// LogicalExpression ::\n\t\t// LogicalORExpression\n\t\t// CoalesceExpression\n\n\t\t// Both LogicalORExpression and CoalesceExpression start with BitwiseOR.\n\t\t// Parse for binary expressions >= 6 (BitwiseOR);\n\n\t\tlet expression: ExpressionNode = this.parseBinaryExpression(6);\n\t\tconst peek = this.peek();\n\t\tif (peek.isType(Token.AND) || peek.isType(Token.OR)) {\n\t\t\t// LogicalORExpression, pickup parsing where we left off.\n\t\t\tconst precedence = Token.precedence(peek.token, this.acceptIN);\n\t\t\texpression = this.parseBinaryContinuation(expression, 4, precedence);\n\t\t} else if (peek.isType(Token.NULLISH)) {\n\t\t\texpression = this.parseNullishExpression(expression);\n\t\t}\n\t\treturn expression;\n\t}\n\tprotected parseBinaryContinuation(x: ExpressionNode, prec: number, prec1: number): ExpressionNode {\n\t\tdo {\n\t\t\t// prec1 >= 4\n\t\t\twhile (Token.precedence(this.peek().token, this.acceptIN) === prec1) {\n\t\t\t\tlet y: ExpressionNode;\n\t\t\t\tlet op = this.next();\n\n\t\t\t\tconst isRightAssociative = op.isType(Token.EXP);\n\t\t\t\tconst nextPrecedence = isRightAssociative ? prec1 : prec1 + 1;\n\t\t\t\ty = this.parseBinaryExpression(nextPrecedence);\n\n\n\t\t\t\t// For now we distinguish between comparisons and other binary\n\t\t\t\t// operations. (We could combine the two and get rid of this\n\t\t\t\t// code and AST node eventually.)\n\n\t\t\t\tif (Token.isCompare(op.token)) {\n\t\t\t\t\t// We have a comparison.\n\t\t\t\t\tlet cmp = op.token;\n\t\t\t\t\tswitch (op.token) {\n\t\t\t\t\t\tcase Token.NE: cmp = Token.EQ; break;\n\t\t\t\t\t\tcase Token.NE_STRICT: cmp = Token.EQ_STRICT; break;\n\t\t\t\t\t\tdefault: break;\n\t\t\t\t\t}\n\t\t\t\t\tx = this.factory.createInfixExpression(cmp.getName() as AssignmentOperator | LogicalOperator | BinaryOperator, x, y, this.createRange(x));\n\t\t\t\t\tif (op.isNotType(cmp)) {\n\t\t\t\t\t\t// The comparison was negated - add a NOT.\n\t\t\t\t\t\tx = this.factory.createUnaryExpression(Token.NOT.getName() as UnaryOperator, x, this.createRange(op));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tx = this.factory.createInfixExpression(op.token.getName() as AssignmentOperator | LogicalOperator | BinaryOperator, x, y, this.createRange(x));\n\t\t\t\t}\n\t\t\t}\n\t\t\t--prec1;\n\t\t} while (prec1 >= prec);\n\n\t\treturn x;\n\t}\n\t// Precedence >= 4\n\tprotected parseBinaryExpression(precedence: number): ExpressionNode {\n\t\t// \"#foo in ShiftExpression\" needs to be parsed separately, since private\n\t\t// identifiers are not valid PrimaryExpressions.\n\t\tif (this.peek().isType(Token.PRIVATE_NAME)) {\n\t\t\tconst x = this.parsePropertyOrPrivatePropertyName();\n\t\t\tconst precedence1 = Token.precedence(this.peek().token, this.acceptIN);\n\t\t\tif (this.peek().isNotType(Token.IN) || precedence1 < precedence) {\n\t\t\t\tthrow new SyntaxError(this.errorMessage('Unexpected Token Token.PRIVATE_NAME \"#name\"'));\n\t\t\t}\n\t\t\treturn this.parseBinaryContinuation(x, precedence, precedence1);\n\t\t}\n\t\tconst x: ExpressionNode = this.parseUnaryExpression();\n\t\tconst precedence1 = Token.precedence(this.peek().token, this.acceptIN);\n\t\tif (precedence1 >= precedence) {\n\t\t\treturn this.parseBinaryContinuation(x, precedence, precedence1);\n\t\t}\n\t\treturn x;\n\t}\n\tprotected parseUnaryExpression(): ExpressionNode {\n\t\t// UnaryExpression ::\n\t\t// PostfixExpression\n\t\t// 'delete' UnaryExpression\n\t\t// 'void' UnaryExpression\n\t\t// 'typeof' UnaryExpression\n\t\t// '++' UnaryExpression\n\t\t// '--' UnaryExpression\n\t\t// '+' UnaryExpression\n\t\t// '-' UnaryExpression\n\t\t// '~' UnaryExpression\n\t\t// '!' UnaryExpression\n\t\t// [+Await] AwaitExpression[?Yield]\n\n\t\tconst op = this.peek();\n\t\tif (Token.isUnaryOrCount(op.token)) {\n\t\t\treturn this.parseUnaryOrPrefixExpression();\n\t\t}\n\t\tif (op.isType(Token.AWAIT) && this.isAwaitAllowed()) {\n\t\t\treturn this.parseAwaitExpression();\n\t\t}\n\t\treturn this.parsePostfixExpression();\n\t}\n\tprotected parseUnaryOrPrefixExpression(): ExpressionNode {\n\t\tconst op = this.next();\n\t\tconst expression = this.parseUnaryExpression();\n\t\tif (Token.isUnary(op.token)) {\n\t\t\tif (op.isType(Token.DELETE)) {\n\t\t\t\tif (this.factory.isIdentifier(expression) && isStrict(this.languageMode)) {\n\t\t\t\t\t// \"delete identifier\" is a syntax error in strict mode.\n\t\t\t\t\tthrow new Error(this.errorMessage(`\"delete identifier\" is a syntax error in strict mode`));\n\t\t\t\t}\n\t\t\t\tif (this.factory.isMemberExpression(expression) && expression.getProperty().toString().startsWith('#')) {\n\t\t\t\t\tthrow new Error(this.errorMessage(`\"Delete Private Field\" is a syntax error`));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.peek().isType(Token.EXP)) {\n\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token Unary Exponentiation`));\n\t\t\t}\n\t\t}\n\n\t\tif (Token.isCount(op.token) || Token.isUnary(op.token)) {\n\t\t\t// Allow the parser to rewrite the expression.\n\t\t\treturn this.factory.createUnaryExpression(op.token.getName() as UpdateOperator | UnaryOperator, expression, op.range);\n\t\t}\n\t\tthrow new Error(this.errorMessage(`while rewrite unary operation`));\n\t}\n\tprotected parsePostfixExpression(): ExpressionNode {\n\t\t// PostfixExpression ::\n\t\t// LeftHandSideExpression ('++' | '--')?\n\n\t\tconst expression: ExpressionNode = this.parseLeftHandSideExpression();\n\t\tif (!Token.isCount(this.peek().token) || this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\treturn expression;\n\t\t}\n\t\treturn this.parsePostfixContinuation(expression);\n\t}\n\tprotected parsePostfixContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tif (!this.isValidReferenceExpression(expression)) {\n\t\t\tthrow new Error(this.errorMessage(`Invalid LHS In Postfix Op.`));\n\t\t}\n\t\tconst op = this.next();\n\t\treturn this.factory.createUpdateExpression(op.token.getName() as UpdateOperator, expression, false, this.createRange(expression));\n\t}\n\tprotected parseLeftHandSideExpression(): ExpressionNode {\n\t\t// LeftHandSideExpression ::\n\t\t// (NewExpression | MemberExpression) ...\n\t\tconst result = this.parseMemberExpression();\n\t\tif (!Token.isPropertyOrCall(this.peek().token)) return result;\n\t\treturn this.parseLeftHandSideContinuation(result);\n\t}\n\tprotected parseLeftHandSideContinuation(result: ExpressionNode): ExpressionNode {\n\t\tif (this.peek().isType(Token.LPAREN)\n\t\t\t&& this.factory.isIdentifier(result)\n\t\t\t&& this.scanner.currentToken().isType(Token.ASYNC)\n\t\t\t&& !this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tconst args = this.parseArguments(ParsingArrowHeadFlag.AsyncArrowFunction);\n\t\t\tif (this.peek().isType(Token.ARROW)) {\n\t\t\t\t// async () => ...\n\t\t\t\tif (!args.length) return new EmptyStatement;\n\t\t\t\t// async ( Arguments ) => ...\n\t\t\t\treturn this.expressionListToExpression(args);\n\t\t\t}\n\t\t\tresult = this.factory.createCallExpression(result, args, false, this.createRange(result));\n\t\t\tif (!Token.isPropertyOrCall(this.peek().token)) return result;\n\t\t}\n\n\t\tlet optionalChaining = false;\n\t\tlet isOptional = false;\n\t\tdo {\n\t\t\tswitch (this.peek().token) {\n\t\t\t\t// chain\n\t\t\t\tcase Token.QUESTION_PERIOD: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Failure Expression`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.QUESTION_PERIOD);\n\t\t\t\t\tisOptional = true;\n\t\t\t\t\toptionalChaining = true;\n\t\t\t\t\tif (Token.isPropertyOrCall(this.peek().token)) continue;\n\t\t\t\t\tconst key = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\tresult = this.factory.createPropertyAssignment(result, key, false, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* Property */\n\t\t\t\tcase Token.LBRACK: {\n\t\t\t\t\tthis.consume(Token.LBRACK);\n\t\t\t\t\tthis.setAcceptIN(true);\n\t\t\t\t\tconst index = this.parseExpressionCoverGrammar();\n\t\t\t\t\tthis.restoreAcceptIN();\n\t\t\t\t\tresult = this.factory.createPropertyAssignment(result, index, true, isOptional, this.createRange(result));\n\t\t\t\t\tthis.expect(Token.RBRACK);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* Property */\n\t\t\t\tcase Token.PERIOD: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token:${this.position()}`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.PERIOD);\n\t\t\t\t\tconst key = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\tresult = this.factory.createPropertyAssignment(result, key, false, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* Call */\n\t\t\t\tcase Token.LPAREN: {\n\t\t\t\t\tconst args = this.parseArguments();\n\t\t\t\t\tresult = this.factory.createCallExpression(result, args, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* bind call */\n\t\t\t\tcase Token.BIND: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Unexpected Token:${this.position()}`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.BIND);\n\t\t\t\t\tconst key = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\tresult = this.factory.createBindExpression(result, key, false, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t/* chain bind call */\n\t\t\t\tcase Token.QUESTION_BIND: {\n\t\t\t\t\tif (isOptional) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Failure Expression`));\n\t\t\t\t\t}\n\t\t\t\t\tthis.consume(Token.QUESTION_BIND);\n\t\t\t\t\tisOptional = true;\n\t\t\t\t\toptionalChaining = true;\n\t\t\t\t\tconst key = this.parsePropertyOrPrivatePropertyName();\n\t\t\t\t\tresult = this.factory.createBindExpression(result, key, true, isOptional, this.createRange(result));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\t// Template literals in/after an Optional Chain not supported:\n\t\t\t\t\tif (optionalChaining) {\n\t\t\t\t\t\tthrow new Error(this.errorMessage(`Optional Chaining No Template support`));\n\t\t\t\t\t}\n\t\t\t\t\t/* Tagged Template */\n\t\t\t\t\tresult = this.parseTemplateLiteral(result);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (isOptional) {\n\t\t\t\tisOptional = false;\n\t\t\t}\n\t\t} while (Token.isPropertyOrCall(this.peek().token));\n\t\tif (optionalChaining) {\n\t\t\tresult = this.factory.createChainExpression(result, this.createRange(result));\n\t\t}\n\t\treturn result;\n\t}\n\tprotected parseAwaitExpression(): ExpressionNode {\n\t\tconst start = this.consume(Token.AWAIT);\n\t\tconst value = this.parseUnaryExpression();\n\t\tif (this.peek().isType(Token.EXP)) {\n\t\t\tthrow new Error(this.scanner.createError(`Unexpected Token Unary Exponentiation`));\n\t\t}\n\t\treturn this.factory.createAwaitExpression(value, this.createRange(start));\n\t}\n\tprotected parseNullishExpression(expression: ExpressionNode): ExpressionNode {\n\t\t// CoalesceExpression ::\n\t\t// CoalesceExpressionHead ?? BitwiseORExpression\n\t\t//\n\t\t// CoalesceExpressionHead ::\n\t\t// CoalesceExpression\n\t\t// BitwiseORExpression\n\n\t\t// We create a binary operation for the first nullish, otherwise collapse\n\t\t// into an nary expression.\n\n\t\tconst list: ExpressionNode[] = [];\n\t\tlist.push(expression);\n\t\twhile (this.peek().isType(Token.NULLISH)) {\n\t\t\tthis.consume(Token.NULLISH);\n\t\t\t// Parse BitwiseOR or higher.\n\t\t\texpression = this.parseBinaryExpression(6);\n\t\t\tlist.push(expression);\n\t\t}\n\t\texpression = list.pop()!;\n\t\texpression = list.reverse()\n\t\t\t.reduce((previous, current) => this.factory.createLogicalExpression(Token.NULLISH.getName() as LogicalOperator, current, previous), expression);\n\t\treturn expression;\n\t}\n\tprotected parseConditionalContinuation(expression: ExpressionNode): ExpressionNode {\n\t\tthis.consume(Token.CONDITIONAL);\n\t\tthis.setAcceptIN(true);\n\t\tconst left: ExpressionNode = this.parseAssignmentExpression();\n\t\tthis.restoreAcceptIN();\n\t\tthis.expect(Token.COLON);\n\t\tconst right = this.parseAssignmentExpression();\n\t\treturn this.factory.createConditionalExpression(expression, left, right);\n\t}\n\tprotected parseYieldExpression(): ExpressionNode {\n\t\t// YieldExpression ::\n\t\t// 'yield' ([no line terminator] '*'? AssignmentExpression)?\n\t\tthis.consume(Token.YIELD);\n\t\tlet delegating = false; // yield*\n\t\tlet expression: ExpressionNode | undefined;\n\t\tif (!this.scanner.hasLineTerminatorBeforeNext()) {\n\t\t\tif (this.check(Token.MUL)) {\n\t\t\t\tdelegating = true;\n\t\t\t}\n\t\t\tswitch (this.peek().token) {\n\t\t\t\tcase Token.EOS:\n\t\t\t\tcase Token.SEMICOLON:\n\t\t\t\tcase Token.RBRACE:\n\t\t\t\tcase Token.RBRACK:\n\t\t\t\tcase Token.RPAREN:\n\t\t\t\tcase Token.COLON:\n\t\t\t\tcase Token.COMMA:\n\t\t\t\tcase Token.IN:\n\t\t\t\t\t// The above set of tokens is the complete set of tokens that can appear\n\t\t\t\t\t// after an AssignmentExpression, and none of them can start an\n\t\t\t\t\t// AssignmentExpression. This allows us to avoid looking for an RHS for\n\t\t\t\t\t// a regular yield, given only one look-ahead token.\n\t\t\t\t\tif (!delegating) break;\n\t\t\t\t\t// Delegating yields require an RHS; fall through.\n\t\t\t\t\t// V8_FALLTHROUGH;\n\t\t\t\t\tthrow new Error(this.errorMessage(`Delegating yields require an RHS`));\n\t\t\t\tdefault:\n\t\t\t\t\texpression = this.parseAssignmentExpressionCoverGrammar();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn this.factory.createYieldExpression(delegating, expression);\n\t}\n\tprotected parseNewTargetExpression(start?: PositionMark): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (new.target) not supported.'));\n\t}\n\tprotected parseClassExpression(): ClassExpression {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseClassDeclaration(names: string[] | undefined, defaultExport: boolean, start: PositionMark): ClassDeclaration {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseClassLiteral(name: ExpressionNode | undefined, isStrictReserved: boolean): ExpressionNode {\n\t\tthrow new Error(this.errorMessage(`Expression (class) not supported.`));\n\t}\n\tprotected parseSuperExpression(): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (supper) not supported.'));\n\t}\n\tprotected parseImportExpressions(): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (import) not supported.'));\n\t}\n\tprotected parseWithStatement(): ExpressionNode {\n\t\tthrow new Error(this.errorMessage('Expression (with) not supported.'));\n\t}\n}\n"]}