parseUnit(augment)
  skipErrorTokens(augment)
  listener: beginCompilationUnit(augment)
  syntheticPreviousToken(augment)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(augment)
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      isReservedKeyword(()
      parseTopLevelMethod(, augment, null, augment, Instance of 'NoType', null, method, false)
        listener: beginTopLevelMethod(, augment, null)
        listener: handleNoType(augment)
        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(method, topLevelFunctionDeclaration)
        parseMethodTypeVar(method)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
          parseFormalParameters(method, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(augment, null, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
      isReservedKeyword(()
      parseTopLevelMethod(}, augment, external, external, Instance of 'NoType', null, method, false)
        listener: beginTopLevelMethod(}, augment, external)
        listener: handleNoType(external)
        ensureIdentifierPotentiallyRecovered(external, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(method, topLevelFunctionDeclaration)
        parseMethodTypeVar(method)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
          parseFormalParameters(method, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(augment, null, ;)
  listener: endTopLevelDeclaration(external)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(external)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(external)
      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
      isReservedKeyword(()
      parseTopLevelMethod(;, augment, external, augment, Instance of 'NoType', null, method, false)
        listener: beginTopLevelMethod(;, augment, external)
        listener: handleNoType(augment)
        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(method, topLevelFunctionDeclaration)
        parseMethodTypeVar(method)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
          parseFormalParameters(method, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(external, null, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      parseTopLevelMethod(;, augment, null, augment, Instance of 'VoidType', null, method, false)
        listener: beginTopLevelMethod(;, augment, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(method, topLevelFunctionDeclaration)
        parseMethodTypeVar(method)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
          parseFormalParameters(method, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(augment, null, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
      parseTopLevelMethod(}, augment, external, external, Instance of 'VoidType', null, method, false)
        listener: beginTopLevelMethod(}, augment, external)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(method, topLevelFunctionDeclaration)
        parseMethodTypeVar(method)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
          parseFormalParameters(method, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(augment, null, ;)
  listener: endTopLevelDeclaration(external)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(external)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(external)
      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
      parseTopLevelMethod(;, augment, external, augment, Instance of 'VoidType', null, method, false)
        listener: beginTopLevelMethod(;, augment, external)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(method, topLevelFunctionDeclaration)
        parseMethodTypeVar(method)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
          parseFormalParameters(method, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(external, null, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      isReservedKeyword(=>)
      parseTopLevelMethod(;, augment, null, augment, Instance of 'NoType', get, getter, false)
        listener: beginTopLevelMethod(;, augment, null)
        listener: handleNoType(augment)
        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(=>)
        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
          listener: handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
        parseAsyncModifierOpt(getter)
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(getter, false, false)
          parseExpressionFunctionBody(=>, false)
            parseExpression(=>)
              parsePrecedenceExpression(=>, 1, true)
                parseUnaryExpression(=>, true)
                  parsePrimary(=>, expression)
                    parseLiteralNull(=>)
                      listener: handleLiteralNull(null)
            ensureSemicolon(null)
            listener: handleExpressionFunctionBody(=>, ;)
            inGenerator()
        listener: endTopLevelMethod(augment, get, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
      isReservedKeyword(;)
      parseTopLevelMethod(;, augment, external, external, Instance of 'NoType', get, getter, false)
        listener: beginTopLevelMethod(;, augment, external)
        listener: handleNoType(external)
        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(;)
        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
          listener: handleNoFormalParameters(;, MemberKind.TopLevelMethod)
        parseAsyncModifierOpt(getter)
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(getter, false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(augment, get, ;)
  listener: endTopLevelDeclaration(external)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(external)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(external)
      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
      isReservedKeyword(;)
      parseTopLevelMethod(;, augment, external, augment, Instance of 'NoType', get, getter, false)
        listener: beginTopLevelMethod(;, augment, external)
        listener: handleNoType(augment)
        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(;)
        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
          listener: handleNoFormalParameters(;, MemberKind.TopLevelMethod)
        parseAsyncModifierOpt(getter)
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(getter, false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(external, get, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      parseTopLevelMethod(;, augment, null, augment, Instance of 'SimpleType', get, getter, false)
        listener: beginTopLevelMethod(;, augment, null)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(get)
        listener: handleType(int, null)
        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(=>)
        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
          listener: handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
        parseAsyncModifierOpt(getter)
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(getter, false, false)
          parseExpressionFunctionBody(=>, false)
            parseExpression(=>)
              parsePrecedenceExpression(=>, 1, true)
                parseUnaryExpression(=>, true)
                  parsePrimary(=>, expression)
                    parseLiteralInt(=>)
                      listener: handleLiteralInt(0)
            ensureSemicolon(0)
            listener: handleExpressionFunctionBody(=>, ;)
            inGenerator()
        listener: endTopLevelMethod(augment, get, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
      parseTopLevelMethod(;, augment, external, external, Instance of 'SimpleType', get, getter, false)
        listener: beginTopLevelMethod(;, augment, external)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(get)
        listener: handleType(int, null)
        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(;)
        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
          listener: handleNoFormalParameters(;, MemberKind.TopLevelMethod)
        parseAsyncModifierOpt(getter)
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(getter, false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(augment, get, ;)
  listener: endTopLevelDeclaration(external)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(external)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(external)
      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
      parseTopLevelMethod(;, augment, external, augment, Instance of 'SimpleType', get, getter, false)
        listener: beginTopLevelMethod(;, augment, external)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(get)
        listener: handleType(int, null)
        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(;)
        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
          listener: handleNoFormalParameters(;, MemberKind.TopLevelMethod)
        parseAsyncModifierOpt(getter)
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(getter, false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(external, get, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      isReservedKeyword(()
      parseTopLevelMethod(;, augment, null, augment, Instance of 'NoType', set, setter, false)
        listener: beginTopLevelMethod(;, augment, null)
        listener: handleNoType(augment)
        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
          parseFormalParameters(setter, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(value)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(value, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(augment, set, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
      isReservedKeyword(()
      parseTopLevelMethod(}, augment, external, external, Instance of 'NoType', set, setter, false)
        listener: beginTopLevelMethod(}, augment, external)
        listener: handleNoType(external)
        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
          parseFormalParameters(setter, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(value)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(value, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(), false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(augment, set, ;)
  listener: endTopLevelDeclaration(external)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(external)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(external)
      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
      isReservedKeyword(()
      parseTopLevelMethod(;, augment, external, augment, Instance of 'NoType', set, setter, false)
        listener: beginTopLevelMethod(;, augment, external)
        listener: handleNoType(augment)
        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
          parseFormalParameters(setter, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(value)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(value, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(), false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(external, set, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      parseTopLevelMethod(;, augment, null, augment, Instance of 'VoidType', set, setter, false)
        listener: beginTopLevelMethod(;, augment, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
          parseFormalParameters(setter, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(value)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(value, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(augment, set, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(})
      listener: beginTopLevelMember(augment)
      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
      parseTopLevelMethod(}, augment, external, external, Instance of 'VoidType', set, setter, false)
        listener: beginTopLevelMethod(}, augment, external)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
          parseFormalParameters(setter, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(value)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(value, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(), false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(augment, set, ;)
  listener: endTopLevelDeclaration(external)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(external)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(external)
      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
      parseTopLevelMethod(;, augment, external, augment, Instance of 'VoidType', set, setter, false)
        listener: beginTopLevelMethod(;, augment, external)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
        listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
          parseFormalParameters(setter, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(value)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(value, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        inPlainSync()
        parseFunctionBody(), false, true)
          listener: handleEmptyFunctionBody(;)
        listener: endTopLevelMethod(external, set, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      parseFields(;, null, augment, null, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, var, ;)
        listener: handleNoType(var)
        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
          listener: handleIdentifier(field, topLevelVariableDeclaration)
        parseFieldInitializerOpt(field, field, null, null, augment, null, var, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, var, 1, augment, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
      parseFields(;, null, augment, external, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, var, ;)
        listener: handleNoType(var)
        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
          listener: handleIdentifier(field, topLevelVariableDeclaration)
        parseFieldInitializerOpt(field, field, null, null, augment, external, var, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(external, null, null, null, var, 1, augment, ;)
  listener: endTopLevelDeclaration(external)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(external)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(external)
      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
      parseFields(;, null, augment, external, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, var, ;)
        listener: handleNoType(var)
        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
          listener: handleIdentifier(field, topLevelVariableDeclaration)
        parseFieldInitializerOpt(field, field, null, null, augment, external, var, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(external, null, null, null, var, 1, external, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      parseFields(;, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, null, ;)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(field)
        listener: handleType(int, null)
        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
          listener: handleIdentifier(field, topLevelVariableDeclaration)
        parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.TopLevel, null)
          listener: beginFieldInitializer(=)
          parseExpression(=)
            parsePrecedenceExpression(=, 1, true)
              parseUnaryExpression(=, true)
                parsePrimary(=, expression)
                  parseLiteralInt(=)
                    listener: handleLiteralInt(0)
          listener: endFieldInitializer(=, ;)
        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(augment)
      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
      parseFields(;, null, augment, external, null, null, null, null, external, Instance of 'SimpleType', field, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, null, ;)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(field)
        listener: handleType(int, null)
        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
          listener: handleIdentifier(field, topLevelVariableDeclaration)
        parseFieldInitializerOpt(field, field, null, null, augment, external, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(external, null, null, null, null, 1, augment, ;)
  listener: endTopLevelDeclaration(external)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(external)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(external)
      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
      parseFields(;, null, augment, external, null, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, null, ;)
        listener: handleIdentifier(int, typeReference)
        listener: handleNoTypeArguments(field)
        listener: handleType(int, null)
        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
          listener: handleIdentifier(field, topLevelVariableDeclaration)
        parseFieldInitializerOpt(field, field, null, null, augment, external, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(external, null, null, null, null, 1, external, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      parseClassOrNamedMixinApplication(null, null, augment, class)
        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(Class, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(class, null, null, augment, Class)
        parseClass(Class, class, class, Class)
          parseClassHeaderOpt(Class, class, class)
            parseClassExtendsOpt(Class)
              listener: handleNoType(Class)
              listener: handleClassExtends(null, 1)
            parseClassWithClauseOpt(Class)
              listener: handleClassNoWithClause()
            parseClassOrMixinOrEnumImplementsOpt(Class)
              listener: handleImplements(null, 0)
            listener: handleClassHeader(class, class, null)
          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
            notEofOrValue(}, })
            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
          listener: endClassDeclaration(class, })
  listener: endTopLevelDeclaration(abstract)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(abstract)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
      reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}])
        listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}], augment, augment)
      parseClassOrNamedMixinApplication(abstract, null, augment, class)
        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(Class, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginClassDeclaration(abstract, abstract, null, augment, Class)
        parseClass(Class, abstract, class, Class)
          parseClassHeaderOpt(Class, abstract, class)
            parseClassExtendsOpt(Class)
              listener: handleNoType(Class)
              listener: handleClassExtends(null, 1)
            parseClassWithClauseOpt(Class)
              listener: handleClassNoWithClause()
            parseClassOrMixinOrEnumImplementsOpt(Class)
              listener: handleImplements(null, 0)
            listener: handleClassHeader(abstract, class, null)
          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
            notEofOrValue(}, })
            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
          listener: endClassDeclaration(abstract, })
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
    parseMetadataStar(})
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      parseClassOrNamedMixinApplication(null, null, augment, class)
        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(Class, classOrMixinDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginNamedMixinApplication(class, null, null, augment, Class)
        parseNamedMixinApplication(Class, class, class)
          listener: handleIdentifier(Object, typeReference)
          listener: handleNoTypeArguments(with)
          listener: handleType(Object, null)
          parseMixinApplicationRest(Object)
            parseTypeList(with)
              listener: beginTypeList(Mixin)
              listener: handleIdentifier(Mixin, typeReference)
              listener: handleNoTypeArguments(;)
              listener: handleType(Mixin, null)
              listener: endTypeList(1)
            listener: handleNamedMixinApplicationWithClause(with)
          ensureSemicolon(Mixin)
          listener: endNamedMixinApplication(class, class, =, null, ;)
  listener: endTopLevelDeclaration(abstract)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(abstract)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
      reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}])
        listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}], augment, augment)
      parseClassOrNamedMixinApplication(abstract, null, augment, class)
        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
        ensureIdentifier(class, classOrMixinDeclaration)
          listener: handleIdentifier(Class, classOrMixinDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginNamedMixinApplication(abstract, abstract, null, augment, Class)
        parseNamedMixinApplication(Class, abstract, class)
          listener: handleIdentifier(Object, typeReference)
          listener: handleNoTypeArguments(with)
          listener: handleType(Object, null)
          parseMixinApplicationRest(Object)
            parseTypeList(with)
              listener: beginTypeList(Mixin)
              listener: handleIdentifier(Mixin, typeReference)
              listener: handleNoTypeArguments(;)
              listener: handleType(Mixin, null)
              listener: endTypeList(1)
            listener: handleNamedMixinApplicationWithClause(with)
          ensureSemicolon(Mixin)
          listener: endNamedMixinApplication(abstract, class, =, null, ;)
  listener: endTopLevelDeclaration(augment)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(augment)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, mixin, null, Instance of 'DirectiveContext')
      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
      parseMixin(augment, mixin)
        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
        ensureIdentifier(mixin, classOrMixinDeclaration)
          listener: handleIdentifier(Mixin, classOrMixinDeclaration)
        listener: handleNoTypeVariables({)
        listener: beginMixinDeclaration(augment, mixin, Mixin)
        parseMixinHeaderOpt(Mixin, mixin)
          parseMixinOnOpt(Mixin)
            listener: handleMixinOn(null, 0)
          parseClassOrMixinOrEnumImplementsOpt(Mixin)
            listener: handleImplements(null, 0)
          listener: handleMixinHeader(mixin)
        parseClassOrMixinOrExtensionBody(Mixin, DeclarationKind.Mixin, Mixin)
          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
          notEofOrValue(}, })
          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 0, {, })
        listener: endMixinDeclaration(mixin, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(augment)
  listener: endCompilationUnit(29, )
