beginCompilationUnit(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({)
        beginMetadataStar(local)
        endMetadataStar(0)
        handleNoTypeVariables(()
        beginLocalFunctionDeclaration(local)
          handleNoType({)
          beginFunctionName(local)
            handleIdentifier(local, localFunctionDeclaration)
          endFunctionName(local, ()
          beginFormalParameters((, MemberKind.Local)
          endFormalParameters(0, (, ), MemberKind.Local)
          handleNoInitializers()
          handleAsyncModifier(null, null)
          beginBlockFunctionBody({)
          endBlockFunctionBody(0, {, })
        endLocalFunctionDeclaration(})
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
