beginCompilationUnit(@)
  beginMetadataStar(@)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleNoTypeArguments(@)
      handleNoArguments(@)
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(abstract, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(@)
      handleNoArguments(@)
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(.)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      handleNoArguments(@)
    endMetadata(@, ., @)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleNoTypeArguments(()
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(abstract, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(()
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(.)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., @)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., @)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., class)
  endMetadataStar(10)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(X, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, X)
      handleNoType(X)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(abstract, metadataReference)
            handleNoTypeArguments(T)
            handleNoArguments(T)
          endMetadata(@, null, T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(abstract, metadataReference)
              handleNoTypeArguments(X)
              handleNoArguments(X)
            endMetadata(@, null, X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(abstract, metadataReference)
              handleNoTypeArguments(int)
              handleNoArguments(int)
            endMetadata(@, null, int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(abstract, metadataContinuation)
            handleQualified(.)
            handleNoTypeArguments(T)
            handleNoArguments(T)
          endMetadata(@, null, T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(abstract, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(X)
              handleNoArguments(X)
            endMetadata(@, null, X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(abstract, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(int)
              handleNoArguments(int)
            endMetadata(@, null, int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(bar, metadataContinuation)
            handleQualified(.)
            handleNoTypeArguments(.)
            handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            handleNoArguments(T)
          endMetadata(@, ., T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(.)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              handleNoArguments(X)
            endMetadata(@, ., X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(.)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              handleNoArguments(int)
            endMetadata(@, ., int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleNoTypeArguments(()
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, null, T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleNoTypeArguments(()
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleNoTypeArguments(()
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(abstract, metadataContinuation)
            handleQualified(.)
            handleNoTypeArguments(()
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, null, T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(abstract, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(()
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(abstract, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(()
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(bar, metadataContinuation)
            handleQualified(.)
            handleNoTypeArguments(.)
            handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, ., T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(.)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(.)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            beginTypeArguments(<)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(>)
              handleType(int, null)
            endTypeArguments(1, <, >)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, null, T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            beginTypeArguments(<)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(>)
              handleType(int, null)
            endTypeArguments(1, <, >)
            handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, ., T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(bar, metadataContinuation)
            handleQualified(.)
            beginTypeArguments(<)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(>)
              handleType(int, null)
            endTypeArguments(1, <, >)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, null, T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(bar, metadataContinuation)
            handleQualified(.)
            beginTypeArguments(<)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(>)
              handleType(int, null)
            endTypeArguments(1, <, >)
            handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, ., T)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., X)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., int)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(@)
  beginMetadataStar(@)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(abstract, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(@)
      handleNoArguments(@)
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(.)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      handleNoArguments(@)
    endMetadata(@, ., @)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleNoTypeArguments(()
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(abstract, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(()
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(.)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., @)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., @)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, @)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., class)
  endMetadataStar(9)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(Y, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, Y)
      handleNoType(Y)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration()
endCompilationUnit(12, )
