beginCompilationUnit(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginFunctionTypeAlias(typedef)
    handleIdentifier(E1, typedefDeclaration)
    beginTypeVariables(<)
      beginMetadataStar(T)
      endMetadataStar(0)
      handleIdentifier(T, typeVariableDeclaration)
      beginTypeVariable(T)
        handleTypeVariablesDefined(T, 1)
        handleNoType(T)
      endTypeVariable(>, 0, null, null)
    endTypeVariables(<, >)
    beginFunctionType(void)
      handleNoTypeVariables(()
      handleVoidKeyword(void)
      beginFormalParameters((, MemberKind.GeneralizedFunctionType)
      endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
    endFunctionType(Function, null)
  endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
  handleIdentifier(E2, typedefDeclaration)
  beginTypeVariables(<)
    beginMetadataStar(T)
    endMetadataStar(0)
    handleIdentifier(T, typeVariableDeclaration)
    beginTypeVariable(T)
      handleTypeVariablesDefined(num, 1)
      handleIdentifier(num, typeReference)
      handleNoTypeArguments(>)
      handleType(num, null)
    endTypeVariable(>, 0, extends, null)
  endTypeVariables(<, >)
  beginFunctionType(void)
    handleNoTypeVariables(()
    handleVoidKeyword(void)
    beginFormalParameters((, MemberKind.GeneralizedFunctionType)
    endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
  endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(E3, typedefDeclaration)
beginTypeVariables(<)
  beginMetadataStar(T)
  endMetadataStar(0)
  handleIdentifier(T, typeVariableDeclaration)
  beginTypeVariable(T)
    beginMetadataStar(S)
    endMetadataStar(0)
    handleIdentifier(S, typeVariableDeclaration)
    beginTypeVariable(S)
      handleTypeVariablesDefined(S, 2)
      handleNoType(S)
    endTypeVariable(>, 1, null, null)
    handleNoType(T)
  endTypeVariable(,, 0, null, null)
endTypeVariables(<, >)
beginFunctionType(void)
  handleNoTypeVariables(()
  handleVoidKeyword(void)
  beginFormalParameters((, MemberKind.GeneralizedFunctionType)
  endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(E4, typedefDeclaration)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
  beginMetadataStar(S)
  endMetadataStar(0)
  handleIdentifier(S, typeVariableDeclaration)
  beginTypeVariable(S)
    handleTypeVariablesDefined(num, 2)
    handleIdentifier(num, typeReference)
    handleNoTypeArguments(>)
    handleType(num, null)
  endTypeVariable(>, 1, extends, null)
  handleIdentifier(num, typeReference)
  handleNoTypeArguments(,)
  handleType(num, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
beginFunctionType(void)
handleNoTypeVariables(()
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(E5, typedefDeclaration)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
  handleTypeVariablesDefined(num, 2)
  handleIdentifier(num, typeReference)
  handleNoTypeArguments(>)
  handleType(num, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(S, typeReference)
handleNoTypeArguments(,)
handleType(S, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
beginFunctionType(void)
handleNoTypeVariables(()
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(E6, typedefDeclaration)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(T, 2)
handleIdentifier(T, typeReference)
handleNoTypeArguments(>)
handleType(T, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(num, typeReference)
handleNoTypeArguments(,)
handleType(num, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
beginFunctionType(void)
handleNoTypeVariables(()
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(F1, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
handleTypeVariablesDefined(T, 1)
handleNoType(T)
endTypeVariable(>, 0, null, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(F2, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
handleTypeVariablesDefined(num, 1)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(F3, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(S, 2)
handleNoType(S)
endTypeVariable(>, 1, null, null)
handleNoType(T)
endTypeVariable(,, 0, null, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(F4, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(num, 2)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(num, typeReference)
handleNoTypeArguments(,)
handleType(num, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(F5, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(num, 2)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(S, typeReference)
handleNoTypeArguments(,)
handleType(S, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(F6, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(T, 2)
handleIdentifier(T, typeReference)
handleNoTypeArguments(>)
handleType(T, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(num, typeReference)
handleNoTypeArguments(,)
handleType(num, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(G1, typedefDeclaration)
beginTypeVariables(<)
beginMetadataStar(X)
endMetadataStar(0)
handleIdentifier(X, typeVariableDeclaration)
beginTypeVariable(X)
handleTypeVariablesDefined(X, 1)
handleNoType(X)
endTypeVariable(>, 0, null, null)
endTypeVariables(<, >)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
handleTypeVariablesDefined(X, 1)
handleIdentifier(X, typeReference)
handleNoTypeArguments(>)
handleType(X, null)
endTypeVariable(>, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(G2, typedefDeclaration)
beginTypeVariables(<)
beginMetadataStar(X)
endMetadataStar(0)
handleIdentifier(X, typeVariableDeclaration)
beginTypeVariable(X)
handleTypeVariablesDefined(num, 1)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 0, extends, null)
endTypeVariables(<, >)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
handleTypeVariablesDefined(X, 1)
handleIdentifier(X, typeReference)
handleNoTypeArguments(>)
handleType(X, null)
endTypeVariable(>, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(G3, typedefDeclaration)
beginTypeVariables(<)
beginMetadataStar(X)
endMetadataStar(0)
handleIdentifier(X, typeVariableDeclaration)
beginTypeVariable(X)
beginMetadataStar(Y)
endMetadataStar(0)
handleIdentifier(Y, typeVariableDeclaration)
beginTypeVariable(Y)
handleTypeVariablesDefined(Y, 2)
handleNoType(Y)
endTypeVariable(>, 1, null, null)
handleNoType(X)
endTypeVariable(,, 0, null, null)
endTypeVariables(<, >)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(Y, 2)
handleIdentifier(Y, typeReference)
handleNoTypeArguments(>)
handleType(Y, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(X, typeReference)
handleNoTypeArguments(,)
handleType(X, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(G4, typedefDeclaration)
beginTypeVariables(<)
beginMetadataStar(X)
endMetadataStar(0)
handleIdentifier(X, typeVariableDeclaration)
beginTypeVariable(X)
beginMetadataStar(Y)
endMetadataStar(0)
handleIdentifier(Y, typeVariableDeclaration)
beginTypeVariable(Y)
handleTypeVariablesDefined(num, 2)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(num, typeReference)
handleNoTypeArguments(,)
handleType(num, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(Y, 2)
handleIdentifier(Y, typeReference)
handleNoTypeArguments(>)
handleType(Y, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(X, typeReference)
handleNoTypeArguments(,)
handleType(X, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(G5, typedefDeclaration)
beginTypeVariables(<)
beginMetadataStar(X)
endMetadataStar(0)
handleIdentifier(X, typeVariableDeclaration)
beginTypeVariable(X)
handleTypeVariablesDefined(num, 1)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 0, extends, null)
endTypeVariables(<, >)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(X, 2)
handleIdentifier(X, typeReference)
handleNoTypeArguments(>)
handleType(X, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(S, typeReference)
handleNoTypeArguments(,)
handleType(S, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(G6, typedefDeclaration)
beginTypeVariables(<)
beginMetadataStar(X)
endMetadataStar(0)
handleIdentifier(X, typeVariableDeclaration)
beginTypeVariable(X)
handleTypeVariablesDefined(num, 1)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 0, extends, null)
endTypeVariables(<, >)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(T, 2)
handleIdentifier(T, typeReference)
handleNoTypeArguments(>)
handleType(T, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(X, typeReference)
handleNoTypeArguments(,)
handleType(X, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(H1, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
handleNoTypeVariables(()
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
beginMetadataStar(void)
endMetadataStar(0)
beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
handleTypeVariablesDefined(T, 1)
handleNoType(T)
endTypeVariable(>, 0, null, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleNoName())
handleFormalParameterWithoutValue())
endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(H2, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
handleNoTypeVariables(()
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
beginMetadataStar(void)
endMetadataStar(0)
beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
handleTypeVariablesDefined(num, 1)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleNoName())
handleFormalParameterWithoutValue())
endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(H3, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
handleNoTypeVariables(()
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
beginMetadataStar(void)
endMetadataStar(0)
beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(S, 2)
handleNoType(S)
endTypeVariable(>, 1, null, null)
handleNoType(T)
endTypeVariable(,, 0, null, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleNoName())
handleFormalParameterWithoutValue())
endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(H4, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
handleNoTypeVariables(()
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
beginMetadataStar(void)
endMetadataStar(0)
beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(num, 2)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(num, typeReference)
handleNoTypeArguments(,)
handleType(num, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleNoName())
handleFormalParameterWithoutValue())
endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(H5, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
handleNoTypeVariables(()
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
beginMetadataStar(void)
endMetadataStar(0)
beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(num, 2)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(S, typeReference)
handleNoTypeArguments(,)
handleType(S, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleNoName())
handleFormalParameterWithoutValue())
endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(typedef)
beginMetadataStar(typedef)
endMetadataStar(0)
beginFunctionTypeAlias(typedef)
handleIdentifier(H6, typedefDeclaration)
handleNoTypeVariables(=)
beginFunctionType(void)
handleNoTypeVariables(()
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
beginMetadataStar(void)
endMetadataStar(0)
beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(T, 2)
handleIdentifier(T, typeReference)
handleNoTypeArguments(>)
handleType(T, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(num, typeReference)
handleNoTypeArguments(,)
handleType(num, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleNoName())
handleFormalParameterWithoutValue())
endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
handleTypeVariablesDefined(T, 1)
handleNoType(T)
endTypeVariable(>, 0, null, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleIdentifier(f1, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, void, ;)
endTopLevelDeclaration(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
handleTypeVariablesDefined(num, 1)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleIdentifier(f2, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, void, ;)
endTopLevelDeclaration(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(S, 2)
handleNoType(S)
endTypeVariable(>, 1, null, null)
handleNoType(T)
endTypeVariable(,, 0, null, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleIdentifier(f3, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, void, ;)
endTopLevelDeclaration(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(num, 2)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(num, typeReference)
handleNoTypeArguments(,)
handleType(num, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleIdentifier(f4, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, void, ;)
endTopLevelDeclaration(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(num, 2)
handleIdentifier(num, typeReference)
handleNoTypeArguments(>)
handleType(num, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(S, typeReference)
handleNoTypeArguments(,)
handleType(S, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleIdentifier(f5, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, void, ;)
endTopLevelDeclaration(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
beginFunctionType(void)
beginTypeVariables(<)
beginMetadataStar(T)
endMetadataStar(0)
handleIdentifier(T, typeVariableDeclaration)
beginTypeVariable(T)
beginMetadataStar(S)
endMetadataStar(0)
handleIdentifier(S, typeVariableDeclaration)
beginTypeVariable(S)
handleTypeVariablesDefined(T, 2)
handleIdentifier(T, typeReference)
handleNoTypeArguments(>)
handleType(T, null)
endTypeVariable(>, 1, extends, null)
handleIdentifier(num, typeReference)
handleNoTypeArguments(,)
handleType(num, null)
endTypeVariable(,, 0, extends, null)
endTypeVariables(<, >)
handleVoidKeyword(void)
beginFormalParameters((, MemberKind.GeneralizedFunctionType)
endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
endFunctionType(Function, null)
handleIdentifier(f6, topLevelVariableDeclaration)
handleNoFieldInitializer(;)
endTopLevelFields(null, null, null, null, null, 1, void, ;)
endTopLevelDeclaration(main)
beginMetadataStar(main)
endMetadataStar(0)
beginTopLevelMember(main)
beginTopLevelMethod(;, null)
handleNoType(;)
handleIdentifier(main, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
endBlockFunctionBody(0, {, })
endTopLevelMethod(main, null, })
endTopLevelDeclaration()
endCompilationUnit(31, )
